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


У мові Пайтон існують методи, які дають у процесі виконання програми змогу змінювати властивості об’єктів, розташованих на полотні, переміщувати їх і виконувати деякі інші операції. Але для застосування цих методів необхідно заздалегідь надати об’єктам імена (ідентифікатори).

<ідентифікатор>=<ім’я полотна>.create_<назва об’єкта> (параметри)

 Наприклад:
kolo=cnv.create_oval([160, 10], [120, 60], fill=”yellow”)

Метод move() і метод itemconfig()

Перший метод застосовується для переміщення об’єктів по осях Х і Y на вказану кількість пікселів.
Загальна структура вказівки така:

<ідентифікатор полотна>.move(<ідентифікатор об’єкта>,  X, Y)

Наприклад, в результаті виконання вказівки

cnv.move(kolo,0,40)

об’єкт з іменем kolo переміститься вниз на 40 пікселів.
Метод itemconfig() змінює перелічені в методі властивості.
Наприклад, в результаті виконання вказівки

cnv.itemconfig(kvadrat, fill=”red”, width=5)

об’єкт з іменем kvadrat набуде кольору червоного(red) із товщиною рамки 5 пікселів.
Зміни в об’єктах мають виникати під час зовнішнього впливу, наприклад після натискання кнопки миші, клацання кнопки Button тощо. Після виконання таких дій управління має передаватися відповідній функції для опрацювання події.


Наприклад, розглянемо код програми, за допомогою якої на полотні відображується коло, квадрат і дві кнопки Button. Після натискання однієї з кнопок коло кожного разу переміщується на 40 пікселів вниз, а після натискання другої – змінюється товщина рамки й колір заливки квадрата.

# Приклад 1
# Методи move() i itemconfig()
from tkinter import*
root=Tk()
cnv=Canvas(root, width=300, height=280)
cnv.pack()
root.title("Використання тегів")

def func1(en):
    cnv.move(kolo, 0, 40)

def func2(en):
    cnv.itemconfig(kvadrat, fill="red", width=8)

kvadrat=cnv.create_rectangle(20,10,70,60, fill="cyan", outline="blue")
kolo=cnv.create_oval([160,10], [210,60], fill="yellow")

but1=Button(root)
but1["text"]="Переміщення кола"
but1.bind("<Button>", func1)   # зв'язування but1 з func1
but1.pack()

but2=Button(root)
but2["text"]="Зміна кольору квадрата"
but2.bind("<Button>", func2)   # зв'язування but2 з func2
but2.pack()

root.mainloop()

Скриншоти виконання програми:















Кожен об'єкт має унікальні ідентифікатори, тому можна змінювати властивості кожного з них незалежно один від одного.
Але інколи в процесі виконання програми доцільно одночасно змінити одну і ту ж властивість кількох об’єктів. У мові Python це можна зробити з допомогою тегів, які мають ім’я teg. Для цього один і той самий тег присвоюється різним об’єктам. Звернення до нього дає змогу змінити властивості всіх об’єктів, у яких зазначено цей тег.
Наприклад, розглянемо код програми, що містить ті ж самі об’єкти, що в попередньому прикладі. Але вказівки створення об’єктів містять однаковий тег зі значенням group1.

# Приклад 2
from tkinter import*
root=Tk()
cnv=Canvas(root, width=300, height=280)
cnv.pack()
root.title("Використання тегів")

def func1(en):
    cnv.itemconfig("group1", fill="red", width=7)

# створення квадрата і кола з тегами
cnv.create_rectangle(20,10,70,60, fill="cyan", outline="blue",
                     tag="group1")       # квадрат
cnv.create_oval([160,10], [210,60], fill="yellow",
                     tag="group1")       # коло

but1=Button(root)
but1["text"]="Змінити колір об'єктів"
but1.bind("<Button>", func1) # зв'язування but1 з func1 
but1.pack()

root.mainloop()

Скриншоти виконання програми:














Метод delete()
За допомогою метода delete()  із полотна можна видалити об’єкт із вказаним ідентифікатором або тегом.
Якщо вказати в методі значення all, із полотна буде видалено всі об’єкти.

Наприклад, за допомогою вказівки cnv.delete(all) із полотна з іменем cnv будуть видалені всі об’єкти.  

Запитання
1. Із якою метою об'єктам на полотні присвоюють ідентифікатори ?
2. Для чого призначено метод delete() ?
3. Що називають тегами і для чого їх створюють ?

Завдання
1. Розробіть програму, за допомогою якої на полотні розміщуються прямокутник, еліпс і дві кнопки. Після натискання першої кнопки переміщується прямокутник, а після натискання другої - обидві фігури.
2. Розробіть програму, за допомогою якої на полотні створюється піраміда, основою якої є квадрат. 


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

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