实时输出运行进程到Tkinter GUI
时间: 2023-12-12 20:02:58 浏览: 89
要实现实时输出运行进程到Tkinter GUI,可以使用Tkinter的Text控件。下面是一个简单的示例代码:
```python
import subprocess
import tkinter as tk
class App:
def __init__(self, master):
self.master = master
master.title("实时输出运行进程")
# 创建Text控件,用于显示运行进程的输出
self.text = tk.Text(master)
self.text.pack()
# 在单独的线程中运行进程,并将输出实时写入Text控件
self.process = subprocess.Popen(["ping", "www.google.com"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
self.after_id = self.master.after(100, self.poll_process)
def poll_process(self):
# 检查进程是否已经结束
return_code = self.process.poll()
if return_code is not None:
# 进程已经结束,停止更新Text控件
self.text.insert(tk.END, "\n进程已经结束,返回值为:{}".format(return_code))
return
# 读取进程输出,并将其写入Text控件
output = self.process.stdout.readline().decode()
if output:
self.text.insert(tk.END, output)
# 继续在100毫秒后更新Text控件
self.after_id = self.master.after(100, self.poll_process)
def stop_process(self):
# 停止进程,并停止更新Text控件
self.process.kill()
self.master.after_cancel(self.after_id)
root = tk.Tk()
app = App(root)
root.mainloop()
```
在这个示例中,我们创建了一个名为"实时输出运行进程"的Tkinter GUI窗口,并在窗口中添加了一个Text控件,用于显示运行进程的输出。然后,我们在单独的线程中运行了一个ping命令,并将其输出实时写入Text控件。我们使用after()方法来每100毫秒更新Text控件,直到进程结束为止。当我们想要停止进程时,只需要调用stop_process()方法即可。
阅读全文