середу, 19 грудня 2018 р.

Клас Button


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

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

https://disted.edu.vn.ua/media/images/porkhun/inf_8/l59_64/030.gif

!     Якщо розміри кнопки не задані, то вони визначаються текстом на ній.
Ускладнимо завдання: Нехай при натисненні на першу кнопку видається повідомлення "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.
Результат запуску програми і п'яти натискувань кнопки:



https://disted.edu.vn.ua/media/images/porkhun/inf_8/l59_64/031.gif

Розгляньте ще один приклад, у якому при натисненні на першу кнопку виводиться "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()

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

https://disted.edu.vn.ua/media/images/porkhun/inf_8/l59_64/032.gif

Використаємо бібліотеку 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()

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

https://disted.edu.vn.ua/media/images/porkhun/inf_8/l59_64/033.gif


Завдання:
Створіть вікно з 4-ма кнопками однакового розміру. При натисненні на першу у вікні turtle черепашка малює червоний квадрат,  при натисненні на другу - черепашка малює зелений трикутник, третя кнопка дозволяє черепашці намалювати жовтий круг, четверта - пурпуровий шестикутник.



Створення кнопок очищення та закриття

Напишемо програму, яка створює вікно з полотном і кнопкою, при натисненні на яку з'являється довільний прямокутник довільного кольору.
Підключаємо бібліотеки Tkinter і whrandom.
from Tkinter import *
from whrandom import *
Зрозуміло, що треба написати функцію, що розташовує на полотні довільний прямокутник. Такий прямокутник ми вже створювали, лише треба виділити цю частину програми у вигляді функції.
def new_rectangle():
Визначимо координати несусідніх вершин прямокутника наступним чином:
         x1 = randint(0, 400)
         y1 = randint(0, 200)
         x2 = randint(0, 400)
         y2 = randint(0, 200)
Задамо колір. Його значення складемо у rgb-форматі. Відтінок червоного буде випадковим числом в межах від 0 до 255, тобто одним з 256 значень.
         red = randint(0, 255)
Аналогічно визначимо значення
         green = randint(0, 255)
         blue = randint(0, 255)
!      З трьох значень ми формуємо одне, використовуючи формат
          c = "#%02x%02x%02x" % (red, green, blue)
Колір, як і в HTML, береться у лапки, починається знаком дієза # і записується шестизначним шістнадцятковим числом.
Тут %x  означає подання числа у шістнадцятковій системі числення. Цифри 02 перед х визначають, що число має бути дворозрядним (двоцифровим). Якщо навіть якась компонента дорівнює, наприклад 11, то цей формат перетворить її на 0b,  а не просто у b.
Далі створюємо відповідний прямокутник
            canvas.create_rectangle(x1, y1, x2, y2, fill=c)
Тіло функції завершилось. Всі інші стрічки програми будуть йти без відступу.
Треба:
1. створити вікно розмірами 400х200, саме таких максимальних значень можуть набирати координати вершин прямокутника;
2. розмістити на ньому полотно для малювання під назвою canvas - саме таке ім'я застосовується у функції;
3. кнопку, при натискові на яку викликається написана функція new_rectangle.

Спробуйте самостійно дописати програму і перевірити її роботу.
Подамо результат виконання цієї програми після декількох натискувань кнопки.

https://disted.edu.vn.ua/media/images/porkhun/inf_8/l59_64/034.gif


Додамо до цієї програми частину коду, що створить ще дві кнопки: одна - очищує полотно, друга - закриває вікно.
Для очищення полотна напишемо функцію з іменем clear_all. У ній до полотна canvas застосуємо метод delete з параметром all:
def clear_all():
         canvas.delete("all")
Назвемо кнопку clear_button, на ній буде розміщено текст ‘Clean canvas!'при натискові буде викликатися функція clear_all.
Спробуйте самостійно написати створення такої кнопки, не забудьте застосувати метод, який розташує кнопку у вікні.

Є метод destroy, який ніби знищує об'єкт. Ми хочемо застосувати його для вікна root, отже у коді програми буде   
root.destroy()
Цей метод повинен виконатися при натисненні на кнопку. Нехай на кнопці буде написано "QUIT".

Спробуйте самостійно написати створення такої кнопки. Перевірте, чи працює ваша програма.

Немає коментарів:

Дописати коментар