2014-11-13 44 views
-2

Python的新手,基本上我有一個窗口用戶界面只有幾個按鈕,當我按下一個按鈕時,我想開始處理/解析背景中的文件,而我仍然可以玩UI,但是我的用戶界面變得沒有響應的「旋轉輪」。生成Python中的另一個線程

class MyUI(Frame): 

def __init__(self, parent): 

    Frame.__init__(self, parent, background="white") 
    self.parent = parent 
    self.initUI() 


def initUI(self): 
self.validate_button = Button(self, 
       text='Validate', 
       command=self.validate_files).pack() 

def validate_files(self): 
    try: 
     t = Thread(target=self.process_files(), args=('labala',1)) 
     t.start 
     t.join 
    except Exception, errtxt: 
     print errtxt 

def process_colls(self): 
    items = self.lb.curselection() 
    for i in items: 
     self.do_parse(self.varDirName, self.lb.get(int(i))) 

def main(): 
root = Tk() 
root.geometry("600x600+300+300") 
app = MyUI(root) 
root.mainloop() 

if __name__=="__main__": 
    main() 
+0

對我來說,你的代碼只是一個空白的屏幕。你錯過了什麼嗎? – rookie

+0

請修復您的縮進。沒有正確的縮進,Python是無法解釋的。 – khelwood

+0

不只是縮進...在'validate_files()'你只會發現你的語法錯誤:) –

回答

1

更換self.process_files()self.process_files在其中創建線程:

t = Thread(target=self.process_files, args=('labala',1)) 

你應該通過一個機能的研究,以線程作爲目標,而不是結果。

此外,如果您希望該函數在線程運行時返回,則不要使用join()

+0

self.process_files不會觸發該函數,self.process_files()會執行,但仍然無法響應。這是一個問題,items = self.lb.curselection(),因爲它從主UI中讀取列表? – user1529412

+0

@ user1529412是'self.process_file()'一個仿函數? 'target'應該是回調而不是價值。如果'self.process_file()'返回一個函數,我將刪除可能會回答,但你必須修復你的問題,因爲現在不可能瞭解發生了什麼。 –

+0

嗯,我看到了,我會玩它,任何想法爲什麼self.process_files沒有觸發? – user1529412

0

嘗試使用threading.Thread開始線程。這段代碼應該可以幫助你找到更多的答案

from threading import Thread 

... 

_thread = Thread(target=lambda: my_func()) 
_thread.start() 

在你的例子中,你忘記了調用方法的括號。

+0

功能正常,我確實得到了正確的結果。你的聲明和我的一樣,我都試過。 – user1529412

相關問題