如何在Python中接收线程回调

时间:2014-11-17 14:17:15

标签: multithreading tkinter python-multithreading

之前可能有人问过,但我找不到我要找的东西。我有从主UI线程(TKinter)启动的后台线程,我希望它向UI发送状态更新。我感谢一些代码或伪或链接,显示如何在python中完成。

伪代码:     //test.py

def __init__(self, parent):
#Button
self.submit_button = Button(self,
                text="launch_tasks",
                command=self.launch_tasks).pack()
#label
self.label = Label(master, text="Hello, world!")
self.label.pack()

def launch_tasks(self)
   t = Thread(target=self.process_tasks)
   t.start()

def process_tasks(self):
    cnt = getJobs(self);
    self.label = cnt   # I like to update label here
    for(job in jobs):
      process(job)
      self.label = 'processing' + job # I like to update label 
    ...

1 个答案:

答案 0 :(得分:1)

补充Tkinter,其中包含添加了事件路由的消息传递层

虽然Tkinter / .mainloop() 是一个独立的模型 - 可视控制器系统,但您可以在线程安全的非阻塞模式下扩展其功能,并增加补充(进程间/任意到任意)您自己的消息传递层,并使用基于Tkinter的事件路由机制为其配置localhost / self actor以与.mainloop()集成

################################################ SETUP EVENT-ROUTING Injector

self.aSigFromZMQ = "<<aVirtualEventSignalledFromZMQ_LAYER>>"

self.bind( self.aSigFromZMQ, anEventHANDLER )
#   |
#   .bind <<virtual_EventNAME>> altogether with <anEventHANDLER>-call


################################################ Context-fully TRIGGER Injector

self.event_generate( self.aSigFromZMQ, aSigContextDICT )
#   |
#   .event_generate( <eventNameId>, **args )  #   triggers <eventNameId>
#                                             # + passes **args, that allows
#                                             #          to set <keyword>=<value> pairs for Event-fields,
#                                             #          that are passed to anEventHANDLER via <Event>-object ...

为了说明和点击链接到来自最先进的父亲之一的真实书籍,非常快速,智能和用于多对多消息传递的可扩展的进程间消息传递系统(包括基于此的线程间信令)友好引用。 &GT;&GT;&GT; https://stackoverflow.com/a/26559710/3666197


enter image description here

线程到线程信令(回调无限制)