2011-07-04 1 views
0

일부 쉘 명령 다음에 사용자 피드백을 제공하기 위해 기본 GUI를 수행합니다. 실제로 쉘 스크립트 용 약간의 인터페이스입니다.Python Tk 스레딩 및 os.system 호출을 사용하는 쉘 명령에 대한 기본 GUI

각 os.system 호출 후 os.system 호출이 완료되고 TK 창을 여러 번 업데이트하는 것을 기다리는 TK 창을 표시합니다.

어떻게 스레딩이 tk에서 작동합니까?

고맙습니다.

답변

0

Thread가 Tk와 함께 작동한다는 것을 지적하기 위해 Constantinius에 대한 크레딧으로 내가 한 일의 기본적인 예!

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() 
1

표준 스레딩 라이브러리는 Tk로 실행해도 완벽해야합니다. This 소식통은 주 스레드가 GUI를 실행하고 os.system() 호출에 대한 스레드를 생성하도록해야한다고 말합니다.

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])를 사용하여 시작할 수 있습니다

당신은 작업을 마무리에 당신의 GUI를 업데이트하는이 같은 추상화를 작성할 수 있습니다. 설명서 here을 참조하십시오.

+0

고맙습니다. 콘스탄티노스 감사합니다. –

+0

Constantinius 귀하의 의견에 감사드립니다. 여기에 전체 예제가 있습니다. http://pastebin.com/AD0UAuMS 답변에 포함 시키면 좋을 것입니다. –