Wie übergeben Sie Argumente an Callback-Funktionen in PyQt

7

Ich habe etwa 10 QAction (diese Zahl wird in der Laufzeit variieren) in einer Symbolleiste, die alle dasselbe tun werden, aber verschiedene Parameter verwenden. Ich denke, dem QAction-Objekt Parameter als Attribut hinzuzufügen, und dann sendet das ausgelöste Signal von QAction auch das Objekt selbst an die Callback-Funktion, so dass ich die erforderlichen Parameter für die Funktion erhalten konnte. Ich habe eigentlich 2 Fragen dazu:

  • Kann es gemacht werden?
  • Gibt es einen besseren Weg, dies zu tun?
yasar 11.01.2012, 18:03
quelle

5 Antworten

4

Sie können das Action-Objekt selbst mithilfe eines Signal-Mappers senden. Es kann jedoch besser sein, einfach einen Bezeichner zu senden und alle Arbeiten innerhalb des Signal-Handlers auszuführen.

Hier ist ein einfaches Demo-Skript:

%Vor%     
ekhumoro 11.01.2012, 18:41
quelle
36
  

Wie übergeben Sie Argumente an Callback-Funktionen in PyQt

Sie können functools.partial aus einer Standard-Python-Bibliothek verwenden. Beispiel mit QAction :

%Vor%     
reclosedev 11.01.2012 18:35
quelle
9

Sie können eine Lambda-Funktion verwenden, die dem Slot des GUI-Steuerelements zugeordnet ist, um zusätzliche Argumente an die Methode zu übergeben, die Sie ausführen möchten.

%Vor%

Quelle: snip2code - Verwenden der Lambda-Funktion zum Übergeben eines zusätzlichen Arguments in PyQt4

    
Dominique Terrs 03.11.2013 10:43
quelle
3

Der beste Weg, die Argumente zu übergeben, besteht darin, sie nicht zu bestehen. Sie können die dynamische Natur von Python verwenden und alle Daten, die Sie benötigen, als eigene Eigenschaften für die Widgets selbst festlegen, das Ziel-Widget im Handler mit self.sender() abrufen und dann die benötigten Eigenschaften direkt aus dem Widget abrufen.

In diesem Beispiel werden fünf Schaltflächen erstellt, und der erforderliche Status wird im Schaltflächen-Widget als my_own_data property:

festgelegt %Vor%     
ccpizza 29.11.2015 09:14
quelle
1

Es gibt immer noch einen Fehler in der Art, wie PyQt QSignalMapper benutzt. Ich habe hier eine Lösung gefunden:

Ссылка

Um die beantwortete Frage zu beheben, nehmen Sie folgende Änderung vor:

%Vor%

Dies wurde für die folgende Version von Python benötigt:

%Vor%     
John Wasinger 05.09.2013 17:22
quelle

Tags und Links