Seite 1 von 1

PyQt4 Signale und Slots

Verfasst: Samstag 14. Februar 2015, 12:25
von janosh22
Hallo.

Ich bin gerade dabei mich in das Thema GUI mit PyQt einzuarbeiten. Habe mir dafür das Buch "PyQt und PySide" von Peter Bouda gekauft.
Beim abarbeiten der Lektion 1.6 "Signale und Slots", kommt wiedermal eine Frage auf.
Hier ein Auszug des Beispiels aus dem Buch:

Code: Alles auswählen

self.buttonTextAktualisieren = QtGui.QPushButton(u"Aktualisieren")
self.editText = QtGui.QLineEdit()
self.buttonTextAktualisieren.clicked.connect(self.text_aktualisieren)

@QtCore.pyqtSlot()
def text_aktualisieren(self):
     self.labelHalloWelt.setText(self.editText.text())
Ich arbeite als Anfänger noch stark mit der Autovervollständigung und gehe davon aus, dass verfügbare Methoden auch angezeigt werden.
In Zeile 3 soll das Signal clicked mit dem Slot text_aktualisieren verbunden werden.
Es wird jedoch keine Methode connect angeboten und die Inspection des Codes meldet folgendes:
Cannot find reference 'connect' in 'function'
Das Programm wird jedoch ohne Fehlermeldung ausgeführt.
Ich habe dann probehalber mal die Codezeile folgendermaßen ersetzt:

Code: Alles auswählen

QtCore.QObject.connect(self.buttonTextAktualisieren, QtCore.SIGNAL("clicked()"), self.text_aktualisieren)
Das funktioniert auch und wird nicht von der Code-Inspection moniert.
Kann mich jemand erleuchten?

mfg Jan

Re: PyQt4 Signale und Slots

Verfasst: Samstag 14. Februar 2015, 12:31
von BlackJack
@janosh22: Die Erleuchtung wäre wohl: Verlass Dich in dynamisch typisierten Programmiersprachen besser nicht zu sehr auf statsiche Analyse von Code. Das funktioniert halt nur bedingt.

Re: PyQt4 Signale und Slots

Verfasst: Samstag 14. Februar 2015, 13:27
von janosh22
@BlackJack: Danke für die Antwort.
Soll das jetzt heißen, auch wenn die Methode connect nicht angezeigt wird, lass dich nicht verwirren es ist richtig so?

Re: PyQt4 Signale und Slots

Verfasst: Samstag 14. Februar 2015, 13:30
von BlackJack
@janosh22: Wenn sie Dokumentiert ist und tatsächlich vorhanden ist, dann wäre es doch komisch sie nicht zu verwenden.

Re: PyQt4 Signale und Slots

Verfasst: Samstag 14. Februar 2015, 14:27
von janosh22
@BlackJack: Mein Problem ist, als Anfänger weiß ich ja nicht ob die Methode vorhanden ist.
Habe jetzt aber die PyQt4 Reference zurate gezogen und dort steht, dass connect() die Methode eines gebundenen Signals ist.

Habe noch eine Frage zu zwei Codezeilen
die folgende Codezeile ändert den Inhalt von labelHalloWelt wenn sich editText ändert

Code: Alles auswählen

self.editText.textChanged.connect(self.labelHalloWelt.setText)
die folgende Codezeile bewirkt hingegen nichts.

Code: Alles auswählen

QtCore.QObject.connect(self.editText, QtCore.SIGNAL("textChanged()"), self.labelHalloWelt.setText)
kannst du es mir erklären?
mfg Jan

Re: PyQt4 Signale und Slots

Verfasst: Samstag 14. Februar 2015, 15:30
von BlackJack
@janosh22: Es gibt kein 'textChanged()'-Signal. Versuch's mal mit 'textChanged(QString)'. Einer der Vorteile wenn man die `connect()`-Methode auf dem Signal-Objekt verwendet: man kann nicht aus versehen Signale verbinden die es nicht gibt. :-)

Re: PyQt4 Signale und Slots

Verfasst: Samstag 14. Februar 2015, 15:54
von janosh22
@BlackJack: Hab vielen Dank , bin durch deine prompte Hilfe heute ein gutes Stück vorangekommen.
Habe es mir soeben nochmal in der QLineEdit Class Reference angesehen.

erstmal schönes Wochenende
Jan