python - 如何从另一个线程类更新进度条?
问题描述
我目前正在使用 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 调用接口中的函数,但由于它不是同一个线程,我无法更新任何东西。我也尝试了队列,但无法使其工作。
解决方案
推荐阅读
- postgresql - 这个查询可以进一步优化吗?即使在较差的硬件上也可以使其快速运行吗?
- c# - Cefsharp WPF C# Count not Find File(s) after cleaning solution
- node.js - 在猫鼬中使用 $lookup 时无法获得所需的结果
- swift - Java和swift中不同的CRC32值
- flutter - Flutter - 如何在构建小部件后获取小部件的大小?
- reactjs - 字段表单不更新选项中的选定值
- google-sheets - 悬停时的 Google 电子表格链接说明
- mysql - COALESCE mysql 在什么情况下会返回第二个/第三个非空参数?
- firebase - 如何根据开始和结束日期时间过滤包含时间戳的 Firebase 对象列表?
- azure-web-app-service - 我的 Spring Boots 应用程序最终仅使用 github 操作和 azure 加载