Есть ли функция в tkinter для циклического просмотра Windows

#python #tkinter

#python #tkinter

Вопрос:

Я только начал писать программы с графическим интерфейсом, и я хочу иметь окно, которое появляется определенное количество раз, в настоящее время у меня есть кнопка и поле ввода, а команда buttons — on_press, показанная ниже

 import tkinter as tk

class Application(tk.Frame):

    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.pack()

        self.entry = tk.Entry(self)
        self.entry.pack()

        self.button_bonus = tk.Button(self, text="go", command=self.on_press)
        self.button_bonus.pack()


    def on_press(self):
        for i in range(int(self.entry.get())):
            self.popup()


    def popup(self):
        win = tk.Toplevel()
        win.wm_title("Window")

        l = tk.Label(win, text="Input")
        l.grid(row=0, column=0)

        b = tk.Button(win, text="Okay", command=win.destroy)
        b.grid(row=1, column=0)

root = tk.Tk()

app = Application(root)

root.mainloop()
  

Ожидаемое поведение заключается в том, что я нажимаю кнопку, цикл будет вызывать popup () один раз, затем подождите, пока всплывающее окно не будет закрыто, прежде чем разрешить появление другого окна. но то, что у меня есть в настоящее время, появляется в обоих окнах одновременно

что у меня есть сейчас

Ответ №1:

Вы можете добавить win.grab_set() и win.wait_window() , чтобы сделать всплывающее окно модальным:

 def popup(self):
    win = tk.Toplevel()
    win.wm_title("Window")

    l = tk.Label(win, text="Input")
    l.grid(row=0, column=0)

    b = tk.Button(win, text="Okay", command=win.destroy)
    b.grid(row=1, column=0)

    win.grab_set() # capture keyboard events
    win.wait_window() # wait until window is closed