Как реализовать сообщение «обработка запроса» в TkInter - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь реализовать всплывающее окно, которое должно отображаться поверх основного окна, когда операция выполняется в фоновом режиме. Нажатие кнопки из приведенного ниже кода приводит к зависанию GUI на 10 секунд без отображения каких-либо сообщений и, в конечном итоге, к зеленому цвету кнопки. Замораживание нормальное, но я бы хотел, чтобы всплывающее окно отображалось в течение 10 секунд. Любая помощь будет оценена! Заранее спасибо!

import tkinter as tk
import time

class GUI(tk.Tk):
    def __init__(self):
        super().__init__()

        self.button1 = tk.Button(text="Start", command=self.make_green)
        self.button1.pack()


    def popup(self):
        tl = tk.Toplevel(self)
        tl.transient()
        tk.Label(tl, text="Painting green").pack()
        tl.grab_set()
        return tl

    def make_green(self):
        wait_popup = self.popup()
        time.sleep(10)
        self.button1.config(bg="green")
        wait_popup.destroy()

a = GUI()
a.mainloop()

1 Ответ

0 голосов
/ 19 марта 2020

Вы можете использовать self.update () в своем коде, чтобы появилось всплывающее окно.

import tkinter as tk
import time

class GUI(tk.Tk):
    def __init__(self):
        super().__init__()

        self.button1 = tk.Button(text="Start", command=self.make_green)
        self.button1.pack()


    def popup(self):
        tl = tk.Toplevel(self)
        tl.transient()
        tk.Label(tl, text="Painting green").pack()
        self.update()
        tl.grab_set()
        return tl

    def make_green(self):
        wait_popup = self.popup()
        time.sleep(10)
        self.button1.config(bg="green")
        wait_popup.destroy()

a = GUI()
a.mainloop()

Или вы можете использовать многопоточность.

Начните с импорта Thread из потока.

from threading import Thread

Затем создайте новый метод

def thread_it(self):
    return Thread(target=self.make_green, daemon=True).start()

и обновите команду вашей кнопки

self.button1 = tk.Button(text="Start", command=self.thread_it)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...