In PyQt5 Ereignisse (Buttonklick auslösen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

Hallo,

ich habe ein kleines Problemchen mit PyQt5.
Und zwar arbeite ich eine Anleitung durch, die PyQt4 behandelt. Leider musste ich nun feststellen, dass sich von PyQt4 zu PyQt5 einiges geändert hat. Lange Rede, kurzer Sinn - ich möchte für ein Ereignis (in meinem Fall ein Klick auf einen Button) eine Funktion ausführen lassen. In PyQt4 weiß ich jetzt, wie das geht, aber die .connect - Methode gibts anscheinend in PyQt5 nicht mehr.
Hier mal mein Code:

Code: Alles auswählen

app = QApplication(sys.argv)

hauptfenster = loadUi("fenster.ui")

hauptfenster.connect(hauptfenster.ButtonDaten, SIGNAL("clicked()"), dateneingabeklick)

hauptfenster.show()
sys.exit(app.exec_())
Und weiter oben ist halt nur die Funktion noch definiert. Aber die ist nicht das Problem. Ich bekomme die Meldung, dass das Attribut connect in QDialog nicht existiert.

Ich danke schonmal.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das wird direkt mit den Signalen gemacht, und das wird eigentlich in der PyQt5-Dokumentation lang und breit erklaert. Fuer deinen Fall muesste es

Code: Alles auswählen

hauptfenster.ButtonDaten.clicked.connect(dateneingabeklick)
sein.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Cortez: So hätte man das auch in PyQt4 schon nicht mehr gemacht.

Code: Alles auswählen

hauptfenster.connect(hauptfenster.ButtonDaten, SIGNAL("clicked()"), dateneingabeklick)
# ->
hauptfenster.ButtonDaten.clicked.connect(dateneingabeklick)
Wobei die Namenschreibweisen von `ButtonDaten` und `dateneingabeklick()` weder den Qt- noch den Python-Namenskonventionen entsprechen. Sowohl in Python als auch bei Qt sind Namen in MixedCase für Klassen vorbehalten. In Qt werden Attribute in `camelCase` benannt und in Python klein_mit_unterstrichen. Ich persönlich halte mit bei GUI-Code meistens an die Konvention des GUI-Rahmenwerks und bei der Geschäftslogik dann an die Python-Konventionen. Also beispielsweise:

Code: Alles auswählen

hauptfenster.dateneingabeButton.clicked.connect(starte_dateneingabe)
Wobei es in der Regel besser ist englische Namen zu vergeben statt am Ende ein Deutsch/Englisch-Gemisch zu haben, weil Python-Schlüsselworte und Namen in allen anderen Bibliotheken ja Englisch sind. Also:

Code: Alles auswählen

main_window.dataEntryButton.clicked.connect(start_data_entry)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

Alles klar. Ich danke. Jetzt läufts :)
Antworten