2

Tkinter GUI 内でのスレッド クラスの操作に問題があります。Tkinter GUI の起動時に、デーモンを使用して新しい Threading & Queue オブジェクトを作成し、起動します。Tkinter GUI には、内部メソッドを呼び出すボタンがあります。次に、このメソッドは Queue オブジェクトの put を呼び出し、以下に掲載されます。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 ループの呼び出しに問題があると想定しているため、最初の問題が発生します。誰もが2番目の問題に光を当てることができますか? さらにコードが必要な場合は、お知らせください。

編集: 私が気付いた 2 番目の問題は、while True呼び出したにもかかわらず、ループがアクションを 2 回実行すること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()
4

0 に答える 0