2014-11-13 45 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

相关问题