Python 用Tkinter实现多线程

Python 用Tkinter实现多线程,python,tkinter,python-multithreading,Python,Tkinter,Python Multithreading,我对基于Tkinter的GUI有一些问题。基本上,GUI创建许多线程并运行它们。当每个线程完成后,我希望它更新一个标签,以通知用户这个特定的线程完成 我知道Tkinter小部件不是线程安全的,允许子线程更新视图是一种不好的做法。因此,我试图在主线程上触发一个事件,以便它可以更新视图本身 我正在运行下面的简化代码示例: from Tkinter import * from threading import * def myClass(root): def __init__(self, r

我对基于Tkinter的GUI有一些问题。基本上,GUI创建许多线程并运行它们。当每个线程完成后,我希望它更新一个标签,以通知用户这个特定的线程完成

我知道Tkinter小部件不是线程安全的,允许子线程更新视图是一种不好的做法。因此,我试图在主线程上触发一个事件,以便它可以更新视图本身

我正在运行下面的简化代码示例:

from Tkinter import *
from threading import *

def myClass(root):

   def __init__(self, root):
      self.root = root
      # Other stuff populating the GUI

   # Other methods creating new 'threading.Thread'
   # objects which will call 'trigger_Event'

   # Called by child threads 
   def trigger_Event(self):
      self.root.event_generate("<<myEvent>>", when="tail")

   # Called by main thread
   def processEvent(self):
      # Update GUI label here

if __name__ == '__main__':
   root = Tk()
   root.geometry("500x655+300+300")
   app = myClass(root)
   root.bind("<<myEvent>>", app.processEvent())
   root.mainloop() 
从Tkinter导入*
从线程导入*
def myClass(根目录):
定义初始化(自,根):
self.root=根
#填充GUI的其他内容
#创建新“threading.Thread”的其他方法
#将调用“触发器事件”的对象
#由子线程调用
def触发_事件(自):
self.root.event_generate(“,when=“tail”)
#由主线程调用
def processEvent(自):
#在此处更新GUI标签
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
root=Tk()
根部几何形状(“500x655+300+300”)
app=myClass(根目录)
root.bind(“,app.processEvent())
root.mainloop()

不幸的是,这不起作用:
processEvent
从未被调用。我错过了什么?

谢谢凯文,这就成功了。同时,我发现了一个页面,上面说这种错误是“一个普通的初学者”的错误。。。
root.bind("<<myEvent>>", app.processEvent())
root.bind("<<myEvent>>", app.processEvent)