Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Окно с кнопкой выхода (Button) на tkinter
Сегодня я продолжу материал предыдущей статьи, в которой я начал говорить о библиотеке tkinter. Библиотека интересная, для не слишком больших оконных приложений вполне себе подойдёт.
Сегодня мы поговорим о кнопках в окне. Как они описываются и обрабатывается нажатие кнопок.
Ниже представлена простая программа, создающая окном кнопкой выхода.
#!/usr/bin/python3
import tkinter as tk
wn = tk.Tk()
wn.geometry("450x450+700+700")
wn.title("Окно с кнопкой")
bt = tk.Button(wn, text="Exit", command=wn.destroy)
bt.pack(pady=20)
wn.mainloop()
Результа выполнения см. на рисунке 1.
В программе выше нет ничего сложного. Как мы видим, при создании кнопки: tk.Button() указывается объект-окно, где кнопка будет расположена, надпись на кнопке (text='Exit') и обработчик её нажатия. В данном случае это уже определённый метож destroy() окна, он его удаляет при этом происходит выход из программф. Интересен метод pack(), он указаывает на расположение кнопки, а также на особенности самой кнопки. Ниже на остановлюсь на этом методе более подробно.
Программа практически с той же функциональностью, но с несколько иным подходом представлена ниже. Созданное программой окно представлено на рисунке 3.
Сделаем некоторые пояснения к программе на рисунке 2.
- На это раз мы поступили в согласии с принципами ООП. Создали класс win,как произодный от класса tk.TK. Соответственно все настройки окна производятся в конструкторе __init__(). Напомню, что как и раньше, строка super().__init__() обращается к конструктору класса родителя и это обязательно. Замечу также, что метод, заканчивающий работу приложения (закрывающий окно) теперь выделен нами явно в методе класса win. Так более понятно.
- Но вот на методе pack() (Button.pack()) следует остановиться особо. Опишем именованные параметры этого метода: 1. expand, если параметр равен True, то кнопка по середине окна. 2. fill определяет заполнение кнопкой пространства окна (контейнера): None - элемент не растягивается, tk.X - растягивается по x, tk.Y - растягивается по Y, tk.BOTH - растягивается и по x и по y. 3. side - выравнивание по одной из сторон окна: tk.TOP - выравнивает по верхней стороне окна (по умолчанию), tk.BOTTOM - выравнивает по нижней стороне, tk.LEFT - выравнивает по левой стороне, tk.RIGHT - выравнивает по правой стороне. 4. padx - устанавливает отступ по x. 5. pady - устанавливает отступ по y. 6. ipadx - указывает отступ внутри кнопки сторон от текста по оси x. 7. ipady - указывает отступ внутри кнопки сторон от текста по оси y. 8. anchor - помещает кнопку в одно из мест окна: "n" - вверху по центру, "e" - в правой части по центру, "s" - внизу по центру, "w" - в левой части по центру, "nw" - в левом верхнем углу, "ne" - в правом верхнем углу, "se" - в правом нижнем углу, "sw" - в левом нижнем, "center" - по центру.
Замечание
Даже уже из описания параметров очевидно, что некоторые параметры могут противоречить друг другу. Поэтому следует просто поэкпериментировать с ними. Заметим также, что положение кнопки не меняется при изменении размеров окна.
Пока всё! Продолжение следует...
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.