Создание настольных Python приложений с графическим интерфейсом пользователя - Тимур Машнин
Каждый раз, когда значение ползунка изменяется, вызывается функция show и показывается значение слайдера.
Виджет PyQt5 QDateEdit — это интерактивный и визуальный способ ввести дату в приложении.
Здесь вы можете редактировать дату вручную или с помощью встроенных клавиш со стрелками.
И здесь вам не нужно назначать минимальное или максимальное значение, PyQt сам назначит значения по умолчанию.
Но вы можете сделать это с помощью методов setMinimumDate и setMaximumDate.
Чтобы получить введенную дату, вы можете использовать метод date и метод toPyDate, чтобы распечатать дату в более читаемом формате.
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 была выпущена