我不熟悉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个标签,我想让它可以点击。用作标签1。单击标签,然后更改文本。但是对于那些在循环中创建的标签,赋值是不正确的。传递给函数的标签总是最后一个。无论单击哪个标签,最后一个标签都将更改其文本。这种行为在我看来很神奇。我需要一个建议,如何以这样的方式组织循环,使每个标签传递自己到一个函数?在
之所以会发生这种情况,是因为python会在调用label之前绑定label的值。在
您可以通过这样编写处理程序来解决这个问题。在
参考:
相关问题 更多 >
编程相关推荐