我正在尝试Slicer
使用 qt 在 Python 中开发一个模块。我有一个按钮列表(QPushButton
),我希望它们的每个"clicked"
信号都绑定到相同的方法,但传递不同的参数(这只是为了知道按下了哪个按钮)。
我正在寻找的是这样的:
def createButtons(self):
for object in self.myList:
button = qt.QPushButton(object.name)
button.clicked.connect(self.myMethod(object.name)) # I know this is not valid
def myMethod(self, name):
print name, 'was pressed.'
我已经使用了这里和这里建议的所有三种方式,但我有不同的问题:
解决方案一团糟,
QSignalMapper
因为我不能使用 PyQt/PySide。lambda 解决方案使我的代码始终打印最后一个按钮的文本,无论按下哪个按钮。我写了类似的东西:
button.clicked.connect(lambda : self.myMethod(object.name))
部分解决方案实现为:
button.clicked.connect(functools.partial(self.myMethod, object.name))
但我收到以下错误:
TypeError: myMethod() takes exactly 2 arguments (3 given)
现在我正在使用一个可怕的不同书面方法列表,所以我的丑陋解决方案有效,是:
button.clicked.connect(self.myButtonMethods[self.myList.index(object)])
我希望我的问题以前没有被问过,你可以帮助我。
谢谢!