How can I redirect stdout data to a tkinter Text widget?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
You need to make a file-like class whose write method writes to the Tkinter widget instead, and then do sys.stdout = . See this question.
Example (copied from the link):
class IORedirector(object): '''A general class for redirecting I/O to this Text widget.''' def __init__(self,text_area): self.text_area = text_area class StdoutRedirector(IORedirector): '''A class for redirecting stdout to this Text widget.''' def write(self,str): self.text_area.write(str,False) and then, in your Tkinter widget:
# To start redirecting stdout: import sys sys.stdout = StdoutRedirector( self ) # (where self refers to the widget) # To stop redirecting stdout: sys.stdout = sys.__stdout__ 回答2:
This is an old question, but I found a solution which I would like to share with the community. My example pipes a listing of the working directory to a Tk window. I am using Python 3.6 on Windows 8. I ran the code through both Jupyter Notebook and Eclipse using Pydev.
import os from tkinter import * from subprocess import Popen, PIPE root = Tk() text = Text(root) text.pack() def ls_proc(): return Popen(['ls'], stdout=PIPE) with dir_proc() as p: if p.stdout: for line in p.stdout: text.insert(END, line) if p.stderr: for line in p.stderr: text.insert(END, line) root.mainloop() 文章来源: stdout to tkinter GUI