Найти в Дзене
Программы от меня

О, какие формы у python-a!

Оглавление

Интро или о чём разговор

Приветствую вас, уважаемые друзья. Снова сегодня работаем на python. И тема наших с вами изысканий - windows формы. Да-да, наш python не только язык скриптов, он вполне себе неплохо работает с “оконными” интерфейсами, причем в базовой комплектации.

Верная Tk() - друг питонистов

Итак, что нам нужно, чтобы появились окна? Существует много разных библиотек, но большинство из них требует дополнительной установки. В базовой комплектации имеется библиотека Tk(), которая как верный соратник всегда доступна. Давайте откроем Visual Studio Code (или Notepad++, или PyCharm, или IDLE, кому в чём удобнее работать ), создадим файл index.py и напишем вот такой текст:

-2

Запустим эту программу командой index.py и получим вот такую форму:

-3

Что обозначает каждая команда?

from tkinter import *

тут все просто - импорт всех классов из библиотеки tkinter.

gui = Tk()

создали экземпляр класса Tk(), т.е. форму

gui.geometry("600x500+300+200")

размер формы и её положение относительно левого верхнего угла экрана (всё в пикселях) :

600 (первое число) - ширина формы

500 (второе число) - высота формы

300 (третье число) - сдвиг вправо от левого верхнего угла экрана

200 (четвертое число) - сдвиг вниз от левого верхнего угла экрана

Ну и наконец, когда параметры формы заданы, мы запускаем форму командой

gui.mainloop()

Вот так вот вкратце и работает Tk()

Фреймы Tk(): открываешь сумочку, достаешь кошелочку…

Что можно сказать про созданную выше форму? Создалась хорошо, быстро, но не хватает текстовых полей, кнопочек, надписей и всего прочего. Вот этим и займемся. Но прежде давайте определимся, а что наша программа будет делать. Пусть у нас будет маленький текстовый редактор, в котором можно написать пару строчек в текстовом поле и сохранить нашу заметку в txt-файл (именно так работают блокноты в смартфонах, да и редактор Блокнот в windows, mcedit в линкусах и т.д.).

Во-первых объявим всем, что это у нас текстовый редактор. Напишем в нашем коде такую строчку:

-4

запустим, получим

-5

Отлично, название готово (вы здесь можете дать редактору своё название). Теперь содержимое формы. В принципе можно бахать все элементы прямо на форму, но это всё будет не очень корректно выглядеть, и этим не очень удобно управлять со стороны программиста, поэтому лучше элементы размещать в отдельных контейнерах, которые называются фреймы (Frame). У нас основных элементов два: поле редактирования текста (где мы собственно и вводим новый текст) и кнопка сохранения, Для каждого из них создадим свой фрейм, а затем упакуем эти фреймы в основную форму gui методом pack():

-6

frame_text = Frame(gui, bg='green', bd=5)

frame_button = Frame(gui, bg='blue', bd=5)

frame_text.pack()

frame_button.pack()

мы создали два фрейма - frame_text для текстового поля и frame_button для кнопки. Цвета фона bg мы им задали green и blue - зеленый и синий. Цвета эти достаточно “кричащие”, в реальных текстовых файлах их стараются избежать, но нам они нужны для демонстрации, как и что работает в форме Tk. Если мы сейчас запустим нашу программу, то мы ничего нового не увидим:

-7

Форма выглядит так же, как и при нашем “безфреймовом” её создании. Так как же нам увидеть фреймы. Мы должны разместить на них элементы - на frame_text текстовое поле, на frame_button - кнопочку:

-8

В общем виде программа выглядит так

from tkinter import *

-9

Запустим программу

-10

Вот теперь видно, что обозначали параметры фреймов bd=5 обозначает что отступ каждого элемента от границ фрейма 5 px. Это позволяет нам видеть цвета фреймов - текстовый зеленый, кнопочный - синий.

Кнопка смотрится не очень эстетично, лучше, если она будет по всей ширине нашей формы, поэтому сделаем её ширину 600 пикселей при помощи команды:

butt_save.configure(width=600)

также увеличим высоту текстового поля до 25, чтобы вся форма была занята:

text = Text(frame_text, height=25, font='Arial,14',wrap=WORD)

Вид нашей формы будет теперь вот таким (после запуска программы конечно):
Вид нашей формы будет теперь вот таким (после запуска программы конечно):

(ну и пишем всё шрифтом Arial кегль 14, как и указано в параметрах текстового поля).

Рукописи не горят, или сохраняем заметку

Сейчас при нажатии кнопки ничего не происходит, но нам надо сохранять нашу информацию в текстовый файл, как мы и планировали. Для этого мы должны задать нашей кнопке параметр command=, задающий выполнение определенной функции, а также написать эту функцию.

Занимаемся кнопкой:

-12

видим команду command=save,, и соответственно пишем функцию save, но делаем это чуть раньше, сразу после создания экземпляра Tk():

-13

То есть мы содержимое поля text сохраняем через функцию get() в переменную mess. Потом открываем файл mess.txt на запись (параметр w), и пока он открыт на запись, записываем в него содержимое переменной mess.

Запускаем программу на выполнение, пишем какой-нибудь текст в текстовом поле и нажимаем кнопку Сохранить. В результате в папке с программой создается файл mess.txt, в который записывается наш текст

-14

Всё отлично сработало, но нам надо уметь задавать файл для сохранения в диалоговом окне. Вы очень удивитесь, но… за диалоговые окна отвечает тот же tkinter. Для этой цели отдельно импортируем библиотеку filedialog и немного модифицируем нашу функцию сохранения файла:

-15

То есть мы открываем диалоговое окно и создаем переменную filepath, в которую мы запишем имя файла из диалогового окна. Если эта переменная будет не пустая, то есть если мы в диалоговом окне не нажмем Отмена, то выполнится наша процедура сохранения текста в файл, только не в mess.txt, а в тот файл, имя и путь к которому мы пропишем в диалоге. Попробуем:

В этом случае текст сохранится в файл mess2.txt, название которого мы прописали в диалоговом окне. Проверяем - файл создался, текст записался.

На этом мы заканчиваем наше исследование работы Tk() и создание простого текстового файла. Благодарю за внимание и жду комментариев

#python #tk #формы #питон