У цій статті ми розглянемо ще одну бібліотеку для створення GUI-додатків в Python - wxPython і звернемося до двох суміжних питань: роботі з 2D графікою за допомогою бібліотеки PyGame і автоматизації GUI-додатки за допомогою сценаріїв PyZenity.
Проект wxPython походить від відомого проекту wxWidgets. В основі wxWidgets лежить GUI-бібліотека, реалізована на мові C ++, також проект містить набір класів C ++ з багатими можливостями (високорівневі структури даних і ін.). А wxPython в свою чергу пропонує "обгортки" для класів wxWidgets пов'язаних з GUI.
Примітка. Графічна система wxWidgets декларує тільки мульти-платформний API верхнього рівня, а для безпосереднього відображення використовується низькорівневий (native) API для конкретної платформи. Основне завдання бібліотеки - це забезпечити працездатність додатків, написаних з її допомогою, на різних операційних системах. Тому паралельно існують кілька різних реалізацій wxWidgets: wxGTK, wxMSW, wxMac і т.д. WxWidgets - це більш високорівнева абстракція, ніж графічні базиси, над якими вона надбудовується.
Бібліотека wxWidgets не так популярна в Linux, як GTK + або Ot, тому все необхідне для використання wxPython потрібно встановити окремо:
Досить буде встановити пакет python-wxgtk2. і всі інші пакети він інсталює самостійно:
У лістингу 1 показано просте додаток, що використовує wxPython (файл bare.py з архіву python_gui.tgz в розділі "Матеріали для скачування"):
Лістинг 1. Приклад wxPython-додатки
У цьому прикладі створюється порожнє вікно GUI-додатки, яке під контролем віконного менеджера Linux може переміщатися, змінювати розмір, згортатися і розгортатися на весь екран:
У лістингу 2 показано ще одне wxPython-додаток, що використовує можливості API wxPython в термінології класів Python. Ця програма дозволяє з Python-коду перенаправити потоки SYSOUT і SYSERR в створене вікно (приклади для wxPython можна знайти у відповідному підручнику в розділі "Ресурси"):
Лістинг 2. Перенаправлення потоків виведення (файл sysout.py)
Запустимо додаток і подивимося, які повідомлення print будуть відправлені у вікно програми, а які - в термінал запуску:
На малюнку 2 представлений приклад роботи програми:
Висловлюються думки, що реалізація wxPython могла б стати стандартною GUI-бібліотекою для Python, якби ця позиція вже не була зайнята Tkinter. Проте WxPython використовується в багатьох відкритих проектах.
На відміну від раніше розглянутих бібліотек, Pygame - це інструмент для реалізації різноманітних ігрових стратегій всередині графічних вікон. Тому, крім інструментів для відображення GUI, він містить і деякі засоби для малювання в цих вікнах, створення анімації і обмежені можливості для відтворення аудіо-потоків.
Цей пакет не належить до стандартної бібліотеки модулів Python, тому його потрібно встановити окремо.
Примітка. Через зазначених вище розширень функціональності, інсталяція даного пакета приведе до подальшій установці великого числа залежних пакетів: pulseaudio-esound-compat. oss-compat. libsmpeg і т.д. Але це стандартна поведінка для всіх GUI-інструментів, так як вони використовують багато додаткових пакетів (головним чином, бібліотек).
У лістингу 3 представлений найпростіший приклад використання PyGame.
Лістинг 3. Приклад PyGame-додатки (файл hwpg.py)
У лістингу 4 показаний приклад малювання в поле вікна, також малювати можна не тільки в самому вікні, а й в різноманітних віконних фреймах.
Лістинг 4. Приклад PyGame-додатки (файл drawing.py)
На малюнку 4 показаний результат запуску програми:
Також PyGame володіє обмеженою функціональністю для роботи з деякими поширеними аудіо-форматами (запуск, зупинка, фонове відтворення). Наприклад, ось як можна відтворити .wav-файл:
У простих сценаріях подібна функціональність може виявитися затребуваною. Але в більш складних випадках для подібних завдань варто використовувати спеціалізовані вільні проекти, наприклад, SoX, Ogg, Vorbis, Speex, FLAC і їх кодеки.
Автоматизація GUI-додатків за допомогою PyZenity
Іноді додатку потрібно найпростіший GUI-інтерфейс, наприклад, набір деяких діалогових вікон, в яких запитується ім'я користувача і пароль або вибирається ім'я файлу. У подібних сценаріях можливості описаних раніше бібліотек є надлишковими. Але спеціально для задач подібного роду існує консольна утиліта Zenity, призначена для формування GUI-інтерфейсів з мови командного інтерпретатора. Звичайно ж, до неї існує інтерфейс з Python, що реалізується в проекті PyZenity.
Цей же архів можна використовувати і для Python 3:
Після установки ми зможемо створити просте застосування (див. Файл enter.py в архіві python_gui.tgz):
І запустити його:
В результаті отримавши таке вікно:
Також можна підготувати сценарій для вибору одного значення зі списку можливих (див. Файл select.py в архіві python_gui.tgz).
Результат запуску цього додатка показаний на малюнку 6:
висновок
Але незалежно від використовуваного інструменту, логіка і структура таких додатків будуть будуватися навколо обробки подій користувальницького інтерфейсу. А різні інструменти будуть володіти специфічними можливостями, наприклад підтримкою 2D і 3D-графіки, анімації або мультимедіа форматів, які і допоможуть вибрати інструмент, що підходить для вирішення конкретного завдання.