3 Stimmen

subprocess.call() interagiert mit GUI (Tkinter)

Gibt es eine Möglichkeit, die subprocess.call() o subprocess.Popen() und interagieren mit der stdin über Tkinters Entry Widget, und geben Sie den stdout in ein Text Widget?

Ich bin mir nicht sicher, wie ich so etwas angehen soll, denn ich bin neu im Umgang mit dem subprocess Modul.

2voto

Jdog Punkte 9423

Ich denke, ich habe die Grundlagen der Verwendung eines Entry als stdin an den Unterprozess. Möglicherweise müssen Sie es für Ihre eigenen Bedürfnisse anpassen (z. B. Ausgabe an Text Widget).

Dieses Beispiel ruft ein Testskript auf:

# test.py:

#!/usr/bin/env python
a = raw_input('Type something!: \n') #the '\n' flushes the prompt
print a

die lediglich eine Eingabe erfordert (von sys.stdin ) und druckt sie aus.

Der Aufruf und die Interaktion mit dem Programm über eine grafische Benutzeroberfläche erfolgt mit:

from Tkinter import *
import subprocess

root = Tk() 

e = Entry(root)
e.grid()

b = Button(root,text='QUIT',command=root.quit)
b.grid()

def entryreturn(event):
    proc.stdin.write(e.get()+'\n') # the '\n' is important to flush stdin
    e.delete(0,END)

# when you press Return in Entry, use this as stdin 
# and remove it
e.bind("<Return>", entryreturn)

proc = subprocess.Popen('./test.py',stdin=subprocess.PIPE)

root.mainloop()

Was auch immer Sie nun in Entry e (gefolgt von der Return Schlüssel), wird dann über stdin an proc .

Ich hoffe, das hilft.


Prüfen Sie auch este für Ideen über stdout von Unterprozessen Frage. Sie müssen ein neues stdout schreiben, um stdout an das Textwidget umzuleiten, etwa so:

class MyStdout(object):
    def __init__(self,textwidget):
        self.textwidget = textwidget
    def write(self,txt):
        self.textwidget.insert(END,txt)

sys.stdout = MyStdout(mytextwidget)

aber ich würde empfehlen, andere Beispiele zu lesen, in denen dies gelungen ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X