使用 Python Tk 线程和 os.system 调用的 shell 命令的基本 GUI

发布于 2024-11-18 16:35:21 字数 173 浏览 1 评论 0原文

我正在做一个基本的 GUI,以便在执行一些 shell 命令后提供一些用户反馈,这实际上是 shell 脚本的一个小界面。

显示 TK 窗口,等待 os.system 调用完成,并在每次 os.system 调用后多次更新 TK 窗口。

线程如何与 tk 一起工作?

就是这样,谢谢!

I'm doing a basic GUI to provide some user feedback after some shell commands, a little interface for a shell script really.

Showing a TK window, waiting for a os.system call to complete and updating the TK window multiple times, after each os.system call.

How does threading work with tk?

That's it, thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

很酷不放纵 2024-11-25 16:35:21

如果您使用 Tk 运行标准线程库,它应该完全没问题。 This 来源说,您应该让主线程运行 gui 并为其创建线程您的 os.system() 调用。

您可以编写这样的抽象,它在完成任务后更新您的 GUI:

def worker_thread(gui, task):
    if os.system(str(task)) != 0:
        raise Exception("something went wrong")
    gui.update("some info")

可以使用标准库中的 thread.start_new_thread(function, args[, kwargs]) 启动线程。请参阅此处的文档。

The standard threading library should be perfectly okay if you run it with Tk. This source says, that you should just let the main thread run the gui and create threads for your os.system() calls.

You could write an abstraction like this which updates your GUI upon finishing the task:

def worker_thread(gui, task):
    if os.system(str(task)) != 0:
        raise Exception("something went wrong")
    gui.update("some info")

The thread can be started using thread.start_new_thread(function, args[, kwargs]) from the standard library. See the documentation here.

温暖的光 2024-11-25 16:35:21

这只是我所做的一个基本示例,感谢 Constantinius 指出 Thread 可与 Tk 配合使用!

import sys, thread
from Tkinter import *
from os import system as run
from time import sleep

r = Tk()
r.title('Remote Support')
t = StringVar()
t.set('Completing Remote Support Initalisation         ')
l = Label(r,  textvariable=t).pack() 
def quit():
    #do cleanup if any
    r.destroy()
but = Button(r, text='Stop Remote Support', command=quit)
but.pack(side=LEFT)

def d():
    sleep(2)
    t.set('Completing Remote Support Initalisation, downloading, please wait         ')
    run('sleep 5') #test shell command
    t.set('Preparing to run download, please wait         ')
    run('sleep 5')
    t.set("OK thanks! Remote Support will now close         ")
    sleep(2)
    quit()

sleep(2)
thread.start_new_thread(d,())
r.mainloop()

Just a basic example of what I did, with credit to Constantinius for pointing out that Thread works with Tk!

import sys, thread
from Tkinter import *
from os import system as run
from time import sleep

r = Tk()
r.title('Remote Support')
t = StringVar()
t.set('Completing Remote Support Initalisation         ')
l = Label(r,  textvariable=t).pack() 
def quit():
    #do cleanup if any
    r.destroy()
but = Button(r, text='Stop Remote Support', command=quit)
but.pack(side=LEFT)

def d():
    sleep(2)
    t.set('Completing Remote Support Initalisation, downloading, please wait         ')
    run('sleep 5') #test shell command
    t.set('Preparing to run download, please wait         ')
    run('sleep 5')
    t.set("OK thanks! Remote Support will now close         ")
    sleep(2)
    quit()

sleep(2)
thread.start_new_thread(d,())
r.mainloop()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文