4. (П2) Форма введення даних: картка товару¶
Передумови¶
- Прочитана Лекція 3 — Базові віджети: QWidget, QPushButton, QLabel, QLineEdit
- Успішно запущені приклади
LineEditDemo,ValidationDemoтаRegistrationFormз лекції
Завдання¶
Створити файл product_entry.py — застосунок для внесення товару на склад.
Клас ProductEntryForm¶
Клас, успадкований від QWidget, заголовок вікна Product Entry - <Ваше ім'я та прізвище> (транслітерацією, наприклад Product Entry - Ivan Petrenko), фіксований розмір 400×280 (setFixedSize).
Поля вводу¶
Розмістити через QFormLayout чотири поля QLineEdit:
| Поле | Підпис | Перевірка |
|---|---|---|
name_field |
Name: |
вручну (без валідатора), правило нижче |
sku_field |
SKU: |
вручну (без валідатора), правило нижче |
quantity_field |
Quantity: |
QIntValidator(0, 10000) — ціле число 0-10000 |
price_field |
Unit price: |
QDoubleValidator(0.01, 999999.99, 2) — дробове число, 2 знаки після крапки |
- Name валідний, якщо: довжина від 3 до 40 символів, і після видалення пробілів увесь рядок складається з латинських літер (
name.replace(" ", "").isalpha()). - SKU валідний, якщо: рядок містить рівно один символ
"-"; частина до нього — 2 або 3 великі латинські літери; частина після нього — рівно 4 цифри. Приклад коректного значення:AB-1234.
Кожне поле повинне мати setPlaceholderText() з прикладом коректного значення (наприклад, name_field — "e.g. Wireless Mouse", sku_field — "e.g. AB-1234").
Поле результату¶
Ще один QLineEdit з іменем total_field, тільки для читання (setReadOnly(True)), під формою. Показує вартість партії — quantity * price, відформатовану як "$123.45".
Перерахунок відбувається автоматично, без кнопки, кожного разу коли користувач змінює quantity_field або price_field (сигнал textEdited). Якщо хоч одне з цих двох полів зараз не проходить валідацію — total_field повинен показувати "$0.00".
Кнопки¶
add_button(«Add to warehouse») — активна лише тоді, колиis_form_valid()повертаєTrueдля всіх чотирьох полів (name і SKU — за ручним правилом вище, quantity і price — черезhasAcceptableInput()). Тобто стан кнопки треба перераховувати при зміні будь-якого з чотирьох полів (textChangedдляname_field/sku_field,textEditedдля решти). При натисканні:- Вивести в консоль рядок за форматом
Added: <name> (<sku>) x<quantity> = <total>. - Очистити всі чотири поля вводу.
- Оновити
total_fieldна"$0.00". - Кнопка
add_buttonзнову стає неактивною (бо порожні поля не проходять валідацію).
- Вивести в консоль рядок за форматом
reset_button(«Reset») — очищає всі поля таtotal_fieldбез будь-яких перевірок і без виводу в консоль.
Знайшли помилку чи бажаєте додати інформацію, щоб покращити курс? Створіть issue на GitHub