如何从子流程在tkinter中打印消息



大家好!我遇到了一个问题。假设我有一个使用tkinter-giu的子流程模块启动的脚本,如下所示(params包括脚本的名称):

p = Popen(['python.exe'] + params)

在执行过程中,我的脚本有一些消息要打印在我的gui中。当我使用控制台时,我只是用这样的打印功能:

print(f'Connected to {ppm_file}')

我现在需要做的是将此消息打印在tkinter-gui中的文本小部件中。

我想这意味着使用stdout,但我是这个概念的新手,发现它有点难以理解。

谢谢你的帮助!

您可以捕获外部脚本的控制台输出,并将捕获的输出插入到Text小部件中。

下面是一个例子:

import tkinter as tk
import subprocess
import threading
root = tk.Tk()
logbox = tk.Text(root, width=80, height=20)
logbox.pack()
def capture_output():
# "python -u" make stdout stream to be unbuffered
p = subprocess.Popen(["python", "-u", "other.py"], stdout=subprocess.PIPE)
while p.poll() is None: # process is still running
logbox.insert("end", p.stdout.readline())
logbox.see("end")
logbox.insert("end", "--- done ---n")
# use thread so that it won't block the application
tk.Button(root, text="Run", command=lambda: threading.Thread(target=capture_output, daemon=True).start()).pack()
root.mainloop()

在文本小部件中,您可以使用以下方法插入:

txtbox.delete('1.0', END) # to remove any preceding text(ignore if empty)
txtbox.insert(END, 'Connected to {ppm_file}')  # insert the text you want
txtbox.insert(END, 'n') # additional insertion for example a newline character

最新更新