Tkinter对象中的新线程生命周期

时间:2013-04-12 15:51:41

标签: python multithreading tkinter

我在使用Tkinter GUI中的线程类时遇到了问题。在启动Tkinter GUI时,我创建了新的Threading&使用守护程序对对象进行排队并启动它。在Tkinter GUI中,我有一个调用内部方法的按钮。然后,此方法调用put on Queue对象并在下面发布。 Threading对象执行我期望的所有必要操作。

def my_method_threaded(self, my_name):
    try:
        self.queue.put(("test", dict(name=my_name)))
        self.label_str_var.set('')
        self.queue.join()
    except:
        self.error_out(msg=traceback.format_exc())

但是,我在完成后遇到了一个问题。如果我调用self.queue.join(),则永远不会执行set调用,并且在线程完成任务后应用程序会冻结。如果我注释掉join()命令,则执行set调用,但该按钮仅在第一次执行后才会执行(我正在跟踪run()方法正在执行的操作使用记录器。它只是第一次被调用。)

我假设调用join()和Tkinter循环存在问题,这就是第一个问题发生的原因。任何人都可以对第二个问题有所了解吗?如果您需要更多代码,请告诉我。

编辑:我刚注意到的第二个问题是while True循环执行了我的操作两次,即使我已调用self.queue.task_done()。 run方法的代码如下:

  def run(self):
    args     = self._queue.get()
    my_name  = args[1]["name"]
    while True:
      if my_name == "Barry":
          #calls a static method elsewhere

      self.queue.task_done()

0 个答案:

没有答案