Python: Konvertieren von CLI in GUI

8

Ich habe ein Python-Programm, das eine Reihe von Operationen ausführt und die Antwort auf STDOUT ausgibt. Jetzt schreibe ich eine GUI, die diesen bereits existierenden Code aufruft und ich möchte den gleichen Inhalt in der GUI anstelle von STDOUT ausgeben. Ich werde das Text-Widget für diesen Zweck verwenden. Ich möchte meinen vorhandenen Code, der die Aufgabe ausführt, nicht ändern (Dieser Code wird auch von anderen Programmen verwendet).

Kann mir jemand bitte sagen, wie ich diese vorhandene Aufgabendefinition verwenden und ihr STDOUT-Ergebnis verwenden und in ein Text-Widget einfügen kann? Im GUI-Hauptprogramm möchte ich diese Taskdefinition aufrufen und ihre Ergebnisse in STDOUT ausgeben. Gibt es eine Möglichkeit, diese Informationen zu verwenden?

    
sarbjit 10.09.2012, 12:30
quelle

4 Antworten

11

Sie können das wahrscheinlich lösen, indem Sie sys.stdout durch ein eigenes dateiähnliches Objekt ersetzen, das in das Text-Widget schreibt.

Zum Beispiel:

%Vor%     
Bryan Oakley 10.09.2012, 12:57
quelle
3

In python rufen Sie bei jedem Aufruf von print ('examplestring') indirekt sys.stdout.write ('examplestring') auf :

%Vor%

Methode 1: Ausdruck auf GUI

%Vor%

Tatsächlich rufen wir print - (callsfor) - & gt; sys.stdout.write - (callsfor) - & gt; Redirector

Methode 2: Schreiben eines Dekorators - Ausdruck auf CLI und GUI

%Vor%

Was ein Dekorator tut, ist, dass er func sys.stdout.write func innerlich

zuweist %Vor%

und func inner fügt eine zusätzliche Codezeile hinzu, bevor die tatsächliche sys.stdout.write

aufgerufen wird

Dies ist in gewisser Weise eine Aktualisierung der älteren Funktion sys.stdout.write, um eine neue Funktion zu haben. Sie werden bemerken, dass ich versucht habe - außer, dass, wenn beim Drucken in das Textfeld ein Fehler aufgetreten ist, ich zumindest die ursprüngliche Funktion von sys.stdout.write auf der CLI beibehalten würde.

Methode 3: Bryan Oakleys Beispiel

%Vor%

Er hat sys.stdout mit einer Methode .write (str)

der Klasse TextRedirector zugewiesen

so anruft print ('string') - ruft for- & gt; sys.stdout.write ('string') -callsfor- & gt; TextRedirector.write ('Zeichenfolge')

    
Yuukio 13.07.2015 16:18
quelle
1

Sie können das CLI-Programm aufrufen, indem Sie subprocess.Popen verwenden, um das ausgegebene stdout zu erhalten. und es im Text-Widget anzeigen.

Etwas in der Art von (ungetestet):

%Vor%

Beachten Sie, dass dies blockiert wird, bis das CLI-Programm ausgeführt wird und Ihre GUI eingefroren wird. Um die Blockierung zu umgehen, können Sie diesen Code in eine threading.Thread setzen und die GUI freigeben während des Wartens auf den Abschluss des Threads aktualisieren.

    
pR0Ps 10.09.2012 13:24
quelle
-1

Die Funktion, die normalerweise auf stdout druckt, sollte stattdessen den Text in das Text-Widget einfügen.

    
Some programmer dude 10.09.2012 12:40
quelle

Tags und Links