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()