#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()