Окно Tkinter GUI перестает работать в фоновом режиме - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь создать анализатор данных Python, используя Tkinter в качестве графического интерфейса для него. Задача программы - извлечь данные, выполнить некоторые вычисления, а затем отобразить результаты в графическом интерфейсе Tkinter. Используя эти отображаемые результаты, я собираюсь выполнять другие задачи в другом приложении. Моя проблема в том, что, как только я нажимаю на другое приложение (или любое приложение, которое не является окном Tkinter GUI), графический интерфейс перестает отображать информацию в режиме реального времени, как это было раньше.

Я хочу, чтобы графический интерфейс все ещеотображать данные, даже если я использую другое приложение.

Вот пример кода, который дает представление о том, что я пытаюсь сделать:

from tkinter import *
from time import sleep

root = Tk()
var = StringVar()
var.set('hello')

l = Label(root, textvariable = var)
l.pack()

for i in range(100):
    sleep(0.5)
    var.set('goodbye' if i%2 else 'hello')
    root.update_idletasks()

Так что, если вы запустите эту программу инажмите на что-нибудь еще, например на рабочий стол, окно замерзнет при последнем отображаемом слове.

1 Ответ

2 голосов
/ 30 сентября 2019

Вместо использования цикла с time.sleep, который блокирует основной поток tkinter, вы должны использовать root.after для операций такого типа:

from tkinter import *

root = Tk()
var = StringVar()
var.set('hello')

l = Label(root, textvariable = var)
l.pack()

def func(counter):
    var.set("goodbye" if counter % 2 else "hello")
    counter+=1
    if counter<100:
        root.after(500, func, counter)

root.after(500, func, 0)

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