我有一個QPushbutton:
btn = QPushButton("Click me")
btn.clicked.connect(lambda: print("one"))
稍后在我的程式中,我想重新系結它的點擊處理程式,我試圖通過connect再次呼叫來實作這一點:
btn.clicked.connect(lambda: print("two"))
我希望看到控制臺只列印two,但實際上它同時列印了one和two。換句話說,我實際上將兩個單擊處理程式系結到按鈕。
如何重新系結點擊處理程式?
uj5u.com熱心網友回復:
Qt 中的信號和槽是觀察者模式(pub-sub)實作,許多物件可以訂閱同一個信號并多次訂閱。他們可以取消訂閱disconnect功能。
from PyQt5 import QtWidgets, QtCore
if __name__ == "__main__":
app = QtWidgets.QApplication([])
def handler1():
print("one")
def handler2():
print("two")
button = QtWidgets.QPushButton("test")
button.clicked.connect(handler1)
button.show()
def change_handler():
print("change_handler")
button.clicked.disconnect(handler1)
button.clicked.connect(handler2)
QtCore.QTimer.singleShot(2000, change_handler)
app.exec()
在 lambda 的情況下,您只能使用disconnect()(不帶引數)一次斷開所有訂閱者,這對于按鈕情況很好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/463643.html
下一篇:使用輸入掩碼正確輸入電話號碼
