首页 > 解决方案 > 如何从另一个线程类更新进度条?

问题描述

我目前正在使用 Python 开发一个简单的神经网络,但在使用 Tkinter 和多线程时遇到了问题。

我有 2 个类,一个用于接口,另一个用于计算工作。

我的界面类中有一个进度条和一个按钮,该按钮在另一个线程中调用计算工作类中的函数。我想要这个被调用的函数来更新我的progressBar 的值。(以每 1000 个测试项目为例)

所以这是我的代码(简化):

界面:

class UInterface:

    def __init__(self):
       self.window = Tk()
       self.nh = NetworkHelper()
       self.progress_value = 0
       self.test_result = Label(window, text="").grid(row=0, column =1)
       Button(self.window, text="Test", command=partial(self.test)).grid(row=1, column =1)
       self.progress = ttk.Progressbar(orient="horizontal", maximum=117, mode="determinate")
       self.progress.grid(row=3, column =1)
       self.window.mainloop()

    def test(self):
       pool = ThreadPool(processes=1)

       async_result = pool.apply_async(self.nh.test)

       while results == None
          self.progress["value"] = self.progress_value 
          self.window.update()

       results = async_result.get()

       self.test_result.config(text=str(results) + "% of good answers")

这是我在 NetworkHelper 类中进行艰苦工作的测试函数:

def test(self):
    total_answer = 0
    good_answer = 0
    # preparing data and testing
    for i in range(self.data_test_length):
        ## Some testing 
        total_answer += 1
        ## TODO Update progress_value in class Interface

    return good_answer/total_answer

我尝试了一些东西,比如从 NH.test 调用接口中的函数,但由于它不是同一个线程,我无法更新任何东西。我也尝试了队列,但无法使其工作。

标签: pythonmultithreadingtkinterprogress-bar

解决方案


推荐阅读