Python 在PyQt5中,如何使用自己的变量将事件函数分配给QWidget In循环?
我不熟悉python和PyQt。为了说明我的问题,我编写了以下代码:Python 在PyQt5中,如何使用自己的变量将事件函数分配给QWidget In循环?,python,qt,user-interface,pyqt5,Python,Qt,User Interface,Pyqt5,我不熟悉python和PyQt。为了说明我的问题,我编写了以下代码: class Window(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) layout = QHBoxLayout(self) label1 = QLabel("label1") label1.mouseReleaseEvent = lambda even
class Window(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
layout = QHBoxLayout(self)
label1 = QLabel("label1")
label1.mouseReleaseEvent = lambda event: self.changeText(event, label1)
layout.addWidget(label1)
label2 = QLabel("label2")
label2.mouseReleaseEvent = lambda event: self.changeText(event, label2)
layout.addWidget(label2)
for i in range(0,2):
label = QLabel("label")
label.mouseReleaseEvent = lambda event: self.changeText(event, label)
layout.addWidget(label)
def changeText(self, event, label):
label.setText("pressed")
所以,我们有4个标签,我试图使其可点击。Label1和label2按预期工作。单击标签,然后更改文本。但是对于那些在循环中创建的标签,赋值工作不正确。传递给函数的标签始终是最后一个。无论单击哪个标签,最后一个标签都会更改其文本。这种行为对我来说似乎很神奇。我需要一个建议,告诉我如何以这样的方式组织循环,使每个标签都能将自己传递到一个函数中?这是因为python会绑定label-later的值,直到调用它为止 您可以通过这样编写处理程序来解决这个问题
label.mouseReleaseEvent = lambda event, label=label: self.changeText(event, label)
参考: