Soweit ich weiß, ist dies nicht möglich, da raw_input Eingaben von der Python-Befehlskonsole akzeptiert. Es gibt jedoch einige Möglichkeiten, um es zu umgehen, die nicht erwartet werden können:
1 - Erstellen Sie ein einfaches Tkinter-Fenster mit dem Ausgang und einer Eingabezeile, anstatt die Konsole zu verwenden. Erstellen Sie eine benutzerdefinierte Druckfunktion, die die Nachricht an das Ende des Fenstertextes anfügt (in einer Bildlaufleiste mit einer Schriftart mit fester Breite) und dann ein Eingabeaufforderungsfeld erstellen kann, das auf Enter reagiert. Der Code für das wäre in etwa so aussehen:
from Tkinter import *
root = Tk()
topframe=Frame(root)
bottomframe=Frame(root)
bottomframe.pack(side=BOTTOM,fill=X)
topframe.pack(side=TOP,fill=BOTH)
scrollbar = Scrollbar(topframe)
scrollbar.pack(side=RIGHT,fill=Y)
text = Text(topframe,yscrollcommand=scrollbar.set)
text.pack(side=LEFT,fill=BOTH)
scrollbar.config(command=text.yview)
text.config(state=DISABLED)
v = StringVar()
e = Entry(bottomframe,textvariable=v)
def submit():
command = v.get()
v.set('')
#your input handling code goes here.
wprint(command)
#end your input handling
e.bind('<Return>',submit)
button=Button(bottomframe,text='RUN',command=submit)
button.pack(side=RIGHT)
e.pack(expand=True,side=LEFT,fill=X)
def wprint(obj):
text.config(state=NORMAL)
text.insert(END,str(obj)+'\n')
text.config(state=DISABLED)
root.mainloop()
Eine andere Möglichkeit wäre eine eigene Druck- und raw_input Methoden schaffen so etwas wie folgt aussehen:
import threading
wlock=threading.Lock()
printqueue=[]
rinput=False
def winput(text):
with wlock:
global printqueue,rinput
rinput=True
text = raw_input(text)
rinput=False
for text in printqueue:
print(text)
printqueue=[]
return text
def wprint(obj):
global printqueue
if not(rinput):
print(str(obj))
else:
printqueue.append(str(obj))
Warum sind Sie nicht ein GUI-Framework für so etwas? –