python中部分函数的参数

时间:2013-10-07 10:36:00

标签: python pyqt

我有一个像这样定义的函数:

def func(self, boolVal):

我希望在QPushButton()和这个函数之间创建一个连接:

self.button1.clicked.connect(partial(self.func, False))

当我运行它时,它告诉我func()正好接受2个参数(给出3个) 谁知道为什么会这样呢?

2 个答案:

答案 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