Kodomo

User

Учебная страница курса биоинформатики,
год поступления 2012

#pragma css /css/2011.css

Учебная страница курса биоинформатики,
год поступления 2012

Графические программы в Python

Скрипты: можно писать программку в файлике (например, myProgram.py), а потом запускать его так:

python myProgram.py

Графический интерфейс

В современных операционных системах любое графическое приложение со всеми его кнопочками, галочками и другими фитюличками (виджетами) располагается в главном окне. Для языка программирования Python такие виджеты включены в специальную библиотеку — Tkinter. Если ее импортировать в программу (скрипт), то можно пользоваться ее компонентами, создавая графический интерфейс.

Сегодня кнопочек не будет, но зато мы будем чего-нибудь рисовать.

Последовательность шагов при создании минимального графического:

  1. Импорт библиотеки
  2. Создание главного окна
  3. ...
  4. Last. Отображение главного окна

Импорт модуля Tkinter

Как и любой модуль, Tkinter в Python можно импортировать двумя способами: командами

import Tkinter
# и можем пользоваться из этого модуля Tkinter.Tk() и Tkinter.Canvas() под такими именами

или

from Tkinter import Tk, Canvas
# и можем пользоваться из этого модуля Tkinter.Tk() под именем Tk() и аналогично Canvas()

В дальнейшем мы будем пользоваться только вторым способом, т. к. это позволит не указывать каждый раз имя модуля при обращении к объектам, которые в нем содержатся. Следует обратить внимание, что в версии Python 3 имя модуля пишется со строчной буквы (tkinter), хотя в более ранних версиях использовалась прописная (Tkinter). Итак, первая строчка программы должна выглядеть так:

from Tkinter import Tk, Canvas

Создание главного окна

root = Tk() # root – корневое окошко.

Отображение главного окна

Главное окно не появится, пока не будет вызван специальный метод mainloop:

root.mainloop()

Данная строчка кода должна быть всегда в конце скрипта!

mainloop – основной цикл программы. В основном цикле программа периодически обращается к операционной системе по мере её выполнения, чтобы узнать не произошли ли какие-нибудь изменения, чтобы среагировать на них должным образом. Например, когда меняется размер окошка, какие-то элементы нужно растянуть (или сжать), какие-то сдвинуть.

Добавление разных графических элементов (виджетов) в окно это описывается между строчкой создания окна и mainloop:

  1. Импорт библиотеки
  2. Создание главного окна
  3. Создание фитюлички
  4. Добавление фитюлички в окно
  5. ...
  6. Last. Отображение главного окна

Сегдня мы будем рисовать шарики. Для этого нужно создать и добывить в окно холст – Canvas.

Canvas (холст) — это достаточно сложный объект библиотеки Tkinter.

Он позволяет располагать на самом себе графические примитивы. Это могут быть как геометрические фигуры, узоры, вставленные изображения, так и другие виджеты (например, метки, кнопки, текстовые поля).

И это еще не все. Отображенные на холсте объекты можно изменять и перемещать (при желании) в процессе выполнения скрипта.

Учитывая все это, canvas находит широкое применение: создание рисунков, программируемая анимация и др.

Перед тем как создавать геометрические фигуры на холсте следует разобраться с координатами и единицами измерения расстояния.

Нулевая точка (0,0) для объекта Canvas располагается в верхнем левом углу.

У любой точки первое число — это расстояние от нулевого значения по оси X, второе — по оси Y.

canv = Canvas(root, width=500,height=500,bg="lightblue", cursor="pencil") #создаём объект-холст
canv.pack() #разместим на главном окне

Прямая. Стрелка.

canv.create_line(200,50,300,50,width=3,fill="blue")
#линия начинается из точки (200,50), а заканчивается в точке (300,50).Свойство fill позволяет задать цвет линии отличный от черного
canv.create_line(0,0,100,100,width=2,arrow="last")
#линия начинается в точке (0,0), заканчивается — в (100,100). arrow – установливает стрелку (в конце, начале или по обоим концам линии).
canv.create_line(0,0,50,20,100,100,width=2,smooth="true")

Прямоугольник.

Метод create_rectangle создает прямоугольник. Аналогично линии в скобках первыми аргументами прописываются четыре числа.

Первые две координаты обозначают верхний левый угол прямоугольника, вторые — правый нижний.

x = 75
y = 110
canv.create_rectangle(x,y,x+80,y+50,fill="white",outline="blue",width=2)

Опция outline определяет цвет границы прямоугольника.

Произвольный многоугольник.

Чтобы создать произвольный многоугольник, требуется задать пары координат для каждой его точки.

canv.create_polygon([250,100],[200,150],[300,150],fill="yellow")

Квадратные скобки при задании координат используются для удобочитаемости (их можно не использовать).

Овал.

При создании эллипса задаются координаты гипотетического прямоугольника, описывающего данный эллипс.

canv.create_oval([20,200],[150,300],fill="gray50")

Программка для рисования шарика:

import Tkinter
import random
#from Tkinter import *
root=Tkinter.Tk()
canvas_size = 500
canv = Tkinter.Canvas(root, width=canvas_size, height=canvas_size, bg="white")
canv.pack()
size = 150
x=100
y=200
color = "red"
canv.create_oval(x,y,x+size,y+size, fill=color, width=0)
root.mainloop()

Чтобы нарисовать несколько шариков разного цвета, нам нужен набор цветов, из которых выбирать.

Cписки, в них пишут в скобочках через запятую:

colors = ["red","orange","yellow","green","blue","cyan","magenta","light blue"]

Чтобы рисовать шарики в случайном месте, случайного размера и случайного цвета, нам понадобится модуль random.

Random

модуль random: в нём есть функция randint(a,b), которая возвращает равномерное распределение в диапазоне [a,b] (оба конца включены), есть функция choice(список), которая возвращает случайный элемент списка (с равными вероятностями), а ещё есть куча полезных штук типа гауссовское распределение, нормальное распределение и т.п.

random.random() # возвращает случайное число из интервала [0.0, 1.0).
random.randint(a, b) # возвращает случайное целое число из интервала [a, b].
random.choice(["a","b","c"]) # возвращает случайный элемент из данного списка.

Программка для рисования шариков:

import Tkinter
import random
root=Tkinter.Tk()
canvas_size = 500
colors = ["red","orange","yellow","green","blue","cyan","magenta","light blue"]
canv = Tkinter.Canvas(root, width=canvas_size, height=canvas_size, bg="white")
canv.pack()
# создаем шарик со случайным размером, координатами и цветом
size = random.randint(1,canvas_size/2)
x=random.randint(0, canvas_size-size)
y=random.randint(0, canvas_size-size)
color = random.choice(colors)
print x,y,size
canv.create_oval(x,y,x+size,y+size, fill=color, width=0)
#(блок создания шарика повторить 5 раз)
root.mainloop()

2012/4/Python/1/Record (last edited 2015-10-16 22:03:27 by homo_sapiens)