Поиск

понедельник, 21 мая 2018 г.

Клас Button (створення кнопок у вікні)

Доброго дня! Сьогодні ми продовжимо ознайомлення з бібліотекою Tkinter. І ознайомимося з класом Button.

Створимо вікно з двома кнопками, що будуть розташовуватися одна під одною.
from Tkinter import *
root = Tk()
b1 = Button(root, text='My first button!')
b1.pack()
b2 = Button(root, text='Second!')
b2.pack()
root.mainloop()


!     Якщо розміри кнопки не задані, то вони визначаються текстом на ній.
Ускладнимо завдання: Нехай при натисненні на першу кнопку видається повідомлення "Hello!".
По-перше, подія пов'язана з кнопкою, тому кнопка має містити атрибут, що обробляє цю подію. Цей атрибут носить назву command. Яке ж може бути його значення? Яка нам знайома структура виконується лише тоді, коли ми її викликаємо? Це функція. Напишемо функцію, яка виводить дане повідомлення. Потім значенням атрибуту command поставимо ім'я функції. Вона буде викликатися лише при натисненні на кнопку.
from Tkinter import *
def hello():
    print 'Hello!'
root = Tk()
b1 = Button(root, text='My first button!', command=hello)
b1.pack()
root.mainloop()

Текст 'Hello!' виводиться не у нашому вікні, а у вікні Python Shell.
Результат запуску програми і п'яти натискувань кнопки:




Розгляньте ще один приклад, у якому при натисненні на першу кнопку виводиться "Hello!", друга кнопка дозволяє обрахувати суму двох чисел.
from Tkinter import *
def hello():
    print 'Hello!'
def sum():
    print 'Find the sum of two numbers a and b.'
    a = input('vvedi a: ')
    b = input('vvedi b: ')
    print a, '+' , b, '=', a+b
root = Tk()
b1 = Button(root, text='My first button!', command=hello)
b1.pack()
b2 = Button(root, text='Second button!', command=sum)
b2.pack()
root.mainloop()

Результат запуску програми і натискування спочатку на першу, потім на другу кнопку (при цьому вводяться два числа і виводиться результат), і  три рази на першу кнопку:


Використаємо бібліотеку turtle для опрацювання натиснення на третю кнопку. Нехай при цьому в окремому вікні малюється n-кутник.

!  При підключенні модуля turtle повинен обов'язково йти перед модулем Tkinter, бо вікно turtle написане за допомогою Tkinter.
from turtle import *
from Tkinter import *
def hello():
    print 'Hello!'
def sum():
    print 'Find the sum of two numbers a and b.'
    a = input('vvedi a: ')
    b = input('vvedi b: ')
    print a, '+' , b, '=', a+b
def line():
    n = input("vvedi kilkist storin bagatokutnika: ")
    i = 1
    while i <= n:
        forward(20)
        left(360/n)
        i = i+1
root = Tk()
b1 = Button(root, text="My first button!", command=hello)
b1.pack()
b2 = Button(root, text="Second button", command=sum)
b2.pack()
b3 = Button(root, text="Use turtle", command=line)
b3.pack()
root.mainloop()

Результат послідовного натискування на першу, другу (введення двох чисел, виведення результату) і третю кнопки (введення кількості сторін):


Використання випадкових чисел. Програми з використанням випадкових чисел

 Доброго дня! Сьогодня ми напишемо програму, яка створює полотно з прямокутником випадкового розміру у випадковій точці. «Випадкового розміру у випадковій точці» означає, що координати несусідніх вершин є випадковими числами. Оскільки координати мають бути цілими числами, то використаємо функцію randint, попередньо підключивши відповідну бібліотеку.
Повторити відомості про бібліотеку випадкових чисел можна  Дивитися тут =>
Матимемо програму:
from Tkinter import *
from whrandom import *
root = Tk()
root.config()
root.title('Window for drawing')
canvas = Canvas(root, bg="steelblue")
canvas.pack()
rect = canvas.create_rectangle(randint(0, 400), randint(0, 250), randint(0, 400), randint(0, 250), width=10, fill="green", outline="red")
root.mainloop()

Діапазони 0...400 та 0...250  обрані відповідно до розміру вікна по замовчуванню.
При кожному запускові програми будемо отримувати інший прямокутник.
Наприклад,
        

понедельник, 14 мая 2018 г.

Бібліотека Tkinter. Клас Canvas

Доброго дня! Сьогодні ми продовжимо ознайомлення з бібліотекою Tkinter.

Цей клас застосовується для відображення діаграм, многокутників та інших типів графічних елементів. Ми ознайомимося і використаємо клас Canvas для створення полотна для малювання.

Спочатку створюємо головне вікно, у якому і розміщуємо полотно для малювання:
from Tkinter import *
root=Tk()
root.title('Windows for drawing')
canvas=Canvas(root)
canvas.pack()
root.mainloop()
На цьому  полотні є система координат, але на відміну від вікна turtle, початок координат знаходиться завжди у лівому верхньому куті, додатня частина осі х спрямована звичайним чином вправо, а от додатня частина вісі y спрямована донизу !.  Тобто у вікні видно лише першу координатну чверть - частина фігури, що не потрапляє у цю чверть просто не відображається.
Які ж фігури можна розташувати на полотні?
Для розміщення на полотні прямокутника і овалу застосуємо методи create_rectangle та create_oval.
Прямокутник задається координатами двох несусідніх вершин, наприклад, лівого верхнього та правого нижнього кутів.
      canvas.create_rectangle(10, 10, 100, 200)
Якщо ці ж самі координати точок застосувати у методі create_oval
      canvas.create_oval(10, 10, 100, 200)
то отримаємо таке вікно:
Звідси можна зробити висновок, що при створенні овалу задається прямокутна область, у яку вписується овал. Ця область задається координатами двох несусідніх вершин.

У методах create_rectangle та create_oval  є однакові параметри:
fill відповідає за заливку фігури,
outline та width задають  колір та  ширину межі фігури.

Наступна програма малює червоний прямокутник з блакитною межею шириною 10 пікселів та жовтий овал із зеленою межею шириною 2 пікселі:
from Tkinter import *
root = Tk()
root.title('Window for drawing')
canvas = Canvas(root, bg='steelblue')
canvas.pack()
canvas.create_rectangle(10, 10, 100, 200, fill='red', outline='blue',width=10)
canvas.create_oval(150, 150, 160, 160, fill='yellow',  outline='green',width=2)
root.mainloop()

Бібліотека Tkinter. Клас Label

Доброго дня! Сьогодні ми продовжимо ознайомлення з бібліотекою Tkinter.

У вікні можна розміщувати різні об'єкти. Наприклад, для розміщення тексту у вікні ознайомимося і використаємо клас Label (з англ. ярлик).
Створимо конкретний об'єкт цього класу з іменем label
          label = Label(root, text='Hello, world!')
У дужках необхідно вказати, у якому вікні буде розташований текст і який саме текст. Тому першою опцією є ім'я створеного вікна root, другий параметр text приймає значення  'Hello, world!'.
До об'єкту label треба застосувати метод pack()
          label.pack()
!  Якщо цей метод не використати, текст у вікні не буде відображеним (не                  з'явиться).
Наступна програма beta04.py

from Tkinter import *
root = Tk()
root.title('My favourite title')
label = Label(root, text='Hello, world!')
label.pack()
root.mainloop()

створює вікно






Зверніть увагу, що коли розміри вікна явно не задані, вікно стискується до            розмірів об'єктів, що на йому розташовані.
Але текст написаний чорним кольором і маленьким шрифтом. Виявляється, існують параметри, які дозволяють це змінити.
label = Label(root, text="Hello, world!", fg="red", font="Times")
label.pack()

Ви вже здогадалися, що параметр fg задає колір тексту, а параметр font задає тип шрифту.
Якщо font прийме значення Ariel, то текст у вікні буде виглядати так:
Програма в цілому буде виглядати так:
from Tkinter import *
root = Tk()
root.title('My favourite title')
label = Label(root, text="Hello, world!", fg="red", font="Ariel")
label.pack()
root.mainloop()

При зміні розмірів вікна за допомогою миші відбувається наступне:
Для того, щоб текст розташовувався у всьому доступному просторі вікна можна використати опцію expand зі значенням 1 для метода pack. Створимо ще один текст у вікні:
from Tkinter import *
root=Tk()
label=Label(root, text='Hello, world!', fg='red', font='Ariel')
label.pack()
label2=Label(root, text='My name is Ivan', fg='blue', font='Times')
label2.pack(expand=1)
root.title('My favourite title')
root.mainloop()

Після запуску отримаємо вікно:
Але при зміні розмірів вікна текст My name is Ivan буде займати положення посередині доступного простору (доступний простір визначається розмірами вікна після розміщення першого тексту):

Якщо і до тексту Hello, world! застосувати опцію expand=1, то отримаємо:
Вивчаючи HTML, ви взнали як змінювати розмір тексту, робити його напівжирним, курсивом, підкресленим. У бібліотеці Tkinter також передбачені такі параметри:
label2 = Label(root, text='My name is Ivan', fg='blue',
               font=('Comic Sans', 25, 'bold italic underline'),
               bg='green', width=20, height=10, relief=RAISED, bd=8)

Розглянемо по частинах:
fg='blue'   - задає колір тексту;
font=('Comic Sans', 25, 'bold italic underline')   -  параметри текста, а саме: Шрифт - Comic Sans, розмір - 25, bold - напівжирний, italic - курсив, underline - підкреслений;
bg='green'  -  колір фону мітки;
width=20, height=10 - відповідно ширину і довжину, але не у пікселях, а у символах;
relief=RAISED, bd=8  - вже знайомі тип і товжина рамки.

Остаточно отримуємо програму
from Tkinter import *
root = Tk()
root.title('My favourite title')
label1 = Label(root, text='Hello, world!')
label1.pack()

label2 = Label(root, text='My name is Ivan', fg='blue',
               font=('Comic Sans', 25, 'bold italic underline'),
               bg='green', width=20, height=10, relief=RAISED, bd=8)

label2.pack()
root.mainloop()

Для того, щоб до кінця зрозуміти, що означає фраза «ширина і довжина у символах» поставимо ці параметри рівні width=3, height=4. Після запуску зміненої програми отримаємо:

понедельник, 23 апреля 2018 г.

Бібліотека (модуль) Tkinter. Клас Tk (у версіях, починаючи з Python 3.0, бібліотека має назву tkinter (тобто записується з малої літери).

Доброго дня! Сьогодня ми розглянемо більш детально можливості бібліотеки або ще називають модулья Tkinter.
Перш ніж створити своє перше вікно, треба підключити бібліотеку (модуль).
Це робиться вже звичним для нас чином:
from Tkinter import *
Далі треба створити головне об'єкт головного вікна. Це робиться за допомогою класу Tk. Назвемо це вікно root.
root = Tk()
Наприкінці програми необхідно для нашого головного вікна root використати метод mainloop(), який говорить приблизно наступне: «ОК, я завершив роботу з настройки і тепер готовий до прийому та обробки подій».
root.mainloop()
Метод mainloop() забезпечує постійну роботу головного вікна і його об'єктів до моменту, коли воно буде закрито.

Остаточно найпростіша програма створення головного вікна виглядатиме так:
from Tkinter import *
root = Tk()
root.mainloop()

Збережемо її під іменем tk01.py. Результатом виконання цієї програми є
                                               
Нічого вам не нагадує? Наприклад, вікно, в якому «повзала» черепашка. І назва така ж: «tk». Її можна змінити, для цього треба використати метод title(), всередині якого вказати власний заголовок, не забуваючи, що це текст, який потрібно взяти у одинарні лапки. Програма tk02.py  виглядатиме наступним чином:
from Tkinter import *
root = Tk()
root.title('My favourite title')
root.mainloop()
                                                           
Але, якщо пам'ятаєте, черепашка рухалася по білому екрану, та й розміри його були іншими. За ці та деякі інші параметри відповідає метод config()
root.config(background='steelblue', relief=RAISED, borderwidth=10)
Розглянемо можливі параметри вікна. Почнемо зі знайомих
height, width - розміри вікна
background(bg) - колір фону вікна
Але є і інші параметри, наприклад,
relief - вид рамки вікна.
root.title('My favourite title')Ширину рамки можна також задати, для цього використовуємо borderwidth. По замовчуванню цей параметр дорівнює 0.
root.mainloop()

Наприклад,
from Tkinter import *
root=Tk()

root.config(width=600, height=400, background='steelblue', borderwidth=10, relief=RAISED)

root.title('My favourite title')
root.mainloop()
    
Параметри background та borderwidth  можна писати і скорочено як bg  та  bd відповідно. Наприклад, як у наступній програмі
from Tkinter import *
root = Tk()
root.config(bg="steelblue", relief=RAISED, bd=10)
root.title("My title")
root.mainloop()

Випадкові числа. Модуль random

Доброго дня! Сьогодня ми розглянемо більш детально можливості бібліотеки або ще називають модулья random. 
Досі ми писали програми, які роблять одне і те ж при кожному виконанні, тому говорять, що такі програми визначені.  Проте, в деяких програмах від комп'ютера вимагається непередбачуваність. Типовим прикладом є комп'ютерні ігри.
Змусити програму бути дійсно непередбачуваною завдання не таке просте, але є способи змусити її здаватися непередбачуваною. Одним з таких способів є генерування випадкових чисел і використання їх в програмі. В Python  є модуль random, який дозволяє генерувати випадкові числа. Вони не істинно випадкові, з математичної точки зору, але для наших цілей цілком підійдуть.
Отже, можна сказати, що випадковим є число, отримання якого є наперед непередбачуваним.
Модуль whrandom дозволяє працювати з такими числами.
Модуль whrandom включає функції:
1)
r = random()    повертає випадкове число r, таке, що 0.0<= r <1.0
Наприклад, одним зі значень, що видасть така команда, буде 0.620327001705.
2)
randint(a, b)
Повертає випадкове ціле число y з відрізку [a, b].
Наприклад, для того, щоб змінна у отримала значення випадкового числа з відрізку [1,100], треба написати команду
randint(1, 100)
3)
d = choice([1,4,6])
Обирає випадкове число d з чисел 1, 4 або 6.

Напишемо програму, яка випадково визначає колір відрізка.
Оскільки програма буде малювати лінію, то підключаємо модуль turtle
from turtle import *
Оскільки колір буде визначатися випадково, то підключаємо модуль whrandom
from whrandom import *
Компоненту кольору, що відповідає за червоні відтінки визначимо випадково
r=random()
Аналогічним чином зробимо для компонентів кольору, що відповідають за зелені та сині  відтінки
g=random()
b=random()
Тепер встановимо сам випадковий колір
color(r,g,b)
Далі напишемо команди, що малюють лінію довжиною 20 і товщиною 15
width(15)
forward(20)
Остаточно програма виглядатиме так:
from turtle import *
from whrandom import *
r=random()
g=random()
b=random()
color(r,g,b)
width(15)
forward(20)
Один з можливих результатів виконання цієї програми такий:
                                   
П'ять разів запустивши програму, ми отримаємо різнокольорову паличку (причому послідовність кольорів при кожному запуску буде своя):
                               
Але 5 кольорову паличку можна отримати і за один запуск програми, для цього у програмі  треба п'ять разів «обрати колір і намалювати лінію».

Напишемо програму, яка малює п'ятикольорову паличку, колір кожної смужки є випадковим числом.
Це можна зробити без циклу, повторивши п'ять разів  блок
r=random()
g=random()
b=random()
color(r,g,b)
width(15)
forward(20)
Запишемо, як буде виглядати програма з використанням циклу, що виконується п'ять разів:
from turtle import *
from whrandom import *
i=1
while i<=5:
    r=random()
    g=random()
    b=random()
    color(r,g,b)
    width(15)
    forward(20)
    i=i+1

Основи модуля turtle

Доброго дня! Сьогодня ми розглянемо більш детально можливості бібліотеки або ще називають модулья turtle. Спочатку дізнаємося, що таке модуль:

Модуль - це самостійна програма, що розширює функціонал вже існуючих програм.
Для того, щоб мати змогу створювати графічні об'єкти, до програми треба підключити модуль turtle (з англ. «черепашка»). Згадайте, черепаху з казки Олексія Миколайовича Толстого «Золотий ключик або Пригоди Буратіно». ЇЇ звали Тортила. Тепер зрозуміло, чому.
Підключення модуля turtle у Python відбувається наступним чином:
  • from turtle import *

Ця стрічка розширює графічний функціонал.
Функціонал - це перелік можливостей, що здатна виконувати програма.
Тепер ми можемо створювати різні картинки. Після запуску такого роду програм відкривається окреме вікно (з назвою tk) з вказівником, що має вигляд трикутника. Будемо називати його «черепашкою».
                               
Черепашка дивиться строго направо і готова виконувати команди. Малює вона ніби пером. За настройками напочатку виконання перо в неї опущене і при пересуванні буде залишати слід. Яким же чином черепашку можна пересувати?
Команди переміщення черепашки
forward(60) - проповзти вперед 60 кроків (пікселів).
left(50) - повернутися наліво на 50 градусів.
right(90) - повернутися направо на 90 градусів.
circle(30) - намалювати коло радіуса 30, яке повністю знаходиться зліва від положення  черепашки.
circle(-30) - намалювати коло радіуса 30, яке повністю знаходиться справа від положення  черепашки.
Виявляється крім цих команд, черепашка ще орієнтується у вікні як у системі координат. Напочатку виконання програми вона знаходиться у точці (0, 0) і готова перейти у будь-яку точку з заданими координатами. ЇЇ система координат нічим не відрізняється від звичної для нас:
                             
Ця система координат невидима. Команда переміщення черепашки у координати (50, 90) має вигляд
goto(50, 90)
При цьому напрямок, в якому дивиться черепашка не змінюється, ця команда не повертає черепашку.
Команди малювання
down() - опустити перо. Після цієї команди черепашка почне залишати слід при будь-якому своєму пересуванні.
up() - підняти перо. Після цієї команди при пересуванні черепашка не буде залишати слід, поки ми знову не дамо командуdown()
width(3) - встановити товщину сліду (пера) черепашки 3 пікселів.
сolor('red') - встановити червоний колір пера (сліду) черепашки. Колір має бути текстовим рядком з назвою кольору англійською мовою, наприклад, ‘red', ‘yellow', ‘green', ‘blue', ‘brown'. Без використання цієї команди черепашка малює чорним пером.
fill() - використовується для малювання зафарбованих областей. Починаючи малювати зафарбовану область, дайте команду fill(1), а закінчивши малювання області - fill(0).
Зверніть увагу! У версіях Python 2.6 та вище перед початком малювання області, що має заливатися, замість fill(1), треба писати команду begin_fill()а закінчивши малювання області, замість fill(0), треба писати команду end_fill()