我有一个像这样定义的函数:
def func(self, boolVal):
我希望在QPushButton()
和这个函数之间创建一个连接:
self.button1.clicked.connect(partial(self.func, False))
当我运行它时,它告诉我func()
正好接受2个参数(给出3个)
谁知道为什么会这样呢?
答案 0 :(得分:4)
functools.partial
效果很好。
参见以下示例:
from functools import partial
from PyQt4.QtGui import *
class MyWindow(QWidget):
def __init__(self):
super(QWidget, self).__init__()
self.button = QPushButton('test', parent=self)
self.button.clicked.connect(partial(self.func, False))
self.button.show()
def func(self, boolVar):
print boolVar
app = QApplication([])
win = MyWindow()
win.show()
app.exec_()
如果仍然出现错误,请将func
签名替换为:
def func(self, boolVar, checked):
print boolVar
答案 1 :(得分:0)
第一个参数是self
参数,它在您编写self.func
时绑定。第二个参数是您提供给False
的{{1}},因此当Qt使用来自partial
的第三个bool checked
参数调用它时,您最终得到3个参数。
只需写下:
QPushButton.clicked
但是,self.button1.clicked.connect(self.func)
参数是可选的,因此checked
应定义为:
func