我目前正在使用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调用Interface中的函数,但是由于它不是同一线程,所以我什么也无法更新。我还尝试了Queues,但无法使其正常工作。