QPushButton的子类化

时间:2016-03-27 18:17:59

标签: python pyqt pyside qpushbutton

我一直在寻找一种子类化QPushButton的方法,所以我可以在构建新按钮时连接'clicked'信号,例如:

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或构建自定义信号才能完成我的任务?

1 个答案:

答案 0 :(得分:1)

您不需要创建子类,因为PyQt和PySide都已具有此功能(请参阅PyQt文档中的Connecting Signals Using Keyword Arguments)。

演示:

>>> from PyQt4 import QtGui
>>> app = QtGui.QApplication([])
>>> btn = QtGui.QPushButton('Test', clicked=lambda: print('Hello World!'))
>>> btn.click()
Hello World!

如果您仍需要子类,那么您当然可以这样做:

class CustomButtonClass(QtGui.QPushButton):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)