我正在尝试从主函数操作线程中的一些数据。我面临的问题是修改一些变量,这些变量是在线程上运行的函数的一部分。
所以我试图在一个线程中运行一个基于 Tkinter 的 GUI 循环,以确保它始终在运行。并且想在main函数执行中修改一些状态对应的标签。我面临一个问题,它无法在主循环中找到标签变量,因为它是在线程上运行的函数的一部分。
下面是该方法的简化伪代码。请建议这是否是上述任务的正确方法,或者是否有更好和有效的方法。
import threading
def thread_func():
i = 0
while True:
print('i from thread: ', i)
if __name__ == '__main__':
t = threading.Thread(target=thread_func)
t.start()
while True:
i += 1
实际缩小的简化代码
import threading
import tkinter as tk
def gui():
window = tk.Tk()
label = tk.Label(text='On')
label.pack()
window.mainloop()
if __name__ == '__main__':
t = threading.Thread(target=gui)
t.start()
while True:
label['text'] = 'Active'
错误:
Traceback (most recent call last):
File "test.py", line 17, in <module>
label['text'] = 'Active'
NameError: name 'label' is not defined
有没有更好的方法来保持 tkinter gui 始终打开并在循环中执行某些任务?