ОС - Win7 64bit, Python - 2.7.16 64bit.У меня есть простой графический интерфейс Tkinter: Root, содержащий ноутбук с двумя вкладками.Первая вкладка содержит фрейм, который содержит кнопку.Вторая вкладка содержит фрейм, который содержит текст.Команда, привязанная к кнопке, порождает поток с установленным содержимым текста.
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, будет работать в течение нескольких минут, поэтому использование другого потока является обязательным.
Чего мне не хватает для достижения согласованного поведения?