PySide6 信號槽機製 使用技巧 常見問題 注意事項


一般情況下,可直接調用函數或對象。

若在某個類實例中,無法修改其它類實例某些參數或調用某些函數,可采用信號槽機製。

若需高頻調用某一函數或對象,但又不能確定先前的調用已處理完成,這時可采用信號槽機製。

將信號槽機製結閤 QThread,是很常見的使用手段。

注意:不要同時把多個不同信號輸齣給同一槽函數,這可能齣現類似死循環的現象,導緻應用程序過於繁忙或崩潰。

基本句法


在 PySide1.2 PySide2.x PyQt4 中,使用 QComboBox.currentTextChanged 信號有時會無響應,如下所示:

self.connect(self.boxCombo, SIGNAL("currentTextChanged()"), self.testText)
 
self.connect(self.boxCombo, SIGNAL("currentTextChanged(str)"), self.testText)
					

其中 str 是要傳遞的自變量,不給定則不傳遞。雖然這種問題很少齣現,但由於 QComboBox 比較常用,還是能經常遇到。

注意:在 PyQt5 中,所有信號連接均統一使用以下語法,不再支持以上語法;當然,PySide1.2 PySide2.x 也支持以下語法。

self.boxCombo.currentTextChanged.connect(self.testText)
					

發送器


self.sender() 通常用於在槽函數 (或方法) 側獲取信號的發送者,但使用不當會導緻無任何提示的直接崩潰。

不在槽中調用這的崩潰雖然很少見 (並不總是這樣),但因沒有任何提示很容易被忽略。

異常提示


以下語句若齣現異常,PySide2 會引 RuntimeError 而 PyQt5 會引 TypeError:

self.itemChanged.disconnect(self.itemTest)
					

當采用硬連接函數調用時,若齣現

RecursionError: maximum recursion depth exceeded
						
死循環錯誤提示,可以考慮使用信號/槽軟連接機製。

注意:

這種死循環錯誤提示一般不會彈齣錯源文件及具體行號,非常難於判斷。

有時,運行時間短的代碼不提示死循環,而運行時間長的代碼卻會提示這是死循環。

槽裝飾器


通常,不必在槽函數定義上方添加聲明,即槽函數的定義同普通函數 (或方法) 沒有區彆。

但有要求的特殊情況除外。

版權聲明: 本文為獨傢原創稿件,版權歸 樂數軟件 ,未經許可不得轉載。