2017-10-20 17 views
1

J'ai deux lignes en utilisant l'ancien style SIGNAL et SLOT ..Utilisation d'un nouveau signal de style et d'emplacements pour la zone de liste déroulante?

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

Je me demandais à quoi ressemblerait le nouveau style comme. Je suis nouveau sur python et je n'ai pas beaucoup d'expérience avec les signaux et les machines à sous. Y at-il une très bonne ressource qui circule autour de cela? La documentation ne m'a pas vraiment aidé à comprendre ce qui se passait.

Répondre

1

La solution est d'indiquer le type d'argument du signal qui est émis:

combo.activated[type].connect(someSlot) 

Exemple:

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

Y at-il raison d'utiliser la connexion vs Emit dans ce cas? –

+0

Connect vs emit sont deux choses complémentaires, lorsque vous utilisez connect est de créer la connexion entre le signal et l'emplacement, au lieu que le signal s'exécute, vous dites à la PyQt que vous devez appeler tous les emplacements qui étaient précédemment connectés à la signal. Par conséquent il n'y a pas de versus entre connecter et émettre. – eyllanesc

+0

Juste pour m'assurer que je comprends cela, si j'ai plusieurs signaux connectés à un slot, et je veux mettre à jour tout cela, je voudrais utiliser emit? –