2015-05-03 30 views
0

我编写了一个python 3.4.2程序,以从python IDLE获取用户输入,对输入执行一些处理并使用print()在python IDLE中显示一些语句。 。将print()的输出发送到tkinter文本部件

现在我正在将其转换为使用tkinter的GUI。这是我为GUI编写的简单tkinter代码。

from tkinter import * 
root=Tk() 
root.title("Post-fix solver") 
root.geometry("500x500") 
mainframe=Frame(root) 
mainframe.grid(column=0, row=0) 

inputval=StringVar() 
inputentry=Entry(mainframe,textvariable=inputval).grid(column=1,row=1) 

executebutton=Button(mainframe,text="Run",command=check_expression).grid(column=1,row=5)    

outputtext=Text(mainframe).grid(column=1,row=5) 

root.mainloop() 

到目前为止,我能够通过在GUI中指定的inputentry进入小部件来获取用户输入并使用inputval.get其发送给一个变量在原代码()。然后它对输入执行处理,并在python IDLE中显示print()语句的输出。

我的问题是如何修改程序,将所有print()语句发送到名为outputtext的Text小部件并在GUI中显示它们?

我会很高兴,如果你能告诉我怎样,因为我在python初学者

+0

的可能重复[标准输出到Tkinter的GUI(http://stackoverflow.com/questions/3333334/stdout-to-tkinter-gui) – chdorr

回答

0

如果你正在使用Python 3.4+运行的程序过多,你可以使用contextlib.redirect_stdout做到不使用类捕捉到打印输出几个语句的持续时间为一个文件,甚至是一个字符串:

import io 
from contextlib import redirect_stdout 

... 

    file = io.StringIO() 
    with redirect_stdout(file): 
     # here be all the commands whose print output 
     # we want to capture. 

    output = file.getvalue() 
    # output is a `str` whose contents is everything that was 
    # printed within the above with block. 

否则美好的虽然有点更艰巨的办法就是让一个StringIO文件,并用它来打印,所以你会有

buffer = io.StringIO() 

print("something", file=buffer) 
print("something more", file=buffer) 

output = buffer.getvalue() 
text.insert(END, output) 
0

3个简单的步骤:

1)让您的变量的内容并把它给我会的名字varContent的变量;
2)清除文本小部件,即文本小部件的名称为text,然后运行text.delete(0, END);
3)将变量varContent中的字符串插入到text文本窗口小部件中,即执行text.insert(END, varContent)

我会做这样的我的代码:

from tkinter import * 


def check_expression(): 
    #Your code that checks the expression 
    varContent = inputentry.get() # get what's written in the inputentry entry widget 
    outputtext.delete('0', 'end-1c') # clear the outputtext text widget 
    outputtext.insert(varContent) 

root = Tk() 
root.title("Post-fix solver") 
root.geometry("500x500") 

mainframe = Frame(root) 
mainframe.grid(column=0, row=0) 

inputentry = Entry(mainframe) 
inputentry.grid(column=1, row=1) 

executebutton = Button(mainframe, text="Run", command=check_expression) 
executebutton.grid(column=1, row=5)    

outputtext = Text(mainframe) 
outputtext.grid(column=1, row=5) 

root.mainloop() 
相关问题