Python ist eine allgemeine Programmiersprache auf hohem Niveau, die sich auf die Verbesserung der Entwicklerproduktivität und der Codelesbarkeit konzentriert, wie Wikipedia uns sagt. Es wird auch aktiv zum Schreiben von Webanwendungen verwendet. Nun, für die Arbeit mit Qt für Python wurde die PyQt5-Bibliothek von Riverbank Computing entwickelt, die eine Reihe von "Bindungen" an die Qt5-Bibliothek ist.
Aus Interesse habe ich mich entschieden, eine kleine Hello World mit PyQt5 zu schreiben.
Installation
Der erste Schritt ist die Installation von Python, in meinem Fall ist es Python 3.5.2.
Für Windows können Sie das Installationspaket von der offiziellen Python-Website herunterladen. Für Linux können wir den Standard-Paketmanager verwenden.
Als nächstes müssen Sie PyQt5 installieren. Bei Linux können Sie die Installation entweder mit dem Standardpaketmanager durchführen. Beispiel für deb-basierte Verteilungen:
sudo apt-get install python python3-pyqt5 pyqt5-dev-tools
Oder installieren Sie zuerst das Dienstprogramm pip , um Python-Pakete zu installieren:
sudo apt-get install python-pip
Und installieren Sie bereits mit diesem Dienstprogramm, das für Windows- und Linux-Systeme gleich ist:
pip install PyQt5
IDE PyCharm wurde für die Entwicklung in Python ausgewählt.
Hello World
Lassen Sie uns nun ein kleines Programm in PyQt5 schreiben, das ein Anwendungsfenster mit einem Label startet und einen Menüpunkt in der Menüleiste hat. Mit einem Klick auf diesen Punkt schließen wir die Anwendung.
Volltext des Programms
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())
Unterschiede
if name == " main ":
In Python-Anwendungen finden Sie häufig das folgende Konstrukt:
if __name__ == "__main__":
Mit dieser Konstruktion können Sie dem Python-Skript mitteilen, welcher Programmcode ausgeführt werden soll, wenn es als eigenständige Anwendung gestartet wird. Wenn dieses Skript in ein anderes Skript importiert wird, wird der Programmcode, der dieser Konstruktion folgt, nicht aufgerufen.
Signal und Slot Syntax
PyQt5 verwendet die folgende Signal- und Slot-Syntax, die anhand des QAction-Beispiels gezeigt wird.
exit_action = QAction("&Exit", self) # Создаём Action с помощью которого будем выходить из приложения exit_action.triggered.connect(qApp.quit)
Während in Qt/C++ das gleiche so aussehen würde:
QAction *exit = new QAction("&Exit", this); connect(exit, &QAction::triggered, qApp, &QApplication::quit);
Python
Vielleicht das Offensichtlichste ;-)
Kein Kommentar hier.
Fazit
Als Ergebnis erhalten wir ein Programm des folgenden Typs.
Отлично получилось. Работает. Спс
ImportError: cannot import name 'QtCore' from 'PyQt5' (unknown location)