在Python中生成另一个线程

时间:2014-11-13 21:48:39

标签: python multithreading tkinter

新手到Python,基本上我有一个带有几个按钮的窗口UI,当我按下一个按钮时,我想在后台开始处理/解析文件,而我仍然可以使用UI,但是我的UI变得没有响应“旋转轮”。

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

2 个答案:

答案 0 :(得分:1)

self.process_files()替换为您创建主题的self.process_files

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

你应该将一个函数传递给作为目标的线程,而不是结果。

此外,如果您希望函数在线程运行时返回,请不要使用join()

答案 1 :(得分:0)

尝试使用threading.Thread启动一个帖子。此代码段可以帮助您找到更多答案

from threading import Thread

...

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

在您的示例中,您忘记了调用方法的括号。