python执行结果在gui界面显示_python – 使用实时输出运行进程到Tkinter GUI

本文介绍如何在Python的Tkinter GUI中实时显示命令行工具的输出,例如持续运行的`ping`命令。通过使用`subprocess`和`threading`模块,可以在不阻塞GUI的情况下执行命令并更新文本小部件。
摘要由CSDN通过智能技术生成

我试图在Tkinter

python中创建一个GUI.我想将工具的输出显示给我的Tkinter界面.该工具在命令行中运行良好,但它是一个连续的扫描仪.有点像连续ping(我的意思是

Linux中没有选项的ping命令).

现在问题是因为ping的输出永远不会完成,因此我无法在Tkinter中打印输出.它还使我的应用程序冻结.几秒钟后我也无法停止命令显示输出.

Run process with realtime output in PHP

我发现上面这个链接对php很有帮助,但我怎样才能在python中转换这段代码:

这是我想在tkinter框架上显示的一些示例代码

#!/usr....

import subprocess

x = subprocess.call(["ping", "127.0.0.1"])

print x

这在命令行上运行良好,但我没有在tkinter接口上获得输出.

最佳答案 首先,我必须承认我对模块

subprocess和

threading不太熟悉,但我试图创建一个简单的控制台,它接受你编写一个命令,其输出将显示在

Text小部件中.

基本思想是在单击“执行”按钮时有一个新的运行并行线程来处理命令.我们继续遍历stdout行并将它们插入到Text小部件中.

它似乎适用于任何命令,但我很确定存在一些问题和错误.如果你们对我上面提到的模块更熟悉,看到我的代码有任何严重的问题,或者有任何改进建议,我肯定会听你的,以便改进这个例子.

现在,这是代码:

import tkinter as tk

from tkinter.scrolledtext import ScrolledText

import threading

from s

要实现实时输出运行进程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()方法即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值