2014-01-30 116 views
1

我想用開始按鈕創建一個簡單的Python GUI(在Tkinter中),在一個線程中運行一個while循環,並且停止按鈕來停止while循環。從tkinter gui停止python線程

我遇到了停止按鈕問題,一旦單擊開始按鈕,停止按鈕不會停止任何事情並凍結GUI。

見下面的代碼:

import threading 
import Tkinter 

class MyJob(threading.Thread): 

    def __init__(self): 
     super(MyJob, self).__init__() 
     self._stop = threading.Event() 

    def stop(self): 
     self._stop.set()  

    def run(self): 
     while not self._stop.isSet(): 
      print "-" 

if __name__ == "__main__": 

    top = Tkinter.Tk() 

    myJob = MyJob() 

    def startCallBack():   
     myJob.run() 

    start_button = Tkinter.Button(top,text="start", command=startCallBack) 
    start_button.pack() 

    def stopCallBack(): 
     myJob.stop() 

    stop_button = Tkinter.Button(top,text="stop", command=stopCallBack) 
    stop_button.pack() 

    top.mainloop() 

不知道如何解決這個問題?我相信這是微不足道的,必須做好幾千次,但我自己找不到解決方案。

感謝 大衛

回答

2

的代碼直接調用run方法。它會在主線程中調用該方法。要在單獨的線程中運行它,您應該使用threading.Thread.start method

def startCallBack():   
    myJob.start()