stdout to tkinter GUI

前端 未结 3 1208
甜味超标
甜味超标 2020-11-30 12:57

How can I redirect stdout data to a tkinter Text widget?

相关标签:
3条回答
  • 2020-11-30 13:21

    You need to make a file-like class whose write method writes to the Tkinter widget instead, and then do sys.stdout = <your new class>. 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__
    
    0 讨论(0)
  • 2020-11-30 13:21

    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 ls_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()
    
    0 讨论(0)
  • 2020-11-30 13:43
    log_box_1 = tk.Text(root, borderwidth=3, relief="sunken")
    
    with subprocess.Popen("ls -la", shell=True, stdout=subprocess.PIPE, bufsize=1, universal_newlines=True) as p:
                for line in p.stdout:
                    log_box_1.insert(tk.END, line)
    

    From here

    0 讨论(0)
提交回复
热议问题