Seite 1 von 1
Funktion mit Rückgabewert mit PyQt5
Verfasst: Sonntag 19. Mai 2019, 12:38
von Cortez
Hallo,
ich würde gerne in einem mit pyqt5 erstellten Fenster eine Funktion ausführen, die zu einem Wert jeweils +2 dazuaddiert. Das ganze soll per Buttonklick erfolgen.
Also der Code soll etwa so aussehen:
Code: Alles auswählen
def Addiere(n):
return n+2
app = PyQt5.QtWidgets.QApplication(sys.argv)
fenster = PyQt5.uic.loadUi("hauptfenster.ui")
fenster.show()
wert = 1
wert= fenster.Button1.clicked.connect(Addiere(wert))
sys.exit(app.exec_())
Ich erhalte die Meldung, dass int irgendwie unerwartet sei. Die Funktion funktioniert aber soweit - auf Kommandozeilenbasis läuft das. Wie könnte ich das Problem lösen?
Re: Funktion mit Rückgabewert mit PyQt5
Verfasst: Sonntag 19. Mai 2019, 12:50
von __deets__
Du hast den Rückgabewert deiner Funktion als Signal Versucht zu benutzen. Das ist ein int. Daher die Fehlermeldung.
Um das erstmal zum laufen zu bringen benötigst du entweder ein lambda oder functools.partial.
Danach hast du dann natürlich immer noch das Problem, das ein Rückgabewert in einem clicked slot natürlich völlig sinnlos ist. Wo soll der denn enden?
Aus diesem Grund Programmierert man GUIs objektorientiert, weil man dann solche Ergebnisse zb an Labels binden kann oder in Datenstrukturen speichern etc - ohne dabei auf die Pest globale Variablen zurückgreifen zu müssen.
Re: Funktion mit Rückgabewert mit PyQt5
Verfasst: Sonntag 19. Mai 2019, 12:58
von Cortez
Naja ich möchte den Rückgabewert als Index für eine Liste benutzen.
Mit den lambda Funktion hatte ich folgendes probiert, bekam aber auch eine Fehlermeldung:
Code: Alles auswählen
fenster.Button1.clicked.connect(lambda: wert = wert +2
lambda cannot contain assignment sagt er mir da.
Re: Funktion mit Rückgabewert mit PyQt5
Verfasst: Sonntag 19. Mai 2019, 13:05
von __deets__
Ja. Kann es nicht. So sind lambdas nunmal. Nochmal: statt hier mit globalen Variablen rumzufuhrwerken, schreib eine Klasse, und dann kannst du ganz simpel eine Methode schreiben in der du deinen Wert berechnest und auf Listen zugreifst und was auch immer dein Herz begehrt.
Re: Funktion mit Rückgabewert mit PyQt5
Verfasst: Sonntag 19. Mai 2019, 13:09
von Cortez
Ok, dann danke ich dir soweit erstmal. Dann habe ich heute noch was zu tun - mein Quellcode ist bereits mehrere Seiten lang. Aber ich sehe ein, dass globale Variablen kein guter Stil sind.
Re: Funktion mit Rückgabewert mit PyQt5
Verfasst: Sonntag 19. Mai 2019, 13:23
von __blackjack__
@Cortez: Kann es sein, dass das hier eigentlich immer noch das Thema ist:
PyQt5: mit pushButton-Klick Schleife weiterlaufen lassen?
Selbst wenn eine Zuweisung in einem ``lambda``-Ausdrück möglich wäre, dann würde Dir das ja nichts nützen weil `wert` dann ein lokaler Name in der Funktion wäre und da die nächste Fehlermeldung käme weil Du versuchst auf den Wert zuzugreifen bevor er definiert wurde.
Wenn das als Index in eine Liste verwendet werden soll, warum dann mit 1 initialisieren und immer 2 addieren? Du hast da hoffentlich keine Liste erstellt in der jedes zweite Element etwas anderes bedeutet als sein Vorgänger‽