Canvas. Графічні примітиви

У tkinter від класу Canvas створюються об'єкти-полотна, на яких можна "малювати", розміщуючи різні фігури і об'єкти. Робиться це за допомогою викликів відповідних методів.

При створенні екземпляра Canvas необхідно вказати його ширину і висоту. При розміщенні геометричних примітивів та інших об'єктів вказуються їх координати на полотні. Точкою відліку є верхній лівий кут.


У програмі нижче створюється полотно. На ньому за допомогою методу create_line () малюються відрізки. Спочатку вказуються координати початку (x1, y1), потім - кінця (x2, y2).

from tkinter import*
root = Tk ()

c = Canvas(root, width = 200, height = 200, bg = 'white')
c.pack()

c.create_line(10, 10, 190, 50)

c.create_line(100, 180, 100, 60, fill = 'green',
                width = 5, arrow = LAST, dash = (10,2),
                activefill = 'lightgreen',
                arrowshape = "10 20 10")

root.mainloop ()

Решта властивості є необов'язковими. Так activefill визначає колір відрізка при наведенні на нього курсора миші.

Створення прямокутників методом create_rectangle ():

...
c.create_rectangle(10, 10, 190, 60)

c.create_rectangle(60, 80, 140, 190, fill='yellow', outline = 'green', width = 3, activedash = (5, 4))

Перші координати - верхній лівий кут, другі - правий нижній. У наведеному прикладі, коли на другий прямокутник потрапляє курсор миші, його рамка стає пунктирною, що визначається властивістю activedash.

Методом create_polygon () малюється довільний багатокутник шляхом завдання координат кожної його точки:

...
c.create_polygon (100, 10, 20, 90, 180, 90)

c.create_polygon (40, 110, 160, 110, 190, 180, 10, 180,
                 fill = 'orange', outline = 'black')

Для зручності координати точок можна укладати в дужки:
...
c.create_polygon((40, 110), (160, 110), (190, 180), (10, 180),
                 fill = 'orange', outline = 'black')
...
Метод create_oval () створює еліпси. 
При цьому задаються координати гіпотетичного прямокутника, що описує еліпс. Якщо потрібно отримати коло, то відповідно описуваний прямокутник повинен бути квадратом.
...
c.create_oval (50, 10, 150, 110, width = 2)
c.create_oval (10, 120, 190, 190, fill = 'grey70', outline = 'white')
...



Більш складні для розуміння фігури виходять при використанні методу create_arc (). Залежно від значення опції style можна отримати сектор (за замовчуванням), сегмент (CHORD) або дугу (ARC). Також як у випадку create_oval () координати задають прямокутник, в який вписане коло (або еліпс), з якої "вирізають" сектор, сегмент або дугу. Опції start присвоюється градус початку фігури, extent визначає кут повороту.

...
c.create_oval(10, 10, 190, 190, fill='lightgrey', outline='white')
c.create_arc(10, 10, 190, 190, start=0, extent=45, fill='red')
c.create_arc(10, 10, 190, 190, start = 180, extent = 25, fill = 'orange')
c.create_arc(10, 10, 190, 190, start=240, extent=100, style=CHORD, fill='green')
c.create_arc(10, 10, 190, 190, start = 160, extent = -70, style = ARC, outline = 'darkblue', width = 5)
...


В даному прикладі світло-сірий коло використовується виключно для наочності.
На полотні можна розмістити текст. Робиться це за допомогою методу create_text ():

...
c.create_text(100, 100, text = "Hello World, \ nPython \ nand Tk",
                 justify = CENTER, font = "Verdana 14")
c.create_text(200, 200, text = "About this",
                 anchor = SE, fill = "grey")



За замовчуванням в заданій координаті розташовується центр текстового напису. Щоб змінити це і, наприклад, розмістити по зазначеній координування ліву межу тексту, використовується якір зі значенням W (від англ. West - захід). Інші значення: N, NE, E, SE, S, SW, W, NW. Якщо букв, які задають сторону прив'язки, дві, то друга визначає вертикальну прив'язку (вгору або вниз «піде» текст від заданої координати). Властивість justify визначає лише вирівнювання тексту відносно себе самого.

Запитання
1.Для чого призначено об'єкт Canvas ?
2. За допомогою якої вказівки створюється полотно в головному вікні ?
3. Які фігури можуть розміщуватися в об'єкті Canvas ?
4. Для чого використовують метод create_rectangle() ?
5. Опишіть вказівку створення еліпса ?

Завдання
1. Створіть на полотні подібне зображення:



Для створення трави використовується цикл.




Комментариев нет:

Отправить комментарий