Как сделать так, чтобы окно Tkinter не зависало пока выполняются другие процессы?

Рейтинг: -1Ответов: 1Опубликовано: 17.05.2023

Я использую функцию которая ждет некоторое время, и когда эта функция выполняется, окно в Tkinter зависает. Вот код:

import tkinter, time, tkinter.messagebox
    def wait_for_response():
        time.sleep(10)
        return tkinter.messagebox.askquestion("Hello World!", "Hello World!")
    
    root = tkinter.Tk()
    print(wait_for_response())
    root.mainloop()

Пока функция ждет, окно зависает пока функция не закончится.

Я уже пробовал использовать queue и threading, но тогда окно вообще не показывалось.

Как сделать так, чтобы окно Tkinter не зависало пока выполняется функция, и получить из этой функции данные?

Ответы

▲ 0Принят

Вот правильный пример использования tkinter и threading это сработало для меня:

import time
import tkinter
import tkinter.messagebox
from threading import Thread

answer = None


def wait_for_response():
    global answer
    time.sleep(10)
    answer = tkinter.messagebox.askquestion("Hello World!", "Hello World!")


root = tkinter.Tk()
th = Thread(target=wait_for_response)
th.start()
button = tkinter.Button(root, text="Print answer", command=lambda: print(answer))
button.pack()
root.mainloop()