将输出从print函数重定向到Text和并禁用它



如何在Tkinter中重定向按钮动作的输出到TextBox ?之后,文本框应该是灰色的。下面是我编写的示例代码,它在控制台上打印输出。我想要&;hello world&;待打印的文本框和文本框应呈灰色。如有任何帮助,不胜感激。

from tkinter import *
import tkinter as tk
root = Tk()
root.geometry('700x650')
readOnlyText = tk.Text(root)
def testmethod():
print("hello world-1")
textbox = Text(root,width=75,height=12)
textbox.place(x=60,y=100)
Button(root, text='Submit',command=testmethod,width=10,bg='brown',fg='white').place(x=300,y=350)
root.mainloop()

要拦截print函数,您需要更改sys.stdout目标。参考下面的示例

from tkinter import *
from io import StringIO
import sys
root = Tk()
root.geometry('700x650')
output=StringIO()
sys.stdout=output
def update():
textbox['state']='normal'
textbox.insert(END,output.getvalue())
output.truncate(0)
output.seek(0)
textbox['state']='disabled'
root.after(100,update)
def testmethod():
print('Hello World')
textbox = Text(root,width=75,height=12)
textbox.place(x=60,y=100)
button=Button(root, text='Submit',command=testmethod,width=10,bg='brown',fg='white')
button.place(x=300,y=350)
update()
root.mainloop()

update函数将在每100毫秒之后被调用,它将插入output持有的当前值,然后清除它。Text小部件的state应该是normal,以便对其内容进行任何更改,因此在每次调用中都切换了state

要将输出恢复到shell,可以调用

sys.stdout = sys.__stdout__

最新更新