Tkinter线程并返回文本小部件

时间:2017-04-07 18:00:18

标签: python multithreading user-interface tkinter

我已经阅读了有关堆栈溢出的帖子,Issues intercepting subprocess output in real timeRedirect command line results to a tkinter GUI,我知道我必须在tkinter中使用线程和队列,但我仍然无法做到同样的事情因为我是节目的初学者,请帮助。

目标:按一下按钮,即可获得最高级别的'命令输出和tkinter文本小部件中的实时显示

问题:我已尝试按照代码进行操作,但仍无法获取输出,但我不知道如何使其正常工作。

from tkinter import *
import tkinter as tk
import subprocess
from threading import Thread
from queue import Queue

window = tk.Tk()
window.title('realtime')
window.geometry('800x400')








text = tk.Text(window)
text.pack()
button = tk.Button(window, text= 'Press')
button.pack()


window.mainloop()

这只是gui展望,请帮忙

1 个答案:

答案 0 :(得分:0)

top时不时地刷新自己,并且我猜测你想用线程和诸如此类的东西来捕捉你的行为。但是在这种情况下,要求top只运行一次会更容易,并让tkinter进行计时和刷新:

import tkinter as tk
from sh import top

def update_text():
    text.delete(0.0, tk.END)
    text.insert(0.0, top('-b', n=1))
    window.after(1000, update_text) # call this function again in 1 second

window = tk.Tk()
window.title('realtime')
window.geometry('800x400')

text = tk.Text(window)
text.pack()
button = tk.Button(window, text= 'Press', command=update_text)
button.pack()

window.mainloop()

您可能需要像我一样安装sh以运行top,或者如果需要,可以使用subprocess.check_output

text.insert(0.0, subprocess.check_output(['top', '-b', '-n 1']))