Python — це високорівнева мова програмування загального призначення, орієнтована на підвищення продуктивності розробника та читання коду, як каже Вікіпедія. А також активно використовується для написання веб-додатків. Ну а для роботи з Qt для Python була розроблена компанією Riverbank Computing бібліотека PyQt5, яка є набором прив'язок до бібліотеки Qt5.
З інтересу я вирішив написати невеликий Hello World з використанням PyQt5.
Установка
Насамперед встановлюємо Python, в моєму випадку це Python 3.5.2.
Для Windows можна завантажити інсталяційний пакет з офіційного сайту Python . Для Linux можемо користуватися стандартним менеджером пакетів.
Далі необхідно встановити PyQt5. У разі Linux можна встановити за допомогою стандартного менеджера пакетів. Наприклад, для deb-based дистрибутивів:
sudo apt-get install python python3-pyqt5 pyqt5-dev-tools
Або встановити спочатку утиліту pip для встановлення пакетів Python:
sudo apt-get install python-pip
І вже зробити установку за допомогою даної утиліти, що буде аналогічно як для Windows, так і для Linux систем:
pip install PyQt5
Для розробки на Python було обрано IDE PyCharm.
Привіт Світ
А тепер напишемо невелику програму на PyQt5, яка запускатиме вікно програми з написом і матиме один пункт меню в панелі меню. По кліку на цей пункт закриватимемо програму.
Повний текст програми
from PyQt5 import QtCore, QtWidgets from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget, qApp, QAction from PyQt5.QtCore import QSize # Наследуемся от QMainWindow class MainWindow(QMainWindow): # Переопределяем конструктор класса def __init__(self): # Обязательно нужно вызвать метод супер класса QMainWindow.__init__(self) self.setMinimumSize(QSize(480, 320)) # Устанавливаем размеры self.setWindowTitle("Hello world!!!") # Устанавливаем заголовок окна central_widget = QWidget(self) # Создаём центральный виджет self.setCentralWidget(central_widget) # Устанавливаем центральный виджет grid_layout = QGridLayout(self) # Создаём QGridLayout central_widget.setLayout(grid_layout) # Устанавливаем данное размещение в центральный виджет title = QLabel("Hello World on the PyQt5", self) # Создаём лейбл title.setAlignment(QtCore.Qt.AlignCenter) # Устанавливаем позиционирование текста grid_layout.addWidget(title, 0, 0) # и добавляем его в размещение exit_action = QAction("&Exit", self) # Создаём Action с помощью которого будем выходить из приложения exit_action.setShortcut('Ctrl+Q') # Задаём для него хоткей # Подключаем сигнал triggered к слоту quit у qApp. # синтаксис сигналов и слотов в PyQt5 заметно отличается от того, # который используется Qt5 C++ exit_action.triggered.connect(qApp.quit) # Устанавливаем в панель меню данный Action. # Отдельного меню создавать пока не будем. file_menu = self.menuBar() file_menu.addAction(exit_action) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) mw = MainWindow() mw.show() sys.exit(app.exec())
Відмінності
якщо name == " main ":
У програмах Python часто можна зустріти наступну конструкцію:
якщо __name__ == "__main__":
За допомогою даної конструкції можна вказати Python-скрипту, який програмний код виконувати у тому випадку, якщо він запускається як самостійна програма. У випадку, якщо цей скрипт буде імпортований в інший скрипт, то програмний код, який слідуватиме за даною конструкцією, не буде викликаний.
Синтаксис сигналів та слотів
PyQt5 використовується наступний синтаксис сигналів і слотів, який показаний на прикладі використання QAction.
exit_action = QAction("&Exit", self) # Создаём Action с помощью которого будем выходить из приложения exit_action.triggered.connect(qApp.quit)
Тоді як у Qt C++ теж виглядало б таким чином:
QAction *exit = new QAction("&Exit", this); connect(exit, &QAction::triggered, qApp, &QApplication::quit);
Python
Мабуть, найочевидніше ;-)
Тут без коментарів.
Висновок
В результаті отримаємо програму такого виду.
Отлично получилось. Работает. Спс
ImportError: cannot import name 'QtCore' from 'PyQt5' (unknown location)