2017-10-20 4 views
1

Ich habe zwei Linien, das alte SIGNAL und SCHLITZ Stil mit ..Verwenden von neuen Style-Signal und Slots für Combobox?

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

Ich habe mich gefragt, was der neue Stil aussehen würde. Ich bin neu bei Python und habe wenig Erfahrung mit Signalen und Slots. Gibt es eine wirklich gute Ressource, die das deckt? Die Dokumentation half mir nicht wirklich zu verstehen, was vor sich ging.

Antwort

1

Die Lösung ist, die Art des Arguments des Signals, um anzuzeigen, die emittiert wird:

combo.activated[type].connect(someSlot) 

Beispiel:

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

Gibt es irgendeinen Grund vs emit in diesem Fall eine Verbindung zu benutzen? –

+0

Verbinden vs emittieren sind 2 komplementäre Dinge, wenn Sie verbinden ist, um die Verbindung zwischen dem Signal und dem Steckplatz zu erstellen, stattdessen, wenn das Signal ausgeführt wird, sagen Sie dem PyQt, dass Sie alle Steckplätze aufrufen müssen, die zuvor mit dem verbunden waren Signal. Daher gibt es keinen Versus zwischen Verbinden und Emittieren. – eyllanesc

+0

Nur um sicherzustellen, dass ich das verstehe, wenn ich mehrere Signale an einen Steckplatz angeschlossen habe, und ich alle diese aktualisieren möchte, würde ich emit verwenden? –

Verwandte Themen