gpt4 book ai didi

python - 无法将多个小部件连接到同一个插槽

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:24 25 4
gpt4 key购买 nike

我正在使用 for 循环创建一系列按钮,我希望它们在单击时都触发相同的方法,但在该方法中我需要检查单击了哪个按钮。使用下面的代码,当单击任何按钮时,该方法始终认为单击了“按钮 4”,即使单击了另一个按钮。

如何更改代码以使“打印机”方法识别各个按钮?

import sys
from PySide import QtGui, QtCore


class MyTest( QtGui.QWidget ):
def __init__(self):
super(MyTest, self).__init__()
self.initUI()


def initUI(self):
hbox = QtGui.QHBoxLayout()
self.setLayout(hbox)
self.setWindowTitle('Buttons test')
self.show()

buttons = {}
for n in range(0, 5):
buttons[n] = QtGui.QPushButton()
buttons[n].setText('Button ' + str(n))
hbox.addWidget(buttons[n])
buttons[n].released.connect( lambda : self.printer( object_name=buttons[n].text() ) )


def printer(self, object_name):
print object_name


def main():
app = QtGui.QApplication(sys.argv)
ex = MyTest()
sys.exit(app.exec_())


if __name__ == '__main__':
main()

我正在使用 PySide 执行此操作,但我认为这对于 PyQt 来说是相同的解决方案。

最佳答案

您不需要为此使用 lambda。只需连接事件,然后使用 sender() 即可获取在函数内调用它的对象。

连接按钮事件:

buttons[n].released.connect(self.printer)

打印机功能:

def printer(self):
print self.sender().text()

我在 PyQt 上尝试过这个,但我目前没有安装 PySide 来测试它,但它应该可以工作。

关于python - 无法将多个小部件连接到同一个插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28942504/

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