Show command line results in Tkinter text widget

后端 未结 1 974
名媛妹妹
名媛妹妹 2021-01-15 07:53

I want the output of a Python script in a Tkinter text widget instead of in the command line. I have this script from https://stackoverflow.com/a/665598/3524043:

<         


        
相关标签:
1条回答
  • 2021-01-15 08:45

    Based on this answer you can do it fairly simply with the below code:

    import subprocess           # required for redirecting stdout to GUI
    
    try:
        import Tkinter as tk    # required for the GUI python 2
    except:
        import tkinter as tk    # required for the GUI python 3
    
    
    def redirect(module, method):
        '''Redirects stdout from the method or function in module as a string.'''
        proc = subprocess.Popen(["python", "-c",
            "import " + module + ";" + module + "." + method + "()"], stdout=subprocess.PIPE)
        out = proc.communicate()[0]
        return out.decode('unicode_escape')
    
    def put_in_txt():
        '''Puts the redirected string in a text.'''
        txt.insert('1.0', redirect(module.get(), method.get()))
    
    
    if __name__ == '__main__':
    
        root = tk.Tk()
    
        txt = tk.Text(root)
        module = tk.Entry(root)
        method = tk.Entry(root)
        btn = tk.Button(root, text="Redirect", command=put_in_txt)
    
        #layout
        txt.pack(fill='both', expand=True)
        module.pack(fill='both', expand=True, side='left')
        btn.pack(fill='both', expand=True, side='left')
        method.pack(fill='both', expand=True, side='left')
    
        root.mainloop()
    

    given that the module is in the same directory. The code returns console output of a method or a function(rightmost entry) in a module(leftmost entry) as a string. It then puts that string in a Text field.


    See this answer for Returning all methods/functions from a script without explicitly passing method names.

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