2017-10-20 46 views
1

我有使用舊的SIGNAL和SLOT風格兩行..爲組合框使用新式信號和插槽?

combobox.emit(SIGNAL("activated(int)"), combobox.currentIndex()) 
combobox.emit(SIGNAL("activated(const QString &)"), combobox.currentText()) 

我想知道新的風格是什麼樣子。我是python的新手,對信號和插槽沒有太多經驗。是否有一個非常好的資源可以滿足這個需求?這些文檔並沒有真正幫助我理解發生了什麼。

回答

1

解決方案是指示正在發射的信號的參數的類型:

combo.activated[type].connect(someSlot) 

實施例:

class Widget(QWidget): 
    def __init__(self, parent=None): 
     QWidget.__init__(self, parent) 
     self.setLayout(QVBoxLayout()) 
     combo = QComboBox(self) 
     self.layout().addWidget(combo) 
     combo.addItems(["item1", "item2", "item3"]) 
     combo.activated[int].connect(self.onActivatedIndex) 
     combo.activated[str].connect(self.onActivatedText) 

    @pyqtSlot(int) 
    def onActivatedIndex(self, index): 
     print(index) 

    @pyqtSlot(str) 
    def onActivatedText(self, text): 
     print(text) 


if __name__ == '__main__': 
    import sys 
    app = QApplication(sys.argv) 
    w = Widget() 
    w.show() 
    sys.exit(app.exec_()) 
+0

是否有任何理由使用在這種情況下連接VS EMIT? –

+0

連接vs發射是兩個互補的東西,當你使用連接是創建信號和插槽之間的連接,而不是當信號執行發出時,你告訴PyQt,你必須調用所有先前連接到信號。因此在連接和發射之間沒有對比。 – eyllanesc

+0

只是爲了確保我理解這一點,如果我有幾個信號連接到一個插槽,並且我想更新所有這些,我會使用發射? –