Базовый графический интерфейс для команд оболочки с потоками Python Tk и вызовами os.system - PullRequest
0 голосов
/ 05 июля 2011

Я делаю базовый графический интерфейс, чтобы обеспечить некоторую обратную связь с пользователем после некоторых команд оболочки, на самом деле небольшой интерфейс для скрипта оболочки.

Отображение окна TK, ожидание завершения вызова os.system иОбновление окна TK несколько раз после каждого системного вызова os.s.

Как работает многопоточность с tk?

Вот и все, спасибо!

Ответы [ 2 ]

1 голос
/ 05 июля 2011

Стандартная библиотека потоков должна быть в порядке, если вы запускаете ее с Tk. Этот источник говорит, что вы должны просто позволить основному потоку запускать графический интерфейс и создавать потоки для ваших 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]) из стандартной библиотеки.Смотри документацию здесь .

0 голосов
/ 05 июля 2011

Просто базовый пример того, что я сделал, с благодарностью Константинию за то, что он указал, что 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()
...