Gemeinsame GUI-Frameworks
- PyQt5: Qt ist eine plattformübergreifende C++-Bibliothek für grafische Benutzeroberflächen. QT war einst im Besitz von Nokia und wurde später an Digia Oyj, ein finnisches Softwareunternehmen, verkauft. PyQt5 ist eine Python-Schnittstelle, die auf Digias Qt5 basiert und aus einer Reihe von Python-Modulen besteht. PyQt5 selbst verfügt über mehr als 620 Klassen und 6000 Funktionen und Methoden. Kann auf mehreren Plattformen ausgeführt werden, darunter: Unix, Windows und Mac OS.
- Pyside6: Pyside ist das offiziell von QT Company bereitgestellte Python-Paket. Die vorherige Version war Pyside2, was QT5 entspricht. Die Benennungsregeln der neuesten Version wurden angepasst und in Pyside6 geändert, was der QT6-Version entspricht. Da das offizielle Produkt relativ vielversprechend ist, besteht der Nachteil darin, dass es erst spät veröffentlicht wurde und es im Internet nicht so viele Informationen wie zu PyQt5 gibt.
- Tkinter: Das integrierte GUI-Framework von Python, implementiert mit TCL. Bei der Verwendung müssen keine zusätzlichen Erweiterungspakete installiert werden. Es ist plattformübergreifend. Der Nachteil besteht darin, dass das UI-Layout vollständig im Code implementiert ist, nur 15 häufig verwendete Komponenten enthält und der Anzeigeeffekt rudimentär ist.
- PySimpleGUI: PySimpleGUI ist ein Wrapper für Tkinter. Die Implementierung einer benutzerdefinierten GUI mit PySimpleGUI erfordert viel weniger Code als das direkte Schreiben derselben GUI mit Tkinter.
- WxPython: wxPython ist eine Python-Sprachbindung für die beliebte plattformübergreifende GUI-Toolbibliothek wxWidgets. Es ist weit verbreitet, plattformübergreifend, in C++ geschrieben und verfügt über wenige Dokumente. Benutzer müssen möglicherweise einige Anpassungen am GUI-Code auf verschiedenen Plattformen basierend auf dem Programmierinhalt vornehmen. Es ist schwierig, Probleme zu lösen, wenn sie auftreten. Die Steuerung des Codelayouts ist nicht intuitiv.
- Wax: Basierend auf wxPython, einem Paket, das entwickelt wurde, um die Probleme von wxPython zu überwinden.
- Kivy: Hauptsächlich für Multitouch-Programme, Smartphones und Tablets usw. gedacht. Es kann auch auf Systemen ohne Touchscreen-Funktionen verwendet werden. Es unterstützt alle Plattformen (Windows, Linux, Mac OS X, Android und iOS). Beim Schreiben von Python und Cython ist die chinesische Unterstützung schlecht. Sie müssen die chinesische Bibliothek herunterladen und den Pfad selbst formulieren.
- BeeWare: Einmalig bereitstellen. Muss mit Kivy verwendet werden.
- Toga: Ein GUI-Toolkit zur Entwicklung nativer Apps mit Python. Toga besteht aus einer Basiskomponentenbibliothek mit gemeinsam genutzten Schnittstellen, um die plattformunabhängige GUI-Entwicklung zu vereinfachen. Toga ist für Mac OS, Windows, Linux (GTK) und mobile Plattformen wie Android und iOS verfügbar.
- Eel: Eine leichtgewichtige Python-Bibliothek zum Erstellen einfacher Offline-HTML/JS-GUI-Anwendungen, die Electron ähneln (jedoch leichter als diese), mit vollem Zugriff auf Python-Funktionen und Bibliotheksberechtigungen.
- Flexx: Ein reines Python-Toolkit zum Erstellen grafischer Schnittstellenanwendungen. Es nutzt Web-Technologie für das Interface-Rendering. Mit Flexx können Sie Desktop-Anwendungen erstellen und eine Anwendung auch in ein eigenständiges HTML-Dokument exportieren. Da Flexx in reinem Python entwickelt wurde, ist es plattformübergreifend. Zur Ausführung benötigen Sie lediglich Python und einen Browser.
- pywebview ist ein leichter plattformübergreifender Wrapper um die Webview-Komponente, der die Anzeige von HTML-Inhalten in einem eigenen nativen GUI-Fenster ermöglicht. Es ermöglicht Ihnen, Webtechnologien in Desktop-Anwendungen zu verwenden und gleichzeitig die Tatsache, dass ein Browser zum Erstellen der GUI verwendet wird, so weit wie möglich zu verbergen.
- enaml: Ein Python-Framework, mit dem Sie hochwertige GUI-Schnittstellen mit minimalem Aufwand implementieren können. Es ist auch eine einzigartige Programmiersprache. enaml kombiniert eine deklarative Sprache mit einem auf Einschränkungen basierenden Layoutsystem, sodass Benutzer problemlos flexible Layouts der Benutzeroberfläche definieren können. enaml-Anwendungen können auf jeder Plattform ausgeführt werden, die Python und Qt unterstützt.
Persönliche Gedanken: Es gibt zu viel zu lernen, also lernen Sie zuerst PyQt5, weil es viele Informationen gibt, und lernen Sie dann pyside6, wenn Sie genug Energie haben. Schauen Sie sich abschließend PySimpleGUI an, um zu sehen, ob Sie einige davon lösen können einfache Probleme.
Einführung in PyQt5
PyQt ist eine Python-Sprachimplementierung des Qt-Frameworks. Es wurde von Riverbank Computing entwickelt und ist eine der leistungsstärksten GUI-Bibliotheken. PyQt bietet eine gut gestaltete Sammlung von Fenstersteuerelementen. Jedes PyQt-Steuerelement entspricht einem Qt-Steuerelement. Daher ähnelt die API-Schnittstelle von PyQt der API-Schnittstelle von Qt, PyQt verwendet jedoch nicht mehr das QMake-System und das Q_OBJECT-Makro.
PyQt5 bietet Zertifikate für die GPL-Version und die kommerzielle Version. Wenn Sie PyQt für kommerzielle Anwendungen verwenden müssen, müssen Sie eine kommerzielle Lizenz erwerben.
PyQt5-Funktionen sind wie folgt:
- GUI-Steuerungssatz basierend auf Hochleistungs-Qt.
- Kann plattformübergreifend auf Linux-, Windows- und Mac OS-Systemen ausgeführt werden.
- Verwenden Sie Signal- und Slot-Mechanismus für die Kommunikation.
- Kapselt die Qt-Bibliothek vollständig.
- Sie können eine ausgereifte IDE für das Interface-Design verwenden und automatisch ausführbaren Python-Code generieren.
- Bietet einen vollständigen Satz von Fenstersteuerelementen.
- PyQt5 besteht aus einer Reihe von Python-Modulen mit mehr als 620 Klassen, 6000 Funktionen und Methoden. Die Hauptmodule sind wie folgt:
#🎜 🎜# QtCore: Enthält zentrale Nicht-GUI-Funktionen. Wird hauptsächlich mit Zeit, Dateien und Ordnern, verschiedenen Daten, Streams, URLs, MIME-Klassendateien, Prozessen und Threads verwendet.
QtGui: Enthält Fenstersystem, Ereignisbehandlung, 2D-Bilder, grundlegende Malerei, Schriftarten und Textklassen.
QtWidgets: Enthält eine Reihe von UI-Elementen zum Erstellen von Desktop-Anwendungen.
QtMultimedia: Enthält Klassen zur Verarbeitung von Multimedia-Inhalten und zum Aufruf der Kamera-API.
QtBluetooth: Enthält Klassen zum Suchen und Herstellen einer Verbindung zu Bluetooth.
QtNetwork: Enthält Netzwerkprogrammierklassen. Diese Tools können die TCP/IP- und UDP-Entwicklung komfortabler und zuverlässiger machen.
QtPositioning: Enthält Positionierungsklassen, die Satellit, WLAN oder sogar Text verwenden können.
Enginio: Enthält Klassen zum Betreten und Verwalten von Qt Cloud über den Client.
QtWebSockets: Eine Klasse, die das WebSocket-Protokoll enthält.
QtWebKit: Enthält einen Webbrowser basierend auf WebKit2.
QtWebKitWidgets: Enthält Klassen basierend auf WebKit1 von QtWidgets.
QtXml: Enthält Klassen zur Verarbeitung von XML und stellt Tools für SAX- und DOM-APIs bereit.
QtSvg: Stellt eine Klasse zum Anzeigen von SVG-Inhalten (SVG) zur Verfügung, die auf einer erweiterbaren Auszeichnungssprache (XML) zur Beschreibung zweidimensionaler Vektorgrafiken basiert Satz stammt aus Wikipedia).
QtSql: Stellt Tools zur Verarbeitung von Datenbanken bereit.
QtTest: Bietet Tools zum Testen von PyQt5-Anwendungen.
PyQt5-Installation
Aufgrund der Notwendigkeit, fbs später zum Packen zu verwenden, kann es bei fbs zu Kompatibilitätsproblemen mit Python 3.7 und Python 3.7 kommen spätere Versionen, daher habe ich mich für Python 3.6.8 entschieden, um die gesamte Umgebung zu erstellen. Der Hauptinhalt ist: Python + PyCharm + PyQt5
PyQt5 installieren
pip install pyqt5
pip install pyqt5-tools
Zu den pyqt5-tools gehört das Drag-and-Drop-Schnittstellendesign von Qt Designer Werkzeug. Während des Installationsvorgangs kann der folgende Fehler gemeldet werden:
qt5-tools 5.15.2.1.2 has requirement click~=7.0, but you'll have click 8.0.1 which is incompatible.
Lösung:
pip install click~=7.0
Qt Designer-Konfiguration
Qt Designer ermöglicht ein schnelles UI-Design, indem Steuerelemente durch Ziehen platziert und die Auswirkungen der Steuerelemente in Echtzeit angezeigt werden.
Die Zusammensetzung des gesamten Bildschirms:
Das „Widget „auf der linken Box“ sind verschiedene Komponenten, die frei gezogen werden können - Das „MainWindow – untitled“-Formular in der Mitte ist die Leinwand
Das „Object „Inspektor“ oben rechts kann die Struktur der aktuellen Benutzeroberfläche anzeigen
Der „Eigenschaftseditor“ in der Mitte rechts kann die Eigenschaften der aktuell ausgewählten Komponente festlegen - #🎜 🎜#
Im „Ressourcenbrowser“ unten rechts können Sie verschiedene Materialien wie Bilder, Hintergründe usw. hinzufügen. UI-Datei (im Wesentlichen eine Datei im XML-Format), die direkt verwendet oder über das Tool pyuic5 in eine .py-Datei konvertiert werden kann.
-
QtDisigner-Konfiguration
Öffnen Sie in Pycharm Datei – Einstellungen – Tools – Externe Tools, klicken Sie auf + Tool erstellen, die Konfiguration ist wie folgt: # 🎜🎜#
Name: QtDisigner
Program : D:Program FilesPython36Libsite-packagesqt5_applicationsQtbindesigner.exe # 请根据实际修改
Working directory: $FileDir$
PyUIC-Konfiguration
PyUIC ersetzt hauptsächlich die von Qt Designer generierten .ui-Dateien durch .py-Dateien.
Öffnen Sie in Pycharm Datei – Einstellungen – Tools – Externe Tools, klicken Sie auf + Tool erstellen, die Konfiguration ist wie folgt:
Name: PyUIC
Program : D:Program FilesPython36python.exe # 当前Python目录,请根据实际修改
Arguments: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
Working directory: $FileDir$
PyRCC-Konfiguration#🎜🎜 #
PyRCC ersetzt hauptsächlich die geschriebenen .qrc-Ressourcendateien durch .py-Dateien. Öffnen Sie in Pycharm Datei – Einstellungen – Tools – Externe Tools, klicken Sie auf + Tool erstellen. Die Konfiguration lautet wie folgt:
Name: PyRCC
Program: D:Program FilesPython36pyrcc5.exe # 当前rcc工具目录,请根据实际修改
Arguments: $FileName$ -o $FileNameWithoutExtension$_rc.py
Working directory: $FileDir$
PyQt5-Verwendungsbeispiel
Erstellen Sie ein leere Schnittstelle:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
app = QApplication(sys.argv)
win = QMainWindow()
win.setGeometry(400, 400, 400, 300)
win.setWindowTitle("Pyqt5 Tutorial")
win.show()
sys.exit(app.exec_())
Darunter:
- Qapplication():每个GUI都必须包含一个Qapplication,argv表示获取命令行参数,如果不用获取,则可以使用[]代替。
- QMainWindow():类似一个容器(窗口)用来包含按钮、文本、输入框等widgets。arg标识可以获取命令行执行时的参数。
- SetGeometry是用来定义 QMainWindow() 窗口的尺寸, 语法:setGeometry(x, y, width, height ),其中x,y为屏幕上的坐标点。
- show():用来显示窗口
- exit(app.exec_()):设置窗口一直运行指导使用关闭按钮进行关闭
PyQt5支持的常见Widgets有:
从上到下,从左到右依次为:Qlabel、QcomboBox、QcheckBox、QradioButton、QpushButton、QtableWidget、QlineEdit、Qslider、QProgressBar
对于使用Pyqt5设置文本内容,我们使用Qlabel:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
app = QApplication(sys.argv)
win = QMainWindow()
win.setGeometry(400, 400, 400, 300)
win.setWindowTitle("Pyqt5 Tutorial")
# Label Text
label = QLabel(win)
label.resize(200, 100)
label.setText("Hi this is Pyqt5")
label.move(100, 100)
win.show()
sys.exit(app.exec_())
按钮与事件:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
def click():
print("Hy Button is clicked!")
app = QApplication(sys.argv)
win = QMainWindow()
win.setGeometry(400, 400, 400, 300)
win.setWindowTitle("Pyqt5 Tutorial")
# Button
button = QPushButton(win)
button.resize(200, 100)
button.setText("Hi! Click Me")
button.move(100, 100)
button.clicked.connect(click)
win.show()
sys.exit(app.exec_())
button.clicked.connect() 在按钮点击后执行特定的事件。
PyQt5实战
实战项目:简易的天气查询软件
1、使用Qt Designer设计一个界面
用到的控件有Button, GroupBox, Label,ComboBox,TextEdit,同时定义了两个按钮queryBtn及clearBtn,分别用来查询及清空天气数据。我们需要绑定槽函数,方法如下:
- 在Qt Designer右下角选择 信号/槽编辑器,点击+号新增
- 分别选择queryBtn及clearBtn,选择信号 clicked(), 接收者 Dialog 及槽 accept(),(槽函数这里不知道如何定义,后期在代码里再进行修改)
以上完成后保存为Weather.ui文件。
2、转换.ui文件为.py文件
PyQt5支持直接使用.ui文件:
import sys
from PyQt5 import QtWidgets, uic
app = QtWidgets.QApplication(sys.argv)
window = uic.loadUi("mainwindow.ui")
window.show()
app.exec()
但是为了更好的自定义及修改上面的槽函数,可以使用External Tools – PyUIC,即可生成Weather.py,实际运行命令如下:
D:Program FilesPython36python.exe -m PyQt5.uic.pyuic Weather.ui -o Weather.py
其中,我们需要把两个按钮绑定的槽函数:
# self.queryBtn.clicked.connect(Dialog.accept)
# self.clearBtn.clicked.connect(Dialog.accept)
# 修改为:
self.queryBtn.clicked.connect(Dialog.queryWeather)
self.clearBtn.clicked.connect(Dialog.clearText)
最终的Weather.py内容如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Weather.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(600, 600)
self.groupBox = QtWidgets.QGroupBox(Dialog)
self.groupBox.setGeometry(QtCore.QRect(30, 20, 551, 511))
self.groupBox.setObjectName("groupBox")
self.label_2 = QtWidgets.QLabel(self.groupBox)
self.label_2.setGeometry(QtCore.QRect(20, 30, 31, 16))
self.label_2.setObjectName("label_2")
self.comboBox = QtWidgets.QComboBox(self.groupBox)
self.comboBox.setGeometry(QtCore.QRect(70, 30, 87, 22))
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.textEdit = QtWidgets.QTextEdit(self.groupBox)
self.textEdit.setGeometry(QtCore.QRect(20, 70, 491, 411))
self.textEdit.setObjectName("textEdit")
self.queryBtn = QtWidgets.QPushButton(Dialog)
self.queryBtn.setGeometry(QtCore.QRect(490, 560, 93, 28))
self.queryBtn.setObjectName("queryBtn")
self.clearBtn = QtWidgets.QPushButton(Dialog)
self.clearBtn.setGeometry(QtCore.QRect(30, 560, 93, 28))
self.clearBtn.setObjectName("clearBtn")
self.retranslateUi(Dialog)
self.clearBtn.clicked.connect(Dialog.clearText)
self.queryBtn.clicked.connect(Dialog.queryWeather)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.groupBox.setTitle(_translate("Dialog", "城市天气预报"))
self.label_2.setText(_translate("Dialog", "城市"))
self.comboBox.setItemText(0, _translate("Dialog", "北京"))
self.comboBox.setItemText(1, _translate("Dialog", "苏州"))
self.comboBox.setItemText(2, _translate("Dialog", "上海"))
self.queryBtn.setText(_translate("Dialog", "查询"))
self.clearBtn.setText(_translate("Dialog", "清空"))
3、调用MainDialog
在MainDialog中调用界面类Ui_Dialog,然后在其中中添加查询天气的业务逻辑代码,这样就做到了界面显示和业务逻辑的分离。新增demo.py文件, 在MainDialog类中定义了两个槽函数queryWeather()和clearText(),以便在界面文件Weather.ui中定义的两个按钮(queryBtn 和clearBtn) 触发clicked 信号与这两个槽函数进行绑定。
完整代码如下:
import sys
import Weather
from PyQt5.QtWidgets import QApplication, QDialog
import requests
class MainDialog(QDialog):
def __init__(self, parent=None):
super(QDialog, self).__init__(parent)
self.ui = Weather.Ui_Dialog()
self.ui.setupUi(self)
def queryWeather(self):
cityName = self.ui.comboBox.currentText()
cityCode = self.getCode(cityName)
r = requests.get(
"https://restapi.amap.com/v3/weather/weatherInfo?key=f4fd5b287b6d7d51a3c60fee24e42002&city={}".format(
cityCode))
if r.status_code == 200:
data = r.json()['lives'][0]
weatherMsg = '城市:{}n天气:{}n温度:{}n风向:{}n风力:{}n湿度:{}n发布时间:{}n'.format(
data['city'],
data['weather'],
data['temperature'],
data['winddirection'],
data['windpower'],
data['humidity'],
data['reporttime'],
)
else:
weatherMsg = '天气查询失败,请稍后再试!'
self.ui.textEdit.setText(weatherMsg)
def getCode(self, cityName):
cityDict = {"北京": "110000",
"苏州": "320500",
"上海": "310000"}
**return** cityDict.get(cityName, '101010100')
def clearText(self):
self.ui.textEdit.clear()
if __name__ == '__main__':
myapp = QApplication(sys.argv)
myDlg = MainDialog()
myDlg.show()
sys.exit(myapp.exec_())
运行demo.py并执行查询后的效果:
4、将代码打包成exe文件
将.py文件打包成可执行的exe在Python中称为freezing,常用的工具有:PyInstaller, py2exe, cx_Freeze, bbfreze, py2app等。功能对比:
- py2exe:软件更新已经不活跃,因此也就略过。
- pyinstaller:明确支持win8、win10、理论上支持win7,,支持apple Macos, linux。pyinsaller可以打包成文件夹形式内含exe入口执行文件的形式,也可以是一个单独的exe文件。
- fbs:基于PyInstaller,使用起来更加方便
这里选择了fbs来打包。fbs的安装方法:
pip install fbs
使用方法,在命令行中输入:
fbs startproject
执行完成后需要输入一些APP的名称等。完成后会生成如下目录:
将刚才编写的PyQt5的代码(demo.py和Weather.py)拖到src/main/python文件夹下,删除原有的main.py,并将demo.py修改为main.py。然后打开 main.py,在文件头部添加如下代码:
from fbs_runtime.application_context.PyQt5 import ApplicationContext
```
完成后执行:
```
fbs freeze
```
即可实现打包。生成的exe可执行文件在targetMyApp文件下。
Das obige ist der detaillierte Inhalt vonSuper komplett! Leitfaden zur Verwendung des grafischen Python-Schnittstellen-Frameworks PyQt5!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!