PyQt4 ComboBox-item mit einer Funktion verbinden

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
BlackJack

@smile-1969: 1. `partial()` nimmt eine Funktion oder Methode und Werte und erstellt eine neue Funktion, die wenn man sie Aufruft die übergebene Funktion/Methode mit den Werten aufruft, wobei man eventuell noch weitere Werte angeben muss wenn man bei `partial()` nicht für alle Argumente der übergebenen Funktion/Methode Werte übergeben hat.

Code: Alles auswählen

In [4]: operator.add(42, 23)
Out[4]: 65

In [5]: add_answer = partial(operator.add, 42)

In [6]: add_answer(23)
Out[6]: 65

In [7]: add_answer(10)
Out[7]: 52

In [8]: add_answer(-4)
Out[8]: 38
Im Programm erstelle ich also eine Funktion die `self.on_led_button()` mit `True` als Argument aufruft für den einen Button und eine die das selbe mit `False` als Argument macht für den anderen. Weil `connect()` eine Funktion erwartet die *kein* Argument erwartet. Der Index in die Pin-Nummern hat damit überhaupt nichts zu tun.

2. Die Pin-Nummern werden der Klasse ja als Argument übergeben. Da könnte ja durchaus eine leere Liste übergeben werden und damit würden keine Einträge in die Combobox geschrieben und damit kann -1 als Wert in der Methode tatsächlich vorkommen.
smile-1969
User
Beiträge: 20
Registriert: Sonntag 22. März 2015, 16:46

Alles klar! Ab jetzt ist 'partial' auch mein Freund :wink: ...ein einfaches Beispiel erklärt oft mehr als tausend Google-Seiten! :!:
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Bevor du dich mit Google rumschlägst um Funktionen zu suchen, solltest du am besten gleich die Python-Dokumentation benutzen. Das spart unnötig viel Arbeit und du hast die Informationen direkt von der Quelle. Zu partial gibt es dort auch ein kleines Beispiel. Das ist in den meisten Fällen so.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wir hatten zu ``partial`` auch einst einen tollen Beitrag hier im Forum... ich weiß nur nicht mehr, *wer* der Regulars dieses Beispiel gepostet hatte... da wurde ``partial`` selber hergeleitet und am Schluss dann eben das vorhandene verlinkt. Ich meine Leonidas war das... aber ich finde den Beitrag einfach nicht :-(
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
smile-1969
User
Beiträge: 20
Registriert: Sonntag 22. März 2015, 16:46

Habe mir das ganze mal ohne 'partial' etc. zusammengebastelt, hat mir selbst gut geholfen die einzelnen Schritte zu verstehen...aber Wahnsinn, das Script wird elendig lang! Im Gegensatz zu Assembler bietet Python da wirklich erstaunliche Möglichkeiten. Völlig suspekt ist mir bis dato alles was mit Klassen, Objekten, parents, children etc...zusammenhängt. Werde mir jetzt erstmal passende Lektüre besorgen und mich in dieser Hinsicht durch das Forum/Web kämpfen.
Würde gerne für alle die den selben schmalen Wissens-Status erleiden wie ich, mein extrem vereinfachtes Beispiel in diesem Thema einstellen, damit für alle Anfänger deutlich wird wie einfach die Nutzung einer Combobox ist.
Mein einfaches Beispiel funktioniert, aber es wäre nett wenn ihr dann noch mal ein Auge darauf werfen könntet-möchte schließlich niemanden mit falschen Infos versorgen! (Anfang nächste Woche)
Und ganz ehrlich, jetzt, wo das ein oder andere funktioniert - da fängt es richtig an Spaß zu machen!
BlackJack

@smile-1969: Wenn Die alles mit Objekten völlig suspekt ist: *Alle* Werte in Python sind Objekte. Es gibt also kein Programm, ausser vielleicht einem völlig Leeren, wo Du nicht mit mindestens einem Objekt zu tun hast. ;-)

Der Sprung von Assembler zu einem GUI-Rahmenwerk wie Qt ist aber auch ein ziemlich weiter Sprung.
Antworten