Книга: Создание настольных Python приложений с графическим интерфейсом пользователя
Назад: Виджеты и компоновки PyQt
Дальше: Tkinter

Advanced PyQt



Одна из продвинутых возможностей Qt – это поддержка пользовательских стилей.







Самый простой способ изменить внешний вид приложения – это установить глобальный стиль с помощью метода setStyle класса QApplication.

Доступные стили зависят от вашей платформы, но обычно это стили «Fusion», «Windows», «WindowsVista» и «Macintosh».







Если вам нравится глобальный стиль, но вы хотите изменить его цвета, вы можете использовать объект QPalette и метод setPalette.

Все виджеты в Qt содержат палитру и используют ее для рисования.

Это позволяет легко настраивать пользовательский интерфейс.

Здесь мы получаем объект палитры методом palette и модифицируем палитру.

Затем устанавливаем палитру для кнопки методом setPalette.







Также вы можете изменить внешний вид приложения с помощью таблиц стилей.

Это аналог CSS в Qt.

Здесь мы используем таблицы стилей, чтобы изменить фон и цвет надписи кнопки.

Терминология и синтаксические правила таблицы стилей Qt почти идентичны таблицам стилей CSS в HTML.







В строке поиска или ввода удобной опцией является автозаполнение текста.

И Qt имеет встроенную поддержку автозавершения текста с помощью класса QCompleter.

И QCompleter поддерживается виджетами QLineEdit и QComboBox.

Когда пользователь вводит текст, QCompleter предлагает возможные способы завершения ввода на основе списка слов, предоставленного моделью.

Модель может быть в простом случае просто списком слов.

Обычно вы создаете объект QCompleter, передавая модель в конструктор.

У виджетов, поддерживающих QCompleter, есть метод setCompleter, который позволяет указать средство завершения, которое будет использоваться для виджета.

QCompleter поддерживает ряд свойств для управления его поведением, включая, отсортирована ли модель, совпадения завершения должны быть основаны на том, чем введенная строка начинается, содержит или заканчивается, максимальное количество элементов, которые должны быть показаны для завершения, должно ли совпадение быть чувствительным к регистру.

Здесь модель представляет собой файл слов, который загружается как ресурс.

Сначала мы открываем файл слов, читаем его и создаем список строк.

Затем создается завершитель, который создается с передачей списка строк в качестве модели.

И виджеты QLineEdit и QComboBox связываются с завершителем.







Если в пользовательском интерфейсе слишком много элементов для одновременного отображения, или интерфейс логически нужно разделить, элементы можно расположить на разных страницах, помещенных под каждой вкладкой виджета QTabWidget.

QTabWidget предоставляет панель вкладок и область страницы.

Отображается страница под первой вкладкой, а остальные страницы скрываются.

И пользователь может просмотреть любую страницу, щелкнув нужную вкладку.

В этом примере содержимое формы сгруппировано по двум страницам.

И каждая группа виджетов отображается на отдельной вкладке.

Само окно верхнего уровня – это QTabWidget. И в него добавлены две вкладки.







Приложение с графическим интерфейсом пользователя может иметь несколько окон.

И один из способов одновременного отображения нескольких окон – создать их как независимые окна.

Это называется SDI (единый интерфейс документа).

Однако это требует больше ресурсов памяти, так как каждое окно может иметь свою собственную систему меню, панель инструментов и т. д.

Другой подход – это приложения MDI (Multiple Document Interface), которые потребляют меньше ресурсов памяти.

Здесь вспомогательные окна располагаются внутри основного контейнера относительно друг друга.

И виджет-контейнер называется QMdiArea.

Дочерние окна в этой области являются экземплярами класса QMdiSubWindow.

И можно установить любой QWidget как внутренний виджет объекта subWindow.

Подокна в области MDI могут быть расположены каскадом или мозаикой.

Здесь мы создаем QMdiArea и устанавливаем расположение подокон мозаикой.

Затем создаем подокна и устанавливаем в каждое подокно виджет с компоновкой.

И добавляем подокна в QMdiArea.

PySide





PySide – это библиотека Python и обертка Qt для создания кроссплатформенных графических пользовательских интерфейсов.







В отличие от PyQt, библиотека

PySide доступна для свободного использования как в открытых, так и в коммерческих проектах, поскольку лицензирована по лицензии LGPL.

PySide реализован в виде набора модулей Python.

Эти модули предоставляют инструменты для работы с графическим интерфейсом пользователя, мультимедиа, XML-документами, сетью и базами данных.







Для создания PySide приложения создадим в

PyCharm

проект.







Далее в окне терминала наберем команду установки библиотеки PySide.

pip install PySide6







После установки библиотеки, создадим в проекте файл питона и наберем в нем код.

Затем нажмем правой кнопкой мыши на файле и выберем Run.

В результате должно открыться окно PySide приложения.







Для приложения, использующего PySide, вы всегда должны начинать с импорта соответствующего класса из модуля QtWidgets.

После импорта вы создаете экземпляр QApplication.

Так как Qt может получать аргументы из командной строки, вы можете передать любой аргумент объекту QApplication.

После создания объекта приложения мы создаем метку QLabel.

После создания метки мы вызываем для нее метод show.

И наконец, мы вызываем метод exec, чтобы войти в основной цикл Qt и начать выполнение кода Qt.







Теперь, чем отличается PySide от PyQt?

Обе библиотеки являются обертками Python одной и той же среды графического интерфейса Qt.

PyQt – это более популярная библиотека, выпущенная раньше PySide.

И долгое время PyQt была единственной доступной библиотекой Python.

Однако в 2009 г. возник спор относительно того, под какой лицензией следует выпускать PyQt, между создателями PyQt и создателями Qt.

Поскольку группы не смогли прийти к соглашению, родилась новая Python библиотека PySide.

PySide была выпущена под лицензией LGPL, тогда как PyQt была выпущена под лицензией GPL.

Лицензия LGPL позволяет распространять код без необходимости делиться своим исходным кодом.

Это позволяет разрабатывать коммерческие приложения с помощью PySide.

Однако лицензия GPL не позволяет вам скрывать исходный код.

Короче говоря, если вы хотите разрабатывать и распространять коммерческие программы на PyQt, вам следует приобрести коммерческую лицензию на Qt.

Вы все равно можете продавать программное обеспечение за деньги (без коммерческой лицензии), но вам придется поделиться исходным кодом.

Это неприемлемо для большинства коммерческих программ.

Сравнение PyQt и PySide показывает, что обе библиотеки примерно равны.

За исключением нескольких различий в синтаксисе в том, как происходит импорт и запуск, синтаксис обеих библиотек абсолютно одинаков.

И они используют одни и те же виджеты – виджеты Qt.







Теперь, как создать исполняемую программу PySide.

Для этого мы используем PyInstaller, инструмент который позволяет заморозить приложение Python в автономном исполняемом файле.

Этот установщик поддерживает Linux, macOS, Windows и другие операционные системы, а также совместим со сторонними модулями Python, такими как PySide6.

Поэтому сначала установим PyInstaller с помощью pip.

И в коде используем функцию main для запуска приложения.







Далее в окне терминала наберем pyinstaller

main

.py.

Этот процесс создает два каталога: dist / и build /.

Исполняемый файл приложения и необходимые библиотеки помещаются в каталог dist.

Чтобы запустить приложение, перейдите в dist и запустите программу.

В Windows PyInstaller имеет возможность создать сборку из одного файла, то есть один EXE-файл, который содержит весь ваш код, библиотеки и файлы данных в одном исполняемом файле.

Чтобы указать однофайловую сборку, укажите в командной строке флаг –onefile.

Назад: Виджеты и компоновки PyQt
Дальше: Tkinter