- Введение в GNU/Linux
- Работа в графических средах (KDE, Gnome)
- Командная оболочка (bash)
- Практические работы по OpenOffice
- Основы программирования (Python)
- Алгоритмы на Python
- Объектно-ориентированное программирование (Python)
- Программирование графического интерфейса (Tkinter)
- 2D анимация (Synfig)
- 3D моделирование (Blender)
- Blender Game Engine
В многообразии программ, которые пишут программисты, выделяют приложения с графическим пользовательским интерфейсом (GUI). При создании таких программ становятся важными не только алгоритмы обработки данных, но и разработка для пользователя программы удобного интерфейса, взаимодействуя с которым, он будет определять поведение приложения. Современный пользователь в основном взаимодействует с программой с помощью различных кнопок, меню, значков, вводя информацию в специальные поля, выбирая определенные значения в списках и т. д. Эти "изображения" в определенном смысле и формируют GUI, в дальнейшем мы их будем называть виджетами (от англ. widget - "штучка"). Для языка программирования Python такие виджеты включены в специальную библиотеку — tkinter. Если ее импортировать в программу (скрипт), то можно пользоваться ее компонентами, создавая графический интерфейс. Последовательность шагов при создании графического приложения имеет свои особенности. Программа должна выполнять свое основное назначение, быть удобной для пользователя, реагировать на его действия. Мы не будем вдаваться в подробности разработки, а рассмотрим какие этапы приблизительно нужно пройти при программировании, чтобы получить программу с GUI:
1. Импорт модуля tkinterКак и любой модуль, tkinter в Python можно импортировать двумя способами: командами import tkinter или from tkinter import *. В дальнейшем мы будем пользоваться только вторым способом, т. к. это позволит не указывать каждый раз имя модуля при обращении к объектам, которые в нем содержатся. Следует обратить внимание, что в версии Python 3 имя модуля пишется со строчной буквы (tkinter), хотя в более ранних версиях использовалась прописная (Tkinter). Итак, первая строчка программы должна выглядеть так: from tkinter import * 2. Создание главного окнаВ современных операционных системах любое пользовательское приложение заключено в окно, которое можно назвать главным, т.к. в нем располагаются все остальные виджеты. Объект окна верхнего уровня создается при обращении к классу Tk модуля tkinter. Переменную связанную с объектом-окном принято называть root (хотя понятно, что можно назвать как угодно, но так уж принято). Вторая строчка кода: root = Tk() 3. Создание виджетДопустим в окне будет располагаться всего одна кнопка. Кнопка создается при обращении к классу Button модуля tkinter. Объект кнопка связывается с какой-нибудь переменной. У класса Button (как и всех остальных классов, за исключением Tk) есть обязательный параметр — объект, которому кнопка принадлежит (кнопка не может "быть ничейной"). Пока у нас есть единственное окно (root), оно и будет аргументом, передаваемым в класс при создании объекта-кнопки: but = Button(root) 4. Установка свойств виджетУ кнопки много свойств: размер, цвет фона и надписи и др. Мы рассмотрим их на следующем уроке. Пока же установим всего одно свойство — текст надписи (text): but["text"] = "Печать" 5-6. Определение событий и их обработчиковМногообразие событий и способов их обработки будет рассмотрено на следующих уроках. Здесь же просто коснемся данного вопроса в связи с потребностью. Что же будет делать кнопка и в какой момент она это будет делать? Предположим, что задача кнопки вывести какое-нибудь сообщение в поток вывода, используя функцию print. Делать она это будет при нажатии на нее левой кнопкой мыши. Действия (алгоритм), которые происходят при том или ином событии, могут быть достаточно сложным. Поэтому часто их оформляют в виде функции, а затем вызывают, когда они понадобятся. Пусть у нас печать на экран будет оформлена в виде функции printer: def printer(event): print ("Как всегда очередной 'Hello World!'") Не забывайте, что функцию желательно (почти обязательно) размещать в начале кода. Параметр event – это какое-либо событие. Событие нажатия левой кнопкой мыши выглядит так: 7. Размещение виджетЕсли вы заметите, то в любом приложении виджеты не разбросаны по окну как попало, а хорошо организованы, интерфейс продуман до мелочей и обычно подчинен определенным стандартам. До стандартов нам далеко, нужно просто кнопку как-то отобразить в окне. Самый простой способ — это использование метода pack. but.pack() Если не вставить эту строчку кода, то кнопка в окне так и не появится, хотя она есть в программе. 8. Отображение главного окнаНу и наконец, главное окно тоже не появится, пока не будет вызван специальный метод mainloop: root.mainloop() Данная строчка кода должна быть всегда в конце скрипта! В итоге, код программы может выглядеть таким образом: from tkinter import * def printer(event): print ("Как всегда очередной 'Hello World!'") root = Tk() but = Button(root) but["text"] = "Печать" but.bind("<Button-1>",printer) but.pack() root.mainloop() При программировании графического интерфейса пользователя более эффективным оказывается объектно-ориентированный подход. Поэтому многие «вещи» оформляются в виде классов. В нашем примере также можно использовать класс: from tkinter import * class But_print: def __init__(self): self.but = Button(root) self.but["text"] = "Печать" self.but.bind("<Button-1>",self.printer) self.but.pack() def printer(self,event): print ("Как всегда очередной 'Hello World!'") root = Tk() obj = But_print() root.mainloop() Практическая работа
but = Button(root, text="Печать") |
|||
