QPushButton 的子类化 [英] Subclassing of QPushButton
问题描述
我一直在寻找一种继承 QPushButton 的方法,这样我就可以在构建新按钮时连接点击"信号,例如:
Btn = CustomButtonClass('Text', clicked='lambda: self.func(par)')
到目前为止 - 没有任何成功.
我想是将正确的参数传递给 CustomButtonClass 的 init(),但不知道是什么,为什么.
我有什么:
class CustomButtonClass(QtGui.QPushButton):def __init__(self, text, parent=None):super().__init__()
我也注意到:
Btn.clicked.connect(lambda: self.func(par))
也不起作用.
我是否必须覆盖 QPushButton 的 mouseReleaseEvent 或构建自定义信号才能完成我的任务?
你不需要创建子类,因为 PyQt 和 PySide 都已经有这个功能(见 PyQt 文档中的使用关键字参数连接信号).
演示:
<预><代码>>>>从 PyQt4 导入 QtGui>>>app = QtGui.QApplication([])>>>btn = QtGui.QPushButton('Test', clicked=lambda: print('Hello World!'))>>>btn.click()你好,世界!如果你仍然需要子类化,那么你当然可以简单地做:
class CustomButtonClass(QtGui.QPushButton):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)
I've been looking for a way of subclassing QPushButton, so I can connect 'clicked' signal when constructing new button, like:
Btn = CustomButtonClass('Text', clicked='lambda: self.func(par)')
So far - without any success.
I guess the thing is to pass correct parameters to init() of CustomButtonClass, but have no idea what, and why.
What I've got:
class CustomButtonClass(QtGui.QPushButton):
def __init__(self, text, parent=None):
super().__init__()
I also noticed that:
Btn.clicked.connect(lambda: self.func(par))
Also doesn't work.
Do I have to override QPushButton's mouseReleaseEvent or construct custom signal to be able to complete my task?
You don't need to create a sub-class, because both PyQt and PySide already have this feature (see Connecting Signals Using Keyword Arguments in the PyQt docs).
Demo:
>>> from PyQt4 import QtGui
>>> app = QtGui.QApplication([])
>>> btn = QtGui.QPushButton('Test', clicked=lambda: print('Hello World!'))
>>> btn.click()
Hello World!
If you still need to subclass, then of course you can simply do:
class CustomButtonClass(QtGui.QPushButton):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
这篇关于QPushButton 的子类化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!