Проект. Графік косинусоїди

Бібліотека tkinter призначена для організації графічних інтерфейсів (GUI - Graphical User Interface) програм на Python, але завдяки наявності елемента графічного інтерфейсу (або, як кажуть, «віджету») canvas ( «полотно») в tkinter можна використовувати елементи векторної
графіки - криві, дуги, еліпси, прямокутники тощо., а також малювати прямі і криві за координатами, розрахованими за формулами.

Розглянемо задачу побудови графіка деякої функції по обчислюваним точкам за допомогою tkinter.
Оскільки tkinter дозволяє працювати з елементами GUI, створимо вікно заданого розміру, встановимо для нього заголовок і колір фону «полотна», а також забезпечимо вікно програмною «кнопкою». На «полотні» визначимо систему координат і намалюємо «косинусоїду».

# Графік функції y=cos(x)
from tkinter import*
import math
#
tk=Tk()
tk.title("Графік y=cos(x)")
#
def quit():
    tk.destroy()

button=Button(tk, command=quit)
button["text"]="Закрити"
button.pack()
#
canvas=Canvas(tk)
canvas["height"]=350
canvas["width"]=550
canvas["background"]="#eeeeff"
canvas["borderwidth"]=2
canvas.pack()
#
canvas.create_text(50,14,text="50,40")
canvas.create_text(460,350,text="460,350")
#
points=[]

ay=150  #
y0=150  #
x0=50   # 
x1=470  #
dx=10   # 
#
for n in range(x0,x1,dx):
    y=y0-ay*math.cos(n*dx)
    pp=(n,y)
    points.append(pp)
#
canvas.create_line(points,fill="blue",smooth=1)
#
y_axe=[]
yy=(x0,0)
y_axe.append(yy)
yy=(x0,y0+ay)
y_axe.append(yy)
canvas.create_line(y_axe,fill="black",width=2)
#
x_axe=[]
xx=(x0,y0)
x_axe.append(xx)
xx=(x1,y0)
x_axe.append(xx)
canvas.create_line(x_axe,fill="black",width=2)
#
tk.mainloop()

В перших трьох рядках підключаються бібліотеки. Оскільки в прикладі повинні
використовуватися тригонометричні функції, необхідна бібліотека math.
Потім створюється так зване «кореневе» вікно tk - кажучи науковою мовою, «Екземпляр интерфейсного об'єкта Tk», який представляє собою просто вікно без вмісту.
Потім для цього вікна встановлюється значення властивості title (створюється заголовок). 
Далі починається заповнення вікна інтерфейсними об'єктами ( «віджетами» widgets).
В даному прикладі використовується два об'єкти - кнопка(button) і «полотно»(canvas). Для розміщення об'єкта у вікні використовується функція pack (), а порядок об'єктів визначається порядком виконання цієї функції.

Кнопка створюється як екземпляр об'єкта Button бібліотеки tkinter, пов'язаний з «кореневим» вікном. Для кнопки можна встановити текст напису (aтрибут «text») і зв'язати кнопку з виконанням якої-небудь команди (функції або процедури) за допомогою атрибута «command».
У наведеному прикладі кнопка пов'язана з командою закриття вікна destroy і припинення роботи інтерпретатора, проте ніщо не заважає також закривати вікно нашого «додаткa» звичайним чином - за допомогою стандартної кнопки закриття вікна у верхньому правому куті.

Після створення і розміщення кнопки створюється «полотно». для елемента canvas вказуються висота, ширина, колір фону і відступ від кордонів вікна (таким чином, вікно виходить трохи більше, ніж елемент canvas). розміри вікна автоматично підлаштовуються так, щоб забезпечити розміщення всіх елементів.

Після розміщення віджета canvas в вікні досліджуємо систему координат. Оскільки розміри вікна вже нами задані, корисно визначити, де знаходиться точка з координатами (0,0). Як видно з спроб вивести значення координат з допомогою функції canvas.create_text(), початок координат знаходиться в верхньому лівому кутку «полотна».

Тепер, визначившись з координатами, можна вибрати масштабні коефіцієнти, зсуви і сформувати координати точок для малювання кривої.
Для функції canvas.create_line() в якості координат потрібен список пар точок (кортежів) (x, y). Цей список формується в циклі з кроком dx.

Для лінії графіка встановлюються колір і режим згладжування. Це згладжування забезпечує деяку «плавність» кривої. Якщо його прибрати, лінія буде складатися з відрізків прямих. Крім того, для ліній можна встановлювати товщину, як це показано для «осей координат».

Запитання
1. Для чого використовують бібліотеки tkinter i math ?
2. Для чого призначено об'єкт Canvas ?
3. Які об'єкти можуть розміщуватися в Canvas ?
4. Для чого використовують метод canvas.create_text() ?
5. Для чого використовують метод canvas.create_line() ?
6. З допомогою якого класу створюють кнопку ?
7. Які властивості може мати екземпляр(об'єкт) класу Button ?
8. Які параметри потрібно змінювати в циклі for, щоб вивести на екран координати точок графіка функції  cos(x)?
 9. Яку назву в програмі має кортеж(вид списку), в який заносяться пари точок графіка ?
10. Як діє метод destroy? 

Завдання
1. Виконати код програми і надіслати скриншот результату
2. З'ясувати, як впливає на вигляд графіка параметр smooth=1 ? 
3. З'ясувати, як впливає на вигляд графіка параметр dx ?
4. Доповнити код програми коментарями





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

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