Учебная страница курса биоинформатики,
год поступления 2011
Графические программы в Python
Скрипты: можно писать программку в файлике (например, myProgram.py), а потом запускать его так:
python myProgram.py
Графический интерфейс
В современных операционных системах любое пользовательское приложение графическое приложение со всеми его кнопочками, галочками и другими фитюличками (виджетами) располагается в главном окне. Для языка программирования Python такие виджеты включены в специальную библиотеку — Tkinter. Если ее импортировать в программу (скрипт), то можно пользоваться ее компонентами, создавая графический интерфейс.
Сегодня кнопочек не будет, но зато мы будем чего-нибудь рисовать.
Последовательность шагов при создании минимального графического:
- Импорт библиотеки
- Создание главного окна
- ...
- Last. Отображение главного окна
Импорт модуля Tkinter
Как и любой модуль, Tkinter в Python можно импортировать двумя способами: командами
или
В дальнейшем мы будем пользоваться только вторым способом, т. к. это позволит не указывать каждый раз имя модуля при обращении к объектам, которые в нем содержатся. Следует обратить внимание, что в версии Python 3 имя модуля пишется со строчной буквы (tkinter), хотя в более ранних версиях использовалась прописная (Tkinter). Итак, первая строчка программы должна выглядеть так:
1 from Tkinter import Tk, Canvas
Создание главного окна
1 root = Tk() # root – корневое окошко.
Отображение главного окна
Главное окно не появится, пока не будет вызван специальный метод mainloop:
1 root.mainloop()
Данная строчка кода должна быть всегда в конце скрипта!
mainloop – основной цикл программы. В основном цикле программа периодически обращается к операционной системе по мере её выполнения, чтобы узнать не произошли ли какие-нибудь изменения, чтобы среагировать на них должным образом. Например, когда меняется размер окошка, какие-то элементы нужно растянуть (или сжать), какие-то сдвинуть.
Добавление разных графических элементов (виджетов) в окно это описывается между строчкой создания окна и mainloop:
- Импорт библиотеки
- Создание главного окна
- Создание фитюлички
- Добавление фитюлички в окно
- ...
- Last. Отображение главного окна
Сегдня мы будем рисовать шарики. Для этого нужно создать и добывить в окно холст – Canvas.
Canvas (холст) — это достаточно сложный объект библиотеки Tkinter.
Он позволяет располагать на самом себе графические примитивы. Это могут быть как геометрические фигуры, узоры, вставленные изображения, так и другие виджеты (например, метки, кнопки, текстовые поля).
И это еще не все. Отображенные на холсте объекты можно изменять и перемещать (при желании) в процессе выполнения скрипта.
Учитывая все это, canvas находит широкое применение: создание рисунков, программируемая анимация и др.
Перед тем как создавать геометрические фигуры на холсте следует разобраться с координатами и единицами измерения расстояния.
Нулевая точка (0,0) для объекта Canvas располагается в верхнем левом углу.
У любой точки первое число — это расстояние от нулевого значения по оси X, второе — по оси Y.
Прямая. Стрелка.
1 canv.create_line(200,50,300,50,width=3,fill="blue")
2 #линия начинается из точки (200,50), а заканчивается в точке (300,50).Свойство fill позволяет задать цвет линии отличный от черного
3 canv.create_line(0,0,100,100,width=2,arrow=LAST)
4 #линия начинается в точке (0,0), заканчивается — в (100,100). arrow – установливает стрелку (в конце, начале или по обоим концам линии).
Но чтобы использовать LAST нужно его сначала импортировать:
1 from Tkinter import LAST
Прямоугольник.
Метод create_rectangle создает прямоугольник. Аналогично линии в скобках первыми аргументами прописываются четыре числа.
Первые две координаты обозначают верхний левый угол прямоугольника, вторые — правый нижний.
Опция outline определяет цвет границы прямоугольника.
Произвольный многоугольник.
Чтобы создать произвольный многоугольник, требуется задать пары координат для каждой его точки.
1 canv.create_polygon([250,100],[200,150],[300,150],fill="yellow")
Квадратные скобки при задании координат используются для удобочитаемости (их можно не использовать).
Овал.
При создании эллипса задаются координаты гипотетического прямоугольника, описывающего данный эллипс.
1 canv.create_oval([20,200],[150,300],fill="gray50")
Программка для рисования шарика:
1 import Tkinter
2 import random
3 #from Tkinter import *
4 root=Tkinter.Tk()
5 canvas_size = 500
6 canv = Tkinter.Canvas(root, width=canvas_size, height=canvas_size, bg="white")
7 canv.pack()
8 size = 150
9 x=100
10 y=200
11 color = "red"
12 canv.create_oval(x,y,x+size,y+size, fill=color, width=0)
13 root.mainloop()
Чтобы нарисовать несколько шариков разного цвета, нам нужен набор цветов, из которых выбирать.
Cписки, в них пишут в скобочках через запятую:
1 colors = ["red","orange","yellow","green","blue","cyan","magenta","light blue"]
Чтобы рисовать шарики в случайном месте, случайного размера и случайного цвета, нам понадобится модуль random.
Random
модуль random: в нём есть функция randint(a,b), которая возвращает равномерное распределение в диапазоне [a,b] (оба конца включены), есть функция choice(список), которая возвращает случайный элемент списка (с равными вероятностями), а ещё есть куча полезных штук типа гауссовское распределение, нормальное распределение и т.п.
Программка для рисования шариков:
1 import Tkinter
2 import random
3 root=Tkinter.Tk()
4 canvas_size = 500
5 colors = ["red","orange","yellow","green","blue","cyan","magenta","light blue"]
6 canv = Tkinter.Canvas(root, width=canvas_size, height=canvas_size, bg="white")
7 canv.pack()
8 # создаем шарик со случайным размером, координатами и цветом
9 size = random.randint(1,canvas_size/2)
10 x=random.randint(0, canvas_size-size)
11 y=random.randint(0, canvas_size-size)
12 color = random.choice(colors)
13 print x,y,size
14 canv.create_oval(x,y,x+size,y+size, fill=color, width=0)
15 #(блок создания шарика повторить 5 раз)
16 root.mainloop()