Как создать настольный калькулятор с графическим интерфейсом пользователя, используя Python и PyQT5
PyQt - это мощный кроссплатформенный фреймворк, который можно использовать для разработки графического интерфейса. Он является оболочкой популярного QT C++
фреймворка и позволяет подключаться через Python. В этой статье мы будем создавать настольное приложение с использованием Python.
Примечание: я не собираюсь использовать Q tDesigner. Я использую vim для кодирования. Я отказываюсь от усилий, связанных с установкой и изучением IDE.
Установка
Создадим и активируем виртуальную среду
$ virtualenv venv $ source venv/bin/activate
Установка зависимостей:
$ pip install pyqt5 $ pip install pyinstaller
Мы будем использовать pyqt5
для создания графического интерфейса. Мы будем использовать pyinstaller
для создания скомпилированного приложения.
Дизайн
Я буду использовать вот такой дизайн:
- Калькулятор поддерживает только базовые операции, такие как сложение
(+)
, вычитание(-)
, умножение(*)
и деление(/)
. - Есть два дисплея: один для отображения ввода, а другой - для вывода.
- Когда пользователь нажимает кнопки, ввод и вывод обновляются автоматически. В операторе equals
(=)
нет необходимости. Следовательно, он не включен. - В случае недопустимого синтаксиса мы будем отображать
nan
. При делении на 0 мы будем отображатьinf
. AC
вернет калькулятор к состоянию по умолчанию. Также есть опцияDEL
, которая действует как backspace.
Обратитесь к диаграмме выше, чтобы узнать об основном рабочем процессе, которому мы будем следовать. Начнем с импорта всех компонентов:
QtCore
содержит базовые классы, которые включают абстракцию для управления компонентами пользовательского интерфейса.QtWidgets
содержит компоненты пользовательского интерфейса, которые мы будем использовать, напримерQLabel
,QPushButton
,QGridLayout
,QWidgets
.sys
:QApplication
принимает список в качестве входных данных. В идеале мы можем отправить пустой список, например:
app = QApplication([])
Но в идеале мы отправляем sys.argv
в качестве ввода, чтобы мы могли отправить командную строку для изменения стиля или отладки и т. Д. Для получения дополнительной информации перейдите здесь.
QWidget
Мы начнем с создания базового класса для всех компонентов пользовательского интерфейса. Это базовая структура, с которой мы начинаем.
- Мы унаследовали QWidget, который будет содержать все наши компоненты пользовательского интерфейса /
- Мы устанавливаем размеры приложения на высоту
300
и ширину400
. Затем мы устанавливаем заголовок приложения наPyCalculator
. - Мы инициализируем нашу важную переменную состояния
self.data
, которая будет использоваться для хранения пользовательского ввода и отображения данных. - Мы используем Grid Layout для размещения наших элементов. Чтобы добавить элемент в компоновку сетки, мы будем использовать
addWidget(QWidget, row, colum, rowSpan, columnSpan)
. - Ярлыки для отображения входных и выходных данных создаются и добавляются в макет сетки в
create_lcd(self)
. Кнопки для управления приложением создаются и добавляются в макет вcreate_buttons(self)
. - Затем мы добавляем макет в наш контейнер.
QLabel
Мы используем QLabel для отображения данных. У нас есть два элемента:
- label_in: показывает введенные данные, то есть нажатые кнопки. Он находится в позиции (0,0) с диапазоном строк 1 и столбцов 4.
- label_out: показывает выходные данные. Он находится в позиции (1,0) с диапазоном строк 1 и столбцов 4.
AlignRight
- заставляет текст прилипать к правой стороне этикетки.
QPushButton
- У нас есть 12 кнопок диапазона строк и диапазона столбцов как 1, состоящих из чисел и арифметических операций, а его положение представлено как двумерный массив как
buttons_ui
. Когда кнопка нажата, она вызывает функциюself.add_to_screen
и передает ее значение вbuttons_ui
.
Логика
Когда кнопка нажата, вызывается функция add_to_screen
со значением вызываемой кнопки.
- Если нажата кнопка
AC
, ярлыки очищаются иself.data
сбрасывается. - Если вызывается
DEL
, последний ввод удаляется. - Для всех остальных входов обновляется
self.data
. - Каждый раз при вызове функции вычисляется результат и удаляются метки.
Мы используем функцию Python eval
для выполнения логики вычислений. Создание нашей собственной eval
функции выходит за рамки этой статьи. Если интересно, посмотрите это прочь.
QApplication
QApplication имеет основной цикл событий, который инициализирует, управляет, контролирует и завершает работу приложений с графическим интерфейсом пользователя.
Исходный код можно найти здесь.
Компилировать
Python - это интерпретируемый язык, поэтому в большинстве случаев распределение времени является проблемой. К счастью, для приложения PyQt нам не нужно беспокоиться об этом. Мы можем создать исполняемый файл с помощью однострочной команды с помощью pyinstaller. Компиляция приложения - это однострочный процесс:
$ pyinstaller — onefile — windowed <filename>.py
Скомпилированный исполняемый файл будет в ./dist
. Чтобы выполнить код:
$ ./dist/GUI
Приложение также можно скомпилировать для других платформ PyQtDeploy. Более подробная информация находится здесь.
Заключение
Благодаря этому мы успешно создали настольное приложение-калькулятор с использованием PyQt5. Надеюсь, эта статья оказалась для вас полезной. Если вам интересно, ознакомьтесь с введением в QT с использованием C ++ здесь.
Больше контента на plainenglish.io