Інформація про новину
  • Переглядів: 88
  • Дата: 4-10-2021, 08:24
4-10-2021, 08:24

29. Організація діалогу користувача з програмою в Python

Категорія: Інформатика





Попередня сторінка:  28. Обробники подій в Python
Наступна сторінка:   30. Функції користувача в Python

Більшість задач із програмування передбачають введення даних користувачем, після чого над ними виконуються деякі операції. Потім результат опрацювання виводиться у заданому вигляді (рис. 29.1).

Введення та виведення даних у консольному режимі

Ви вже користувалися функціями input() і print() для введення і виведення даних. Функція input() призначена для введення даних із клавіатури.

Згадаємо послідовність виконання вказівки введення даних на прикладі уведення цілого значення для змінної х. Розглянемо рис. 29.2:

1 — виводиться підказка щодо очікуваного значення;

2 — програма призупиняє роботу й очікує введення;

3 — уведений рядок перетворюється на ціле число;

4 — отримане значенння присвоюється змінній х.

Функція input() повертає об’єкт рядкового типу.

Щоб увести число, слід до результату введення застосовувати функцію int() або float(), яка за рядковим поданням числа створює об’єкт відповідного числового типу (ціле або дробове число). Якщо потрібно ввести декілька значень в одному рядку, можна скористатися функцією тар().

Введемо значення для змінних а, Ь, с одним оператором: a, b, с = map(float, input('a, b, с? ').split())

Проаналізуємо виконання цього оператора.

Функція split() перетворює рядок, який повернула функція input('a, b, с? '), на список, використовуючи пропуск як роздільник. Функція тар() застосовує функцію float() до кожного елемента отриманого списку й повертає послідовність дробових чисел. Функція print() потрібна, щоб вивести текст у вікно консолі: print(<cni/1COK виведення>)

У списку виведення можуть бути константи, змінні, вирази.

Обчислимо та виведемо значення виразу:

У програмі з графічним інтерфейсом ми можемо також використовувати функції іnput() і print(). Введення та виведення відбуватиметься в панелі виведення головного вікна PyCharm.

Компоненти Tkinter для введення та виведення даних

Результати обчислень, повідомлення програми про стан об’єктів тощо можна вивести за допомогою написів — віджетів класу Label. Для введення даних зручно використовувати текстові поля — відомі вам віджети класу Entry.

Створимо об’єкт entry! класу Entry шириною 14 знакомісць зі шрифтом АгіаІ розміром 18:

Згадаємо основні методи Entry на прикладі об’єкта entryl:

Метод

Призначення

Приклад виклику

Отримати значення, що міститься в текстовому полі

Змінній а цілого типу присвоїти значення, що міститься в полі entryl: а = int(entry1.get())

Вивести в текстове поле рядок, починаючи зі зна-комісця з номером index

Вивести в поле entryl значення змінної х: entryl .insert(0, х)

Вилучити символи, починаючи зі знакомісця з номером first до знакомісця з номером last (нумерація символів з 0)

Очистити текстове поле перед виведенням. Щоб вилучити весь текст, як другий параметр потрібно указати END: entryl .delete(0, END)

Метод grid()

Вам вже відомі методи раск() і place(), призначені для розміщування віджетів на формі. Якщо розташування віджетів нагадує таблицю, то швидко і правильно розмістити їх допоможе метод grid(). Тепер пронумеруємо уявні рядки і стовпці (рис. 29.3).

Наведене розташування віджетів забезпечить фрагмент коду:

Атрибути методу grid() мають такий зміст:

• row, column — номери рядка і стовпця відповідно;

• padx, pady — ширина (у пікселях) вільного місця навколо від-жета по горизонталі і по вертикалі відповідно;

• sticky — напрямок «прилипання» віджета (можливі значення відповідають сторонам світу: N, S, W, Е, NW, NE, SW, SE).

• columnspan, rowspan — об’єднання декількох клітинок у рядку або стовпці відповідно.

Увести число до поля об’єкта entryl і вивести квадрат числа до поля об’єкта entry2. Зчитування значення з текстового поля, піднесення до квадрата і виведення результату в поле entry2 виконує функція kvadrat() — обробник події Натискання клавіші Enter:

Якщо для полів entryl і entry2 виклик методу grid записати в одному рядку з викликом конструктора, то у функції kvadrat виникне помилка. Адже об’єкти entry! і entry2 не будуть екземплярами класу Label.

Діалогові вікна

Щоб згенерувати вікно повідомлення з кнопкою ОК, слід імпортувати модуль messagebox: from tkinter import messagebox. Для об’єкта messagebox можна викликати методи showerror(), showinfo(), showwarning(). Синтаксис виклику методу:

Опишемо функцію button_click(), яка зчитує значення змінних із текстових полів віджетів entryl, entry2 класу Entry.

Функція генерує вікно з повідомленням про результат обчислення частки від ділення а/b (рис. 29.4):

Питання для самоперевірки

1. Поясніть, чому виникає помилка при спробі виконання коду:

Як її виправити?

2. Збережіть ім’я користувача у змінній name. Виведіть у консоль рядок, сформований зі слова Привіт і значення змінної name.

3. Поясніть, як створити об’єкт класу Entry.

4. Як зчитати рядки з поля віджета Entry за натисканням Enter?

5. Поясніть, як використовується метод grid().

Вправа 29

Написати програму для розв’язування задачі.

Задача. Створити програму Збережи дерево (рис. 29.5), яка за масою макулатури визначає, скільки дерев і яку площу лісу її переробка допоможе зберегти від знищення. Відомо, що переробка 60 кг макулатури зберігає 1 дерево і 0,0005 га лісу.

1) Завантажте середовище PyCharm.

Створіть Python file з назвою Вправа 29. Створіть вікно програми із заголовком Збережи дерево. Завершіть програму оператором root.mainloop().

2) Створіть віджети класу Label і entryl класу Entry для введення даних:

3) Розмістіть у вікні віджет Ь1 класу Button:

4) Додайте решту написів та поля entryl, entry2 згідно з рис. 29.5.

5) Опишіть функцію b1_dick() для обчислення кількості збережених дерев і площі врятованого лісу:

6) Запустіть програму для різних початкових значень. Проаналізуйте її роботу.

Комп'ютерне тестування

Виконайте тестове завдання 29 із автоматичною

перевіркою результату.

Практична робота 12

Введення і виведення даних

Завдання: скласти програму Касир, при реалізації якої комп’ютер буде виконувати такі дії:

а) повідомляти вартість одиниці товару (рис. 1);

б) запитувати про кількість товару, що купують;

в) обчислювати вартість покупки;

г) повідомляти вартість покупки; ґ) запитувати, скільки грошей дає

покупець;

д) повідомляти решту.

Обладнання: комп’ютер із середовищем програмування PyCharm. Хід роботи

Під час роботи з комп’ютером дотримуйтеся правил безпеки.

1. Завантажте середовище PyCharm. Створіть Python file із назвою Практична робота 12. Завантажте модулі tkinter, messagebox.

2. Створіть вікно програми із заголовком Діалог з касиром.

3. Завершіть програму оператором root.mainloop().

4. Створіть об’єкт Iab1 класу Label для виведення назви товару та вартості одиниці товару;

Iab1 = Label(root, text = 'Яблука "Чемпіон" 1 кг- 15 грн.', fg = 'red') lab1.grid(row = 0, column = 0, columnspan = 2)

5. Додайте ще два написи відповідно до рис. 2.

6. Додайте віджети entryl, entry2 класу Entry відповідно до рис. 2.

7. Розмістіть у вікні віджет btn класу Button:

8. Організуйте діалог із касиром за описом:

1) у поля вводяться дані для розрахунку;

2) обчислюється вартість товару і різниця між сумою грошей і вартістю товару;

3) у діалоговому вікні виводиться повідомлення про решту грошей. Для реалізації такого діалогу опишіть функцію btn_click():

9. Запустіть програму, проаналізуйте її роботу в неприпустимих ситуаціях (наприклад, сума менша за вартість покупки).

Додайте навколо віджетів вільний простір.

10. Додайте до опису функції btn_click() перевірку значення с:

11. Змініть виведення повідомлення про решту так, щоб виводилась сума у гривнях і копійках (рис. 3).

12. Помістіть у папку з файлом Касир графічний файл із зображенням яблук. Завантажте зображення до змінної myjmage за допомогою функції

Додайте до вікна віджет ІаЬ4 класу Label, надавши атрибуту image значення змінної myjmage:

За допомогою методу grid() помістіть малюнок праворуч або нижче від решти віджетів.

Зробіть висновок: як організувати діалог користувача з програмою з використанням модуля tkinter.

 

Це матеріал з підручника Інформатика 8 клас Бондаренко (2021)

 



Попередня сторінка:  28. Обробники подій в Python
Наступна сторінка:   30. Функції користувача в Python



^