现象
使用python+tkinter进行GUI开发。
使用event_generate发送自定义消息,无报错,但Tk窗体无法接收到消息。只发生在mainloop之前及之后很短的时间里。
原因(猜测)
Tk对象的一些初始化操作需要在event loop中完成,在此之前发送的消息会丢失。
解决方法
先调用update,再调用mainloop,update之后的消息可以确保正常接收。
网上查到有使用after_idle(f)或after(1,f)的,但实测无法确保f发出的消息可以100%接收。
import tkinter as tk
def OnMess(event):
print('123')
wnd=tk.Tk()
wnd.bind('<<custom message>>',OnMess)
wnd.update()
wnd.event_generate('<<custom message>>',when="tail")#在此处发送消息或通知其它线程
wnd.mainloop()