Класс 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 также состоит из кнопки.
Если вы нажмете кнопку «Закрыть», окно верхнего уровня закроется.
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() также не позволяет пользователям взаимодействовать с главным окном.