gpt4 book ai didi

python - 将按钮信号绑定(bind)到 Qt 中的插槽所需的另一种解决方案

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:26 25 4
gpt4 key购买 nike

我正在尝试使用 qt 在 Python 中开发一个 Slicer 模块。我有一个按钮列表 (QPushButton),我希望它们的每个 "clicked" 信号绑定(bind)到相同的方法但传递不同的参数(这只是为了知道按下了什么按钮)。

我正在寻找的是这样的:

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.'

我已经使用了所有建议的三种方式 herehere ,但我有不同的问题:

  • 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)])

我希望我的问题以前没有被问过,希望你能帮助我。

谢谢!

最佳答案

根据 this page ,pyQT在4.5之后引入了新的API

试试这个:

QtCore.QObject.connect(button, QtCore.SIGNAL('clicked()'), functools.partial(self.myMethod, object.name) )

关于python - 将按钮信号绑定(bind)到 Qt 中的插槽所需的另一种解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25382506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com