我有一个单击按钮,我想在按下按钮时更改事件。现有代码的最小版本如下所示:
# Event that happens the first time
def first_event(self):
button.setText("Second Event")
button.clicked.connect(second_event)
# Event that happens the second time
def second_event(self):
button.setText("First Event")
button.clicked.connect(first_event)
button = QtGui.QPushButton("First Event")
button.clicked.connect(first_event)
不幸的是,不是更改发生的事件,只是添加和事件到点击的信号,这意味着发生以下情况:
按下第一个按钮 - 调用first_event
按下第二个按钮 - 调用first_event和second_event
第三次按下按钮 - 两次调用first_event和second_event
等...
我希望的行为是按下按钮时更改功能,以便产生的行为是:
按下第一个按钮 - 调用first_event
按下第二个按钮 - 调用second_event
按第三个按钮 - 调用first_event
等...
有没有办法让它改变点击事件而不是添加新事件?事后是否有办法删除事件?
答案 0 :(得分:1)
我找到了一种使用disconnect()
方法将旧事件与信号分开的方法。这是一个完成我原本想要做的编辑版本:
# Event that happens the first time
def first_event(self):
button.setText("Second Event")
button.clicked.disconnect()
button.clicked.connect(second_event)
# Event that happens the second time
def second_event(self):
button.setText("First Event")
button.clicked.disconnect()
button.clicked.connect(first_event)
button = QtGui.QPushButton("First Event")
button.clicked.connect(first_event)
值得注意的是,我最终没有这样做,我最终做了ekhumoro在评论中提到的内容,并创建了一个带有标记的包装函数来记录当前状态,然后调用first_event()
或{ {1}}基于旗帜的价值。