Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Учебное пособие по PyQt5 с примерами:разработка графического интерфейса с использованием PyQt в Python

Что такое PyQt?

PyQt представляет собой привязку к python инструментария виджетов Qt с открытым исходным кодом, который также функционирует как кроссплатформенная среда разработки приложений. Qt — это популярная платформа C++ для написания приложений с графическим интерфейсом для всех основных настольных, мобильных и встраиваемых платформ (поддерживает Linux, Windows, MacOS, Android, iOS, Raspberry Pi и др.).

PyQt — это бесплатное программное обеспечение, разработанное и поддерживаемое английской компанией Riverbank Computing, а Qt — финской фирмой The Qt Company.

Из этого руководства по PyQt5 вы узнаете:

Возможности PyQT

Вот важные особенности PyQt:

Изучите PyQt, который состоит из более чем шестисот классов, охватывающих ряд функций, таких как

Эти функции можно комбинировать для создания расширенных пользовательских интерфейсов, а также автономных приложений. Многие крупные компании во всех отраслях используют Qt. Некоторые примеры:LG, Mercedes, AMD, Panasonic, Harman и т. д.

Версии PyQt

PyQt доступен в двух версиях:PyQt4 и PyQt5. PyQt4 предоставляет связующий код для привязки версий 4.x и 5.x платформы Qt, в то время как PyQt5 обеспечивает привязку только для версий 5.x. В результате PyQt5 не имеет обратной совместимости с устаревшими модулями старой версии. В этом руководстве по Qt GUI PyQt5 будет использоваться для демонстрации примеров. Помимо этих двух версий,

Компания Riverbank Computing также предоставляет PyQt3D — привязку Python к платформе Qt3D. Qt3D — это платформа приложений, используемая для создания систем моделирования в реальном времени с 2D- и 3D-рендерингом.

Как установить PyQt5

В этом руководстве по PyQt5 мы увидим два способа установки PyQt:

Qt (произносится мило) — сложная система, а кодовая база PyQt содержит под капотом скомпилированный код C++ и Python. В результате это сложный процесс сборки и установки из исходного кода по сравнению с другими библиотеками Python. Однако вы можете легко установить PyQt5 с помощью колес.

Установка с колесами

Wheels — это новый стандартный формат упаковки и распространения Python. Проще говоря, колесо — это ZIP-архив со специальным именем и расширением .whl. расширение файла. Wheels можно установить с помощью pip (менеджер пакетов Python), который по умолчанию включен в последние версии Python.

Итак, если у вас установлен Python 3.4 или более поздней версии, у вас уже есть pip. Однако, если вы используете более старую версию Python, вы должны загрузить и установить pip, прежде чем двигаться дальше. Вы можете найти инструкции по этой ссылке:https://pypi.org/project/pip/.

Чтобы установить PyQt5,

Шаг 1) Откройте командную строку.
Откройте командную строку или PowerShell на компьютере с Windows.

Шаг 2) Введите следующее.

09

Шаг 3) Установка прошла успешно.
На этом этапе этого руководства по PyQt5 будет загружен пакет PyQt5 whl (около 50 МБ) и установлен в вашей системе.

Кроме того, вы также можете загрузить двоичный файл Windows для версии Python, установленной на вашем компьютере.

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

Основные концепции и программы PyQt

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

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

Запустите IDLE на Python и введите следующее:

Программа 1

18

Сохраните его как app.py (имя не имеет значения) и нажмите F5, чтобы запустить программу. Кроме того, просто дважды щелкните сохраненный файл, чтобы запустить приложение. Если вы все сделали правильно, откроется новое окно с заголовком Guru99, как показано ниже.

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

26

Этот оператор импортирует все модули, необходимые для создания графического интерфейса пользователя, в текущее пространство имен. Модуль QtWidgets содержит все основные виджеты, которые вы будете использовать в этом руководстве по Python Qt.

30

Здесь вы создаете объект класса QApplication. Этот шаг необходим для PyQt5; каждое приложение пользовательского интерфейса должно создавать экземпляр QApplication как своего рода точку входа в приложение. Если вы его не создадите, будут показаны ошибки.

sys.argv — это список параметров командной строки, которые вы можете передать приложению при его запуске через оболочку или при автоматизации интерфейса.

В этом примере PyQt5 вы не передавали никаких аргументов в QApplications. Поэтому вы также можете заменить его приведенным ниже кодом и даже не импортировать модуль sys.

48
56

Далее мы делаем объект класса QWidget. QWidget — это базовый класс всех объектов пользовательского интерфейса в Qt, и практически все, что вы видите в приложении, — это виджеты. Это включает в себя диалоги, тексты, кнопки, панели и так далее. Функция, позволяющая создавать сложные пользовательские интерфейсы, заключается в том, что виджеты могут быть вложенными, т. е. вы можете иметь виджет внутри виджета, который находится внутри еще одного виджета. Вы увидите это в действии в следующем разделе.

69

Метод resize класса QWidget позволяет вам устанавливать размеры любого виджета. В данном случае вы изменили размер окна до 300 на 300 пикселей.

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

71

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

87

show() просто отображает виджет на экране монитора.

97

Метод app.exec_() запускает цикл событий Qt/C++. Как вы знаете, PyQt в основном написан на C++ и использует механизм цикла обработки событий для реализации параллельного выполнения. app.exec_() передает управление Qt, который выходит из приложения только тогда, когда пользователь закрывает его из графического интерфейса. Вот почему ctrl+c не выйдет из приложения, как в других программах на Python. Поскольку Qt контролирует приложение, события python не обрабатываются, если мы не настроим их внутри приложения. Также обратите внимание, что в имени метода exec есть символ подчеркивания; это потому, что exec() уже было ключевым словом в python, а символ подчеркивания разрешает конфликт имен.

За пустыми окнами

В предыдущем разделе вы видели, как создать базовый виджет в Qt. Пришло время сделать несколько более сложных интерфейсов, с которыми пользователи смогут по-настоящему взаимодействовать. Снова запустите IDLE и напишите следующее.

105 

Сохраните файл как appone.py или как вам угодно и нажмите F5, чтобы запустить программу. Если вы не допустили ошибок, IDLE откроет новое окно с текстом и кнопкой, как показано ниже.

  1. После того как вы нажмете кнопку в первом окне, откроется новое окно сообщения с текстом, который вы написали.
  2. Теперь вы можете нажать кнопку "Скрыть подробности/Показать подробности", чтобы переключить видимость дополнительного текста.

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

Теперь, когда это работает, давайте взглянем на дополнительный код, который вы добавили в предыдущий пример PyQt5.

112

Это импортирует еще несколько виджетов, которые вы использовали в примерах PyQt5, а именно QLabel, QPushButton и QMessageBox.

127

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

Метод диалога вызывается из основного блока программы при нажатии кнопки в конкретном виджете (в данном случае это кнопка PushButton). Событие щелчка, вызванное этой кнопкой, вызывает выполнение этой функции. Такая функция в Qt называется слотом, и вы узнаете больше о сигналах. и слоты в следующих абзацах.

132

Это основной раздел приложения, и, как и в предыдущем примере, вы начинаете с создания экземпляра QApplication, за которым следует простой виджет, т. е. экземпляр QWidget.

144

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

Здесь важно отметить, что когда вы создаете объекты label и btn, вы передаете объект окна (w) конструкторам QLabel и QPushButton. Вот как работает вложение в PyQt5. Чтобы создать виджет внутри другого виджета, вы передаете ссылку на родительский виджет конструктору дочернего элемента.

157

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

Точно так же кнопка будет размещена на расстоянии 110 пикселей слева и 150 пикселей от верхней части окна. Этот пример является грубым способом создания макетов и обычно не используется в производстве; он включен сюда только в учебных целях. Qt поддерживает различные макеты, которые вы подробно увидите в следующих разделах этого руководства по PyQt.

163

Наконец, это пример сигналов и слотов в Qt. В приложениях с графическим интерфейсом функции выполняются на основе действий, выполняемых пользователем, таких как наведение курсора на элемент или нажатие кнопки. Эти действия называются событиями. . Напомним, что метод app.exec_() передает управление Qt event- петля. Именно для этого существует цикл обработки событий:прослушивание событий и выполнение ответных действий.

Всякий раз, когда происходит событие, например, когда пользователь нажимает кнопку, соответствующий виджет Qt генерирует сигнал. . Эти сигналы могут быть связаны с функциями Python (например, функцией диалога в этом примере), чтобы функция выполнялась при срабатывании сигнала. Эти функции называются слоты. на языке Qt.

Следовательно, основной синтаксис для запуска функции слота в ответ на сигнал от события выглядит следующим образом

177

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

Теперь, когда вы знаете, как вкладывать виджеты и реализовывать взаимодействие с помощью сигналов и слотов, вот список полезных виджетов и других классов, которые вы можете использовать в своих приложениях PyQt.

Компоненты и виджеты

В PyQt доступно большое количество виджетов для создания приложений с графическим интерфейсом. Однако в PyQt5 произошла перестановка классов в разные модули и версии лицензий.

Поэтому очень важно иметь общее представление о структуре PyQt5. В этом разделе вы увидите внутреннюю организацию PyQt5 и узнаете о различных модулях, библиотеках и классах API, предоставляемых PyQt5.

Структура каталогов PyQt5

Это основные модули, используемые привязкой Python к Qt, в частности PyQt5.

  • QT :Он объединяет все классы/модули, упомянутые ниже, в один модуль. Это значительно увеличивает память, используемую приложением. Однако проще управлять платформой, импортировав только один модуль.
  • QtCore :содержит основные неграфические классы, используемые другими модулями. Здесь реализованы цикл обработки событий Qt, сигналы, слот-подключение и т. д.
  • QtWidgets :содержит большинство виджетов, доступных в Pyqt5.
  • QtGui :содержит компоненты графического интерфейса и расширяет модуль QtCore.
  • QtNetwork :содержит классы, используемые для реализации сетевого программирования через Qt. Он поддерживает серверы TCP, сокеты TCP, сокеты UDP, обработку SSL, сетевые сеансы и поиск DNS.
  • QtMultimedia обеспечивает низкоуровневую мультимедийную функциональность.
  • QtSql :реализует интеграцию базы данных для баз данных SQL. Поддерживает ODBC, MySQL, Oracle, SQLite и PostgreSQL.

Виджеты PyQt5

Вот список наиболее часто используемых виджетов в PyQt5

  • QLineEdit :это поле ввода, которое позволяет пользователю ввести одну строку текста.
    184
  • QRadioButton :это поле ввода с выбираемой кнопкой, аналогично переключателям в html.
    195
  • QComboBox :используется для отображения раскрывающегося меню со списком доступных для выбора элементов.
    200
  • QCheckBox :отображает выбираемое квадратное поле перед меткой, которая отмечена галочкой, если она выбрана, подобно переключателям.
    217
  • QMenuBar :отображает горизонтальную строку меню в верхней части окна. На эту панель можно добавлять только объекты класса QMenu. Эти объекты QMenu могут дополнительно содержать строки, объекты QAction или другие объекты QMenu.
  • Панель QToolBar :это горизонтальная полоса или панель, которую можно перемещать в пределах окна. Он может содержать кнопки и другие виджеты.
  • QTab :он используется для разбивки содержимого окна на несколько страниц, доступ к которым можно получить через различные вкладки в верхней части виджета. Он состоит из двух разделов:панели вкладок и страницы вкладок.
  • QScrollBar :используется для создания полос прокрутки, которые позволяют пользователю прокручивать окно вверх и вниз. Он состоит из подвижного ползунка, дорожки ползунка и двух кнопок для прокрутки ползунка вверх или вниз.
    227
  • QSplitter :разделители используются для разделения содержимого окна, чтобы виджеты были правильно сгруппированы и не выглядели загроможденными. QSplitter — это один из основных обработчиков компоновки, доступных в PyQt5, который используется для разделения содержимого как по горизонтали, так и по вертикали.
  • QDock :виджет Dock – это подокно с двумя свойствами:
  • Его можно перемещать в пределах главного окна и
  • Его можно закрепить за пределами родительского окна в другом месте на экране.

Макеты и темы

В предыдущих примерах PyQt5 вы использовали только методы move() и resize() для установки позиций виджетов в вашем графическом интерфейсе.

Однако PyQt имеет надежный механизм управления компоновкой, который можно использовать для создания расширенных пользовательских интерфейсов для приложений. В этом разделе вы узнаете о двух важных классах, которые используются в Qt для создания макетов и управления ими.

  1. QBoxLayout
  2. QGridLayout

QBoxLayout

QBoxLayout используется для выравнивания дочерних виджетов макета в горизонтальный или вертикальный ряд. Два интересных класса, которые наследуются от QBoxLayout:

  • QHBoxLayout:используется для горизонтального выравнивания дочерних виджетов.
  • QVBoxLayout:используется для вертикального выравнивания дочерних виджетов.

Например, так будут выглядеть три кнопки, выровненные по QHBoxLayout.

236

А вот так они будут выглядеть в QVBoxLayout.

249

Единственная функция, которая нуждается в объяснении на данный момент, — это метод addWidget(). Он используется для вставки виджетов в макет HBox или VBox. Он также используется в других макетах, где он принимает другое количество параметров, как вы увидите в следующем разделе. Виджеты появятся внутри макета в том порядке, в котором вы их вставили.

QGridLayout

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

Например, чтобы создать сетку 3*3 (т. е. сетку с тремя строками и тремя столбцами), вы напишете следующий код:

259

Это будет вывод:

Метод addWidget() В макете сетки принимает следующие аргументы:

  • Объект виджета, который вы хотите добавить в сетку
  • Координата x объекта
  • Координата Y объекта
  • Промежуток строк (по умолчанию =0)
  • Количество столбцов (по умолчанию =0)

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

263

Вот как будет выглядеть сетка:

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

Например,

277

Это создаст кнопку, которая растянется на оба столбца.

Темы

PyQt5 поставляется с некоторыми встроенными темами, которые вы можете использовать в своих приложениях. setStyle() Метод, вызываемый в экземпляре QApplication, используется для установки определенной темы для вашего приложения.

Например, добавление следующей строки кода изменит тему вашего приложения с стандартной на Fusion

282

Вот как предыдущий пример будет выглядеть в теме Fusion

Еще одна полезная функция для создания тем для ваших приложений — это метод setPalette(). Вот код для изменения цвета различных виджетов с помощью setPalette().

293

Вот результат.

Чтобы использовать метод setPalette(), вам сначала нужно определить палитру. Это делается путем создания объекта класса QPalette.

302

Обратите внимание, что класс QPalette принадлежит модулю QtGui, и вам нужно будет импортировать его, чтобы он работал. После того, как вы создали объект QPalette, используйте метод setColor() для передачи имени виджета, цвет которого вы хотите изменить, и цвета, который вы хотите установить.

315

Это изменит цвет окна на черный. После того, как вы определили свою цветовую схему, используйте функцию setPalette(), чтобы применить палитру к вашему приложению.

325

Это все, что вам нужно сделать, если вы хотите создать несколько основных тем для своего приложения. PyQt также позволяет вам использовать таблицы стилей для определения внешнего вида ваших виджетов. Если вы знакомы с CSS, вы можете легко определить расширенные стили для своего приложения с помощью таблиц стилей Qt.

Обзор

  • PyQt – это привязка Python для среды пользовательского интерфейса C++, Qt.
  • PyQt4 и PyQt5 — это две основные версии, разработанные Riverbank Computing.
  • Основные модули платформы PyQt:
    1. Qt
    2. QtCore
    3. QtWidgets
    4. QtGui
    5. QtSQL
    6. QtNetwork
  • PyQt поддерживает различные виджеты, такие как:
    1. Кнопки
    2. Текстовые метки
    3. Текстовые поля
    4. Переключатели и флажки
    5. Панели инструментов и строки меню
    6. Веб-кит
    7. Вкладки
    8. Доки
  • В PyQt интерактивность реализована с помощью сигналов. и слоты.
  • событие действие, выполняемое пользователем в графическом интерфейсе (например, нажатие кнопки).
  • Сигнал вызывается соответствующим виджетом, когда на нем происходит событие.
  • А слот — это функция, которая связана с сигналом и выполняется, когда сигнал повышается.
  • PyQt имеет надежный механизм компоновки и поддерживает расширенный дизайн макетов и управление ими. Это две часто используемые схемы компоновки в PyQt:
    1. Макет блока
    2. Макет сетки
  • Конструктор PyQt позволяет создавать собственные темы для приложений с графическим интерфейсом и имеет встроенную поддержку таблиц стилей.
  • Qt Creator Python можно использовать для создания пользовательских интерфейсов, а также автономных приложений.

Python

  1. Учебное пособие по коллекциям C# с примерами
  2. Количество строк Python() с ПРИМЕРАМИ
  3. Python String format() Объясните с ПРИМЕРАМИ
  4. Метод Python String find() с примерами
  5. Лямбда-функции Python с ПРИМЕРАМИ
  6. Функция Python round() с ПРИМЕРАМИ
  7. Функция Python map() с ПРИМЕРАМИ
  8. Python Timeit() с примерами
  9. Счетчик Python в коллекциях с примером
  10. type() и isinstance() в Python с примерами