Тема: введення і виведення даних, вікна повідомлень, їх використання, передавання значень між вікном повідомлення і змінними мовою Python.
Мета:
Обладнання: комп’ютери зі встановленими ОС та середовищем програмування мови Python та бібліотекою tkinter.
Структура уроку
Хід уроку
1. Організаційний момент
Привітання з учнями. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання. Оголошення теми й мети уроку.
2. Актуалізація опорних знань
3. Вивчення нового матеріалу
Введення даних зі стандартного пристрою (клавіатури) здійснюють з допомогою функції input(). Наприклад, у результаті виконання такої вказівки:
a=input()
буде зчитано рядок з клавіатури і його значення буде надано змінній змінній a. Інакше кажучи, щойно інтерпретатор отримує цю вказівку, він:
Складніший вигляд вказівки введення може бути, наприклад, таким:
a=input('Ці символи буде виведено перед зчитуванням ')
При цьому на екран буде виведено таке повідомлення:
Ці символи буде виведено перед зчитуванням
Далі вказівку буде виконано як у попередньому прикладі. Замість одинарних лапок можна вжити подвійні.
Функція input() повертає текстовий рядок. Для зчитування цілого числа потрібно виконати перетворення типу за допомогою функції int():
a=input()
a=int(a)
Для перетворення у дійсне число замість int() потрібно використати функцію float(). Можна об'єднати зчитування рядка й перетворення типу:
a=int(input())
Таким чином можна зчитати в одному рядку значення лише однієї змінної. Для зчитування кількох значень з одного рядка використовують метод split(), що повертає список рядків, які вийдуть, якщо вихідний рядок розрізати на частини по пропускам — див. такий приклад при введенні рядка '1 2 3':
s = input() # s == '1 2 3' a = s.split() # a == ['1', '2', '3']
Зверніть увагу, що список а, отриманий таким чином, складатися з рядків, а не з чисел. Метод split() має необов'язковий параметр, який визначає, яку послідовність символів буде використано як розділювач між елементами списку. Наприклад, виклик методу split('.') поверне список, отриманий розрізанням вихідного рядка по символу крапки '.'
Виведення даних на стандартний пристрій (монітор) здійснюють з допомогою функції print(). Наприклад, таким чином:
print(2+2**2)
За допомогою цієї функції можна виводити значення не одного, а кількох виразів, переліченими через кому. Наприклад, у резутаті виконання такого коду:
a=1
b=2
print(a,'+',b,'=',a+b)
буде виведено таке: 1 + 2 = 3
У прикладі значення розділено одним пропуском. Щоб змінити формат виведення, потрібно функції print() передати спеціальний параметр sep, який містить рядок-розділювач. Як усталено, значення sep — рядок з одним пробілом. Наприклад, щоб розділити значення a, b крапкою з комою, потрібно написати так:
print(a,b,sep=';')
Для того, щоб зовсім прибрати роздільник при виведенні, потрібно параметру sep значення порожнього рядка.
Для того, щоб виводити по одному значенню у рядку, потрібно параметру sep надати значення ознаки кінця рядка '\n'.
Іншим корисним параметром функції print() є параметр end, який вказує на те, що виводити після виведення всіх аргументів функції print(). Як усталено параметр end дорівнює ознаці кінця рядка '\n'. У цьому випадку наступне виведення буде здійснено з нового рядка. Значення цього параметра також можна змінити.
Робота з файлами
Для роботи з файлами потрібно створити об’єкт класу file і скористатися методами read, readline або write для читання або запису. Можливість читати з файлу або записувати в нього дані залежить від режиму, який вказано при відкритті файлу (див. далі). Після завершення роботи з файлом потрібно викликати для нього метод close.
Завдання 1. Проаналізувати код та його дію:
poem = '''\ Programming is fun When the work is done if you wanna make your work also fun: use Python! ''' f = open('output.txt','w') # 'w' - файл відкрити для запису f.write(poem) # записати текст у файл f.close() # закрити файл f = open('output.txt') # якщо режим не вказано, файл відкрити для читання while True: line = f.readline() # зчитати рядок if len(line) == 0: # якщо рядок порожній, break # вийти з циклу print(line, end='') # вивести зчитаний рядок f.close() # закрити файл
Як це працює? Спершу потрібно відкрити файл з допомогою функції open. Першим аргументом цієї функції слугує назва файлу (можна вказати повний шлях), наступний аргумент — тип доступу (режим), перший символ якого такий:
'r' — читання;
'w' — запис;
'a' — додавання.
Також можна вказати з яким типом файлу ми маємо справу: бінарний файл чи текстовий, дописавши у тип доступу відповідно символ 'b' або 't'. Насправді існує більше режимів, про які можна дізнатися, використавши довідку або ресурси Інтернету. Як усталено, функція open відкриває файл для читання і він є текстовим, якщо режим не вказано.
В цьому прикладі відкрито файл для запису як текстовий і далі використано метод write об’єкту типу file для запису, після чого закрито файл. Далі файл було відкрито знову, але цього разу для читання. В циклі прочитано кожен рядок файлу методом readline. Цей метод повертає рядок включно з ознакою кінця рядка в кінці. Коли метод повертає порожній рядок, відбувається вихід з циклу (break).
Як усталено, функція print() автоматично виводить на екран також і ознаку кінця рядка. Рядки, прочитані з файлу, вже містять такий символ, то свтановлено end=''. В кінці роботи потрібно закрили файл.
Модуль Pickle дозволяє зберегти будь-який об’єкт Python у файл і потім отримати його назад.
Завдання 2. Проаналізувати код та його дію:
import pickle # замова роботи з модулем name = 'shoplist.data' # назва файлу list = ['яблуко', 'груша', 'слива'] # список покупок data = open(name,'wb') # відкрити файл на запис pickle.dump(list,data) # скинути об’єкт у файл data.close() # закрити (звільнити) файл del list # звільнити пам'ять data = open(name, 'rb') # відкрити файл на читання list = pickle.load(data) # завантажити об’єкт з файлу print(list) # вивести об’єкт на монітор data.close() # закрити (звільнити) файл
Вікна повідомлень, їх використання.
Передавання значень між вікном півдомлення і змінними
Графічний інтерфейс користувача (англійською GUI, Graphical user interface) — тип інтерфейсу, який дозволяє користувачам взаємодіяти з електронними пристроями через графічні зображення та візуальні вказівки, на відміну від текстових інтерфейсів, заснованих на використанні тексту, текстовому наборі вказівок і текстовій навігації.
При створенні програм з графічним інтерфейсом користувача важливими є не лише алгоритми опрацювання даних, але й розробка зручного для користувача інтерфейсу програми. Потрібно передбачити взаємодію з програмою за допомогою різних кнопок, меню, піктограм, вводення даних у спеціальні поля, списки для вибору значеньах тощо. Відповідні зображення інколи називають віджетами (widget — англійською штучка). Для мови програмування Python такі віджети включено у спеціальну бібліотеку tkinter. Є довідникова література російською (1, 2) та англійською мовами. Потрібно імпортувати бібліотеку у програму, щоб використувати її складові, створюючи графічний інтерфейс і вікна повідомлень.
Етапи створення програми з графічним інтерфейсом користувача
Імпорт модуля tkinter можна здійснити одним з двох способів:
import tkinter
або
from tkinter import *
Надалі ми будемо користуватися лише другим способом, бо це дає можливість не вказувати щоразу назву модуля при зверненні до об'єктів, які він містить. У версії Python 3 назву модуля пишуть з малої літери (tkinter), хоч у попередніх версіях використовували велику (Tkinter).
Створення головного вікна. В сучасних операційних системах будь-яку клієнтську програму подано вікном. Його можна назвати головним, бо в ньому розташовують всі інші віджети. Об'єкт вікна верхнього рівня створюють при зверненні до класу Tk модуля tkinter. Змінну, пов'язану з об'єктом-вікном, зазвичай називають root (корінь), хоча обмежень на назву немає. Другий рядок коду має такий вигляд:
root = Tk()
Створення віджетів розглянемо на прикладі створення кнопки. Кнопку створюють при зверненні до класу Button модуля tkinter. Кнопку зв'язують з якою-небудь змінною. У класі Button (як і всіх інших класах, за винятком Tk) є властивість (обов'язковий параметр) — об'єкт, якому кнопка належить. Поки є лише одне вікно (root), його назву й буде передано при створенні об'єкта-кнопки:
but = Button(root)
Визначення властивостей віджетів. У кнопки багато властивостей: розмір, колір тла, напис тощо. Встановити властивість text (текст) можна таким чином:
but["text"] = "Друк"
Визначення подій і їх обробників. Припустимо, що завдання кнопки вивести певне повідомлення у потік виведення, використовуючи функцію print, після натискання на неї лівою кнопкою миші. Дії (алгоритм), які відбуваються при тій чи іншій події, можуть бути досить складними. Тому часто їх оформлюють у вигляді функції, а потім викликають при потребі. Нехай у нас друк на екран буде оформлений у вигляді функції printer:
def printer(event): print ("Кнопку натиснули!")
Функції бажано розташувати на початку коду. Параметр event позначає будь-яку подію. Подію натискання лівою кнопкою миші записують так: <Button-1>. Потрібно зв'язати цю подію з обробником (функцією printer). Для зв'язку призначено метод bind. Синтаксис зв'язування з обробником події має такий вигляд:
but.bind("<Button-1>",printer)
Розміщення віджетів не може бути хаотичним. Інтерфейс потрібно продумати до дрібниць і підпорядкувати певним стандартам. Кнопку потрібно розташувати у вікні. Найпростіший спосіб — це використання методу pack:
but.pack()
Якщо не вставити цей рядок у код, кнопку у вікні не буде відображено, незважаючи на те, що про неї згадано у програмі.
Відображення головного вікна здійснюють за допомогою спеціального методу mainloop:
root.mainloop()
Цей рядок має бути останнім у коді!
У підсумку, код програми може виглядати таким чином:
from tkinter import * def printer(event): print ("Кнопку натиснули!") root = Tk() but = Button(root) but["text"] = "Друк" but.bind("<Button-1>",printer) but.pack() root.mainloop()
У результаті виконання цього коду буде створено таке вікно:
Після трикратного натискання кнопки буде отримано такий результат:
Властивості кнопки Button
Приклад використання:
but=Button(root,text='Друк',width=25,height=10,bg='blue',fg='yellow',font='arial 14')
Напис Label призначено для відображення надпису без можливості редагування користувачем. Має ті самі властивості, що й перелічено для кнопки Button.
Поле Entry призначено для введення одного рядка тексту. Має такі властивості:
Приклади використання:
e.delete(0,END) # очисти поле e e.insert(0,"Текст у полі") # внести текст у поле e e.get() # результат зчитування рядка з поля e
4. Закріплення вивченого матеріалу
Завдання 3. Використовуючи модуль tkinter, скласти програму створення об'єкта головного вікна, що міститиме:
Після натискання кнопки «Обчислити» програма має:
При послідовному багатократному натисканні кнопки «Обчислити» у полі буде відображено значення членів послідовності чисел, у якій кожне наступне є сумою попереднього і числа з файлу input.txt.
Після натискання кнопки «Очистити» програма має повернути вигляд вікна до попереднього стану, очистивши поле для введення. Порівняти створену програму з демонстраційним розв'язанням.
5. Інструктаж з ТБ
6. Вироблення практичних навичок
Завдання 4. Ввести створену програму, пересвідчитися у правильності роботи програми, у разі потреби внести зміни.
7. Підведення підсумків уроку.
Виставлення оцінок.
8. Домашня робота
Вивчити матеріал уроку. Створити об'єкт головного вікна — форму для анкети з трьома написами-заголовками і трьома полями для введення і кнопкою, натискання на яку призводить до дописування введених значень, розділених крапкою з комою, у файл input.txt.
Текст упорядкувала Дарія Володимирівна Іванова, вчитель навчально-виховного комплексу «Школа І ступеня — гімназія «Оболонь» Оболонського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 16.01.2017 по 20.01.2017.