Я создаю всплывающее окно в tkinter и хочу его скрыть до тех пор, пока оно не будет создано, помечено и отцентрировано на экране, чтобы окно на короткое время не мигало пустым в неправильной позиции.
Но если яВнедрите их, получившееся окно действует, если его содержимое никогда не распределялось по pack()
, а размер окна был установлен по умолчанию 200 x 200 px.
Я также пробовал after()
и update_idletasks()
, так как яугадал вопрос в последовательности рисунка, но безуспешно.
Чтобы скрыть это, я использую функции withdraw()
и deiconify()
, как указано во многих других сообщениях, включая этот: Tkinter - окно предварительной загрузки?
Мой полученный кодвыглядит следующим образом:
Создание кадра
class NotificationPopup(Tk.Toplevel):
def __init__(self, root, text, title):
Tk.Toplevel.__init__(self, root)
# Hide window until created
self.withdraw()
# Slaved to parent. Shown over parent window
self.transient(root)
# Stops interaction with parent until child is solved
self.grab_set()
self.label = Tk.Label(self, text=text, justify=Tk.LEFT, padx=10)
self.label.pack()
self.button = Tk.Button(self, text='Ok', command=self.destroy)
self.button.pack()
self.button.focus_set()
self.resizable(False, False)
self.relief = Tk.GROOVE
# Bind return to the button to close the window
self.button.bind('<Return>', (lambda event: self.destroy()))
Toolbox.center_toplevel(self)
# Show window
self.deiconify()
Метод центра
# Center a window based on screen dimensions and window size
def center_toplevel(toplevel):
toplevel.update_idletasks()
# Toplevel window dimensions
w = toplevel.winfo_width()
h = toplevel.winfo_height()
# get screen width and height
ws = toplevel.winfo_screenwidth() # width of screen
hs = toplevel.winfo_screenheight() # height of screen
# calculate x and y coordinates for the Tk root window
x = (ws / 2) - (w / 2)
y = (hs / 2) - (h / 2)
# Set dimension of window and placement on screen
toplevel.geometry('%dx%d+%d+%d' % (w, h, x, y))
Запуск кода без withdraw()
в моем приложении Показывает ширину и высоту при 450 и400 пикселей, включая withdraw()
, сжимает его до 200 x 200 пикселей и не восстанавливает его до содержания.