Класс Tkinter Toplevel в Python — создание дополнительного окна

В этом уроке вы узнаете, как создать несколько окон в приложении Tkinter с помощью класса Tkinter Toplevel в Python.

Что такое Tkinter Toplevel window

В приложении Tkinter экземпляр класса Tk представляет главное окно. При закрытии главного окна приложение завершает работу и цикл событий завершается.

Иногда вам нужно создать дополнительные окна. Например, вы можете захотеть создать пользовательский диалог или форму мастера. Для этого можно использовать окна верхнего уровня, которые являются экземплярами класса Toplevel.

В отличие от главного окна, вы можете создать столько окон верхнего уровня, сколько захотите. Чтобы отобразить окно Toplevel из главного окна, выполните следующие действия:

  • Сначала создайте экземпляр класса Toplevel и установите его родителем корневое окно:
window = tk.Toplevel(root)

В тот момент, когда вы создадите окно Toplevel, оно отобразится на экране.

  • Во-вторых, добавьте виджеты в окно верхнего уровня так же, как вы это делаете с фреймами и главным окном.
  • В-третьих, вызовите метод grab_set() экземпляра окна Toplevel, чтобы разрешить ему получать события и запретить пользователям взаимодействовать с главным окном:
window.grab_set()

Простой пример окна Toplevel

Следующая программа отображает окно с одной кнопкой:

Простой пример с окном Toplevel

При нажатии на кнопку откроется окно Toplevel. Окно Toplevel также состоит из кнопки.

Если вы нажмете кнопку «Закрыть», окно верхнего уровня закроется.

import tkinter as tk
from tkinter import ttk


class Window(tk.Toplevel):
    def __init__(self, parent):
        super().__init__(parent)

        self.geometry('300x100')
        self.title('Toplevel Window')

        ttk.Button(self,
                text='Close',
                command=self.destroy).pack(expand=True)


class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.geometry('300x200')
        self.title('Main Window')

        # place a button on the root window
        ttk.Button(self,
                text='Open a window',
                command=self.open_window).pack(expand=True)

    def open_window(self):
        window = Window(self)
        window.grab_set()


if __name__ == "__main__":
    app = App()
    app.mainloop()

Как это работает.

  • Сначала определите класс Window, который наследуется от окна Toplevel. Окно будет закрыто после нажатия кнопки Close.
  • Во-вторых, назначьте команду кнопки «Открыть окно» методу open_window() в классе App.
  • В-третьих, в методе open_window() создайте новый экземпляр Window и вызовите метод grab_set(), чтобы он мог получать события. Метод grab_set() также не позволяет пользователям взаимодействовать с главным окном.
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *