Скрытие всплывающего окна с помощью witdraw () приводит к неподходящему размеру окна - PullRequest
0 голосов
/ 21 декабря 2018

Я создаю всплывающее окно в 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 пикселей и не восстанавливает его до содержания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...