Python 在PyQt5中,如何使用自己的变量将事件函数分配给QWidget In循环?

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

我不熟悉python和PyQt。为了说明我的问题,我编写了以下代码:

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)
参考: