OS是Win7 64位,Python是2.7.16 64位。我有一个简单的Tkinter GUI:包含一个带有两个标签的Notebook的根。第一个选项卡包含一个框架,其中包含一个按钮。第二个选项卡包含一个框架,其中包含一个文本。绑定到Button的命令会生成一个用于设置Text内容的线程。
import Tkinter
import ttk
import threading
r = Tkinter.Tk()
n = ttk.Notebook(r)
n.pack(expand=1, fill="both")
control = ttk.Frame(n)
info = ttk.Frame(n)
tInfo = Tkinter.Text(info)
tInfo.pack(expand=1, fill="both")
n.add(control, text='Control')
n.add(info, text='Info')
infoMutex = threading.Lock()
def doGuiTest():
try:
infoMutex.acquire()
tInfo.config(state='normal')
tInfo.delete('1.0', Tkinter.END)
tInfo.insert(Tkinter.END, 'Test')
tInfo.config(state='disabled')
finally:
infoMutex.release()
def workerThread():
doGuiTest()
def execute():
worker=threading.Thread(target=workerThread)
worker.start()
bExecute=Tkinter.Button(control, text='Execute', command=execute)
bExecute.pack()
r.mainloop()
预期结果:单击“按钮”后,文本与设置的内容可靠地可见。
实际结果:仅当在单击“按钮”之前手动将包含“文本”的选项卡置于前台时,“文本”才可见。
当我直接从Button的命令设置Text的内容时,一切都会按预期进行。可悲的是,在实际的应用程序中,我正在处理由Button触发的功能,该功能将运行几分钟,因此必须使用另一个线程。
要实现一致的行为,我缺少什么?