我的PyQt4/Python3 GUI中有幾個QComboBoxes,它們在初始化過程中充滿了數據庫中的一些條目。初始CurrentIndex設置爲0.還有一個複選框,用於更改組合框中項目的語言。爲了保留當前的用戶選擇,我使用翻譯的項目填寫ComboBox後,將當前項目的索引和setCurrentIndex備份到此編號。所有這些動作都會發出currentIndexChanged信號。從編程化變化中分離用戶交互:PyQt,QComboBox
根據QComboBoxes中選定的項目顯示一些情節。這個想法是在用戶改變任何ComboBox當前項目後立即在線重繪圖形。在這裏我遇到了一個問題,因爲如果每次觸發currentIndexChanged信號時重繪圖,我都會在初始化過程中多次重畫它,如果轉換複選框選擇已更改。
什麼是分開這些案件的最佳方式?原則上,我需要從用戶中分離程序化的當前索引更改,並僅在後面的情況下更新繪圖(在GUI初始化期間,我可以編程調用更新繪圖功能一次)。我應該寫/重寫任何信號?如果是這樣,我從來沒有這樣做,並會歡迎任何暗示或一個很好的例子。使用另一個信號?或者也許有辦法暫時阻止所有信號?
感謝很多很好的例證!我採取了blockSignals解決方案。順便說一句,如果我使用QT設計器而不是程序佈局,那麼實際上是否可以「確保在連接信號之前完成所有初始化」?信號在哪一點被激活? – Katya 2012-02-13 14:14:17
@Katya。使用Qt Designer,您只能將預先存在的信號連接到預先存在的插槽(而不是您自己的處理程序)。因此,在實踐中,幾乎所有的信號都需要在gui建立之後連接(除非應用程序非常簡單)。就我個人而言,我只使用Qt Designer來設計gui,而且很少使用它來連接信號。 – ekhumoro 2012-02-13 19:20:21