0

Ich habe gerade einen neuen Job angefangen. Vorhandener Code ist wxpython GUI, das teilweise implementiert ist. Der Unterschied besteht darin, dass es zwei unabhängige GUIs gibt: Eine ist ein "Statusmonitor mit Testabbruch-Schaltfläche" und die andere ist ein Testleiter, der Tests ausführt, die einige Minuten dauern können.2 "parallele" wxpython GUIs möglich?

Zu jedem Zeitpunkt sollte die Schaltfläche zum Abbrechen des Statusmonitor-GUI gedrückt werden können, um den Testprozess für lange laufende Tests zu stoppen, der in der Executive-GUI ausgeführt wird.

Der lange Skript-Prozess wird in einem neuen Thread gestartet und funktioniert von der Test Executive GUI, aber egal was ich tue, die GUI des Statusmonitors ist eingefroren.

Ich habe ähnliche Dinge in pyside getan und es schien nicht so viel von einem Bären als mit wxpython.

Ich denke, das ist ein Thread-Problem. scheint ein wxpython Problem zu sein.

Ist es möglich, 2 unabhängige wxpython-GUIs aus demselben Skript zu starten? Ich habe irgendwo gelesen, dass ich nur eine Hauptschleife brauche.

Alle Hinweise/Beispiele von zwei parallelen unabhängigen GUIs wäre großartig!

+0

Nichts hindert Sie von mehreren unabhängigen Fenstern aus demselben wxpython Anwendung starten. Sie werden jedoch alle die gleiche Ereignisschleife haben. Sie sollten den Hauptthread (die Ereignisschleife) sowieso nicht belasten (das ist kein Mangel). Sonst wird die GUI hängen. Für ein einfaches Beispiel siehe [diese Frage] (http://stackoverflow.com/questions/8263513/show-another-window-wxpython). –

Antwort

0

Ja und nein.

Soweit ich weiß, ist es nicht möglich, 2 GUIs nur durch Threads getrennt laufen zu lassen.

Wir hatten ein ziemlich ähnliches Problem. Da wir hauptsächlich Windows verwenden, mussten wir die Python-GIL umgehen, damit die GUI den Subprozess, der die Tests ausführt, stoppen kann.

Um dies zu tun, sind wir zu Multiprocessing-Bibliothek umgezogen und wir verwenden einen Processpool, der die Tests ausführt (wir führen mehrere Elemente gleichzeitig aus - Sie können nur einen Prozess für Ihren Zweck verwenden). In einem neuen Prozess können Sie auch eine zweite GUI ausführen, die völlig unabhängig ist (wir tun dies auch). Wenn Sie einen anderen Prozess verwenden, erhält er eine PID, die mit os.kill verwendet werden kann. Die Haupt-GUI wird dabei stabil bleiben.

Um mit dem neuen Prozess zu kommunizieren, verwenden wir Pyro4, aber Sie können auch einen Ansatz mit Warteschlangen verwenden, um die Kommunikation zu erledigen. Sie können nicht direkt auf Daten von einem anderen Prozess zugreifen, wenn Sie Windows wie beim Threading-Ansatz verwenden.

Hoffe, das hilft.

Grüße, Michael