Я хочу сделать всплывающее окно над главным окном

#python #tkinter #popupwindow

Вопрос:

Он должен вести себя так, когда всплывающее окно открыто, мы не можем использовать главное окно, пока не выйдем из всплывающего окна

Причина, по которой я не использую ящики сообщений tkinter, потому что я не могу его настроить

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

Мой код будет таким

 from tkinter import * win = Tk() win.title("Main Window")  def closing_try():  close = Tk()  close.title("Warning")  close.geometry('200x100')  close.overrideredirect(0)  close.configure(bg='white')  close.resizable(False, False)  close.attributes("-topmost", True)  close.eval('tk::PlaceWindow . center')   def save_b_func():  close.destroy()  save_func()  win.destroy()   def dont_save_b_func():  win.destroy()  close.destroy()   def cancel_b_func():  close.destroy()     ask_lbl = Label(close, text='''Do You Want to Save File Before Exiting?''', bg='white', font=('consolas', 10, 'normal'))  ask_lbl.place(x=10, y=5)  save_b = Button(close, text='Save', font=('consolas', 10, 'normal'), command=save_b_func, bg='white').place(x=9, y=50)  dont_save_b = Button(close, text="Don't Save", font=('consolas', 10, 'normal'), command=dont_save_b_func, bg='white').place(x=53, y=50)  cancel_b = Button(close, text='Cancel', font=('consolas', 10, 'normal'), command=cancel_b_func, bg='white').place(x=139, y=50)   close.mainloop()  button = Button(win, text='click me', command = closing_try).pack()  win.mainloop()  

Ответ №1:

Если вы хотите, чтобы главное окно было видно, вы можете сделать:

 win.grab_set() # show popup window win.grab_release() # return to normal  

или

 master.withdraw() # hide main window master.deiconify()# return main window  

вот несколько примеров кода, чтобы вы могли понять, как это работает:

 from tkinter import *  win = Tk()  win.geometry("450x400") new_win = Toplevel(win) new_win.geometry("700x250") new_win.title("NEW WINDOW") new_win.withdraw() Label(new_win, text="Example Label", font=('Helvetica 15 bold')).pack(pady=10)   def show_new():  new_win.grab_set()  new_win.deiconify()   def show_old():  new_win.grab_release()  new_win.withdraw()   def print_text():  print("BUTTON IS PRESSED")   button = Button(win, text="Show",command= show_new) button.pack(pady=50) button_text = Button(win, text="print",command=print_text) button_text.pack(pady=100)  button2 = Button(new_win, text="OK",command= show_old) button2.pack(pady=50)  win.mainloop()