Tkinter: текст в рамке на вкладке Nootbook не закрашен - PullRequest
0 голосов
/ 20 мая 2019

ОС - 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, будет работать в течение нескольких минут, поэтому использование другого потока является обязательным.

Чего мне не хватает для достижения согласованного поведения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...