根據條件我想連接/重新連接一個按鈕到不同的功能。PyQt Widget connect()和disconnect()
比方說,我有一個按鈕:
myButton = QtGui.QPushButton()
對於這個例子,讓我們說,我檢查是否有互聯網連接。
if connected == True:
myButton.clicked.connect(function_A)
elif connected == False:
myButton.clicked.connect(function_B)
所有我想從它已經連接按鈕被重新分配/重新連接到另一個功能(function_A或function_B)之前的任何功能斷開的按鈕的第一。其次,我已經注意到,在按鈕重新連接之後,需要額外點擊按鈕來獲取新功能。在按鈕重新連接到另一個功能後,它仍然嘗試運行先前的功能 - 一個按鈕之前連接的功能(在重新連接之前)。請指教。提前致謝!
LATER EDITED:
似乎Widget的.disconnect()方法可以用來斷開按鈕從一個函數它它連接。
myButton.disconnect()
不幸的是,如果一個小部件沒有連接到任何函數,那麼.disconnect()會拋出一個錯誤。 爲了解決它,我使用了Try/Except。但我寧願用更優雅的解決方案......
try: myButton.clicked.disconnect()
except Exception: pass
引發的異常是什麼?有點奇怪。請注意,myButton.disconnect()與myButton.clicked.disconnect()不同,您實際上是指什麼? – Schollii
@Schollii。它引發了一個'TypeError'。這個例外並不奇怪:事實上,這是非常可取的。它之所以被引入,是因爲舊式的連接和斷開信號的方法失敗了,這可能隱藏很多潛在的錯誤。總之,在更多的pythonic中引發異常。 – ekhumoro
感謝您的解釋。我只是不明白爲什麼一個應該斷開所有信號的函數應該將「當前沒有連接」視爲異常行爲。 OTOH如果你嘗試斷開連接(someSignal)並且該信號不存在*,那麼我可以將它看作是應該被標記的例外情況。但是,anyhoo,它既不在這裏,也不在那裏,謝謝你的信息。 – Schollii