Show command line results in Tkinter text widget

孤人 提交于 2019-12-01 10:55:51

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!