Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用来自线程的tkinter虚拟事件_Python 3.x_Multithreading_Tkinter - Fatal编程技术网

Python 3.x 使用来自线程的tkinter虚拟事件

Python 3.x 使用来自线程的tkinter虚拟事件,python-3.x,multithreading,tkinter,Python 3.x,Multithreading,Tkinter,我想使用虚拟事件从线程更新Tkinter标签 from tkinter import * from tkinter import ttk import threading import time def run_test_event(): while True: root.event_generate("<<test_eventA>>") root.event_generate("<<t

我想使用虚拟事件从线程更新Tkinter标签

from tkinter import *
from tkinter import ttk
import threading
import time


def run_test_event():
    while True:
        root.event_generate("<<test_eventA>>")
        root.event_generate("<<test_eventB>>")
        time.sleep(1)


if __name__ == '__main__':
    root = Tk()
    l = ttk.Label(root, text="Starting...")
    l.grid()
    l.bind('<Enter>', lambda e: l.configure(text='Moved mouse inside'))
    l.bind('<<test_eventA>>', lambda e: l.configure(text='test_eventA'))
    l.bind('<<test_eventB>>', print('test_eventB'))

    threading.Thread(target=run_test_event).start()
    root.mainloop()
当GUI关闭时,控制台打印此文件:

Exception in thread Thread-1:
Python\Python38\lib\tkinter\__init__.py", line 1849, in event_generate
    self.tk.call(args)
RuntimeError: main thread is not in main loop
标签从不更新,也不会显示
test\u eventA

将线程设置为守护进程会有所帮助。避免生成上述异常,但标签仍未更新。
知道吗?

您正在根窗口上生成虚拟事件,而不是标签。您应该调用标签上的
.event\u generate()

从tkinter导入*
从tkinter导入ttk
导入线程
导入时间
def运行测试事件(标签):
尽管如此:
label.event_generate(“”)
label.event_generate(“”)
时间。睡眠(1)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
root=Tk()
l=ttk.Label(根,text=“开始…”)
l、 网格()
l、 绑定(“”,lambda e:l.configure(text='Moved mouse inside'))
l、 绑定(“”,lambda e:l.configure(text='test\u eventA'))
l、 bind(“”,lambda e:print('test_eventB'))#应在此处使用lambda
#将标签传递给目标函数
threading.Thread(target=run\u test\u事件,args=(l,),daemon=True).start()
root.mainloop()

您正在根窗口而不是标签上生成虚拟事件。您应该调用标签上的
.event\u generate()

从tkinter导入*
从tkinter导入ttk
导入线程
导入时间
def运行测试事件(标签):
尽管如此:
label.event_generate(“”)
label.event_generate(“”)
时间。睡眠(1)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
root=Tk()
l=ttk.Label(根,text=“开始…”)
l、 网格()
l、 绑定(“”,lambda e:l.configure(text='Moved mouse inside'))
l、 绑定(“”,lambda e:l.configure(text='test\u eventA'))
l、 bind(“”,lambda e:print('test_eventB'))#应在此处使用lambda
#将标签传递给目标函数
threading.Thread(target=run\u test\u事件,args=(l,),daemon=True).start()
root.mainloop()
Exception in thread Thread-1:
Python\Python38\lib\tkinter\__init__.py", line 1849, in event_generate
    self.tk.call(args)
RuntimeError: main thread is not in main loop