суббота, 30 января 2010 г.

Tkinter Canvas: Рисование простейших фигур в Python'е


В данной статье мне хотелось бы рассмотреть простейшие способы работы с Tkinter и его виджетом Canvas(холст), а именно рисование простейших геометрических фигур с помощью стандартных методов Canvas. Для начала нам необходимо создать окно, в котором мы разместим наш холст 300 на 300 пикселей, куда и будем помещать наши фигуры:



from Tkinter import * #Подключаем модуль Tkinter в наше приложение
root = Tk() #Производим инициализацию нашего графического интерфейса
canvas = Canvas(root, width=300, height=300) #Инициализируем Canvas размером 300х300 пикселей
canvas.pack() #Размещаем Canvas в окне нашего Tkinter-GUI
root.mainloop() # Создаем постоянный цикл


В результате выполнения данной последовательности строк вы будете иметь квадратное серое окошко. Все холст готов и можно приступать к рисованию фигур. Сначала нарисуем круг для этого между 4 и 5 строкой поместим строку следующего вида:


circle = canvas.create_oval(10,10,290,290, fill="blue")


После запуска нашего скрипта у нас должно появится окно с изображением синего круга.


Данная строка описывает правило создание объекта oval который принадлежит виджету canvas. Переменной circle присваиваем canvas.create_oval(x0, y0, x1, y1, options, …). Где x0, y0, x1, y1 — координаты овала:



А option это различные параметры которые имеет овал в нашем примере мы использовали параметр fill(заполнение цветом) и присвоили ему значение "blue" — синий.
Вообще цвета в Tkinter можно задавать двумя способами: первый это тот который мы использовали назвав цвет по имени например "blue" и второй, который задается с помощью шестнадцатиричных чисел:





#rgbЧетыре бита на цвет
#rrggbbВосемь бит на цвет
#rrrgggbbbДвенадцать бит на цвет


Пример: fill="#00f" – получаем тот же синий цвет.
Теперь, давайте в нашем скрипте добавим еще одну строку и поместим ее между строкой начинающейся со слова circle и строкой root.mainloop()

diamond = canvas.create_polygon(150,10,10,150,150,290,290,150, fill="red")

С помощью данной строки мы нарисовали многоугольник в виде ромба и заполнили его красным цветом. Для того чтобы нарисовать многоугольник требуется просто задать координаты его вершин canvas.create_polygon(x0, y0, x1, y1, x2, y2, x3, y3, fill="red"), все вершины последовательно соединяются линией и получается фигура. С помощью данного объекта можно рисовать многоугольники любой формы.



Далее поместим в ромб квадрат, сразу после строки diamond пишем следующую строку:

square = canvas.create_rectangle(80,80,220,220, fill="green")

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



И последнее добавим текст с помощью метода create_text. Координаты данного метода задаются от центра текста, дополнительные параметры также включают цвет, шрифт, но главным параметром является тот который и выводит текст на холст canvas. Следующий пример выводит надпись в центре углу холста.

text = canvas.create_text(150,150, text="Tkinter canvas", fill="purple", font=("Helvectica", "16"))

К видно из написанной строки метод create_text тоже имеет координаты в данном случае это центр текста, опция text выводит само сообщение, опция fill как описано выше цвет заполнения в данном случае цвет шрифта и опция font определяет настройки шрифта (в нашем примере тип и размер).


Вот как выглядит полный рисунок который мы составили с помощью python:



А вот какой у Вас должен появиться скрипт:


from Tkinter import *
root = Tk()
canvas = Canvas(root, width=300, height=300)
canvas.pack(fill=BOTH)
circle = canvas.create_oval(10,10,290,290, fill="#00f")
diamond = canvas.create_polygon(150,10,10,150,150,290,290,150, fill="red")
square = canvas.create_rectangle(80,80,220,220, fill="green")
text = canvas.create_text(150,150, text="Tkinter canvas", fill="purple", font=("Helvectica", "16"))
root.mainloop()

Удаление элементов с холста

Вы наверно обратили внимание, что мы присваивали значение переменным в виде созданных объектов на холсте. Каждая созданная фигура на холсте имеет свой идентификатор, это необходимо для того, чтобы в дальнейшем мы могли управлять ими.
Вы можете удалить любую фигуру с холста используя canvas.delete, например:


canvas.delete(square)
canvas.delete(text)


Таким образом добавляя и удаляя элементы c холста, Вы можете создать более сложную и точную обратную связь пользователя с вашим приложением. Canvas имеет много настроек и дает возможность манипуляции с объектами на более сложном уровне. Например так:


# coding: utf-8
from Tkinter import *

import time
def deltext():
canvas.delete(text)
def delsq():
canvas.delete(square)

root = Tk()
btn1 = Button(root, text="Удалить надпись", command=deltext)
btn1.pack()
btn2 = Button(root, text="Удалить квадрат", command=delsq)
btn2.pack()
canvas = Canvas(root, width=300, height=300)
canvas.pack(fill=BOTH)
circle = canvas.create_oval(0,0,300,300, fill="blue")
diamond = canvas.create_polygon(150,0,0,150,150,300,300,150, fill="red")
square = canvas.create_rectangle(75,75,225,225, fill="green")

text = canvas.create_text(150,150, text="Tkinter canvas", fill="purple",
font=("Helvectica", "16"))
root.mainloop()


Реклама от LiveCLiX

2 комментария:

Артемий Паладий комментирует...

Помогите!
как разместить круг и квадрат в поле 800x800 на одном уровне

Анонимный комментирует...

Как удалить с экрана кнопку после того как на нее нажал