Skip to content

4. (П2) Форма введення даних: картка товару

Передумови

Завдання

Створити файл 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 для решти). При натисканні:
    1. Вивести в консоль рядок за форматом Added: <name> (<sku>) x<quantity> = <total>.
    2. Очистити всі чотири поля вводу.
    3. Оновити total_field на "$0.00".
    4. Кнопка add_button знову стає неактивною (бо порожні поля не проходять валідацію).
  • reset_button («Reset») — очищає всі поля та total_field без будь-яких перевірок і без виводу в консоль.

Знайшли помилку чи бажаєте додати інформацію, щоб покращити курс? Створіть issue на GitHub