Rumah > Artikel > pembangunan bahagian belakang > Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!
Pemikiran peribadi: Terlalu banyak yang perlu dipelajari, jadi pelajari PyQt5 dahulu, kerana terdapat banyak maklumat, dan kemudian pelajari pyside6 jika anda mempunyai tenaga yang mencukupi Akhirnya, lihat PySimpleGUI untuk lihat jika anda boleh menyelesaikan beberapa masalah mudah.
PyQt ialah pelaksanaan bahasa Python bagi rangka kerja Qt Ia dibangunkan oleh Riverbank Computing dan merupakan salah satu perpustakaan GUI yang paling berkuasa. PyQt menyediakan koleksi kawalan tetingkap yang direka dengan baik. Setiap kawalan PyQt sepadan dengan kawalan Qt Oleh itu, antara muka API PyQt sangat dekat dengan antara muka API Qt, tetapi PyQt tidak lagi menggunakan sistem QMake dan makro Q_OBJECT.
PyQt5 menyediakan sijil versi GPL dan versi komersial Pembangun percuma boleh menggunakan lesen GPL percuma Jika anda perlu menggunakan PyQt untuk aplikasi komersial, anda mesti membeli lesen komersial.
Ciri PyQt5 adalah seperti berikut:
Memandangkan fbs akan digunakan untuk pembungkusan kemudian, fbs mungkin mempunyai masalah keserasian dengan Python 3.7 dan versi yang lebih baru, jadi saya memilih Python 3.6 .8 Keseluruhan persekitaran telah dibina. Kandungan utama ialah: Python + PyCharm + PyQt5
pip install pyqt5 pip install pyqt5-tools
Antaranya, pyqt5-tools ialah alat reka bentuk antara muka drag-and-drop Designer Qt. Ralat berikut mungkin dilaporkan semasa proses pemasangan:
qt5-tools 5.15.2.1.2 has requirement click~=7.0, but you'll have click 8.0.1 which is incompatible.
Penyelesaian:
pip install click~=7.0
Qt Pereka bentuk menggunakan seret dan lepas untuk meletakkan kawalan dan melihat kesan kawalan dalam masa nyata untuk reka bentuk UI yang pantas.
Komposisi keseluruhan skrin:
Fail .ui (pada asasnya fail dalam format XML) akhirnya dijana, yang boleh digunakan secara langsung atau ditukar menjadi . py melalui alat pyuic5.
Dalam Pycharm, buka Fail – Tetapan – Alat – Alat Luaran, klik + Buat Alat, konfigurasi adalah seperti berikut:
Name: QtDisigner Program : D:Program FilesPython36Libsite-packagesqt5_applicationsQtbindesigner.exe # 请根据实际修改 Working directory: $FileDir$
PyUIC terutamanya menggantikan fail .ui yang dijana oleh Qt Designer dengan fail .py.
Dalam Pycharm, buka Fail – Tetapan – Alat – Alat Luaran, klik + Buat Alat, konfigurasi adalah seperti berikut:
Name: PyUIC Program : D:Program FilesPython36python.exe # 当前Python目录,请根据实际修改 Arguments: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py Working directory: $FileDir$
PyRCC terutamanya menggantikan fail sumber .qrc bertulis dengan fail .py. Dalam Pycharm, buka Fail – Tetapan – Alat – Alat Luaran, klik + Cipta Alat dan konfigurasikannya seperti berikut:
Name: PyRCC Program: D:Program FilesPython36pyrcc5.exe # 当前rcc工具目录,请根据实际修改 Arguments: $FileName$ -o $FileNameWithoutExtension$_rc.py Working directory: $FileDir$
Buat antara muka kosong:
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_())
Antaranya:
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() 在按钮点击后执行特定的事件。
实战项目:简易的天气查询软件
用到的控件有Button, GroupBox, Label,ComboBox,TextEdit,同时定义了两个按钮queryBtn及clearBtn,分别用来查询及清空天气数据。我们需要绑定槽函数,方法如下:
以上完成后保存为Weather.ui文件。
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", "清空"))
在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并执行查询后的效果:
将.py文件打包成可执行的exe在Python中称为freezing,常用的工具有:PyInstaller, py2exe, cx_Freeze, bbfreze, py2app等。功能对比:
这里选择了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文件下。
Atas ialah kandungan terperinci Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!