#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