Rumah > pembangunan bahagian belakang > Tutorial Python > Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!

Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!

WBOY
Lepaskan: 2023-04-13 08:43:21
ke hadapan
1658 orang telah melayarinya

Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!

Rangka kerja GUI biasa

  • PyQt5: Qt ialah perpustakaan antara muka pengguna grafik C++ merentas platform. QT pernah dimiliki oleh Nokia dan kemudian dijual kepada Digia Oyj, sebuah syarikat perisian Finland. PyQt5 ialah antara muka Python berdasarkan Qt5 Digia dan terdiri daripada satu set modul Python. PyQt5 sendiri mempunyai lebih daripada 620 kelas dan 6000 fungsi dan kaedah. Boleh dijalankan pada berbilang platform, termasuk: Unix, Windows dan Mac OS.
  • Pyside6: Pyside ialah pakej Python yang disediakan secara rasmi oleh Syarikat QT Versi sebelumnya ialah Pyside2, yang sepadan dengan QT5 Peraturan penamaan versi terkini telah dilaraskan dan ditukar kepada Pyside6, yang sepadan dengan QT6 versi. Memandangkan versi rasmi agak menjanjikan, kelemahannya ialah ia dikeluarkan lewat dan tidak terdapat banyak maklumat dalam talian seperti PyQt5.
  • Tkinter: Rangka kerja GUI terbina dalam Python, dilaksanakan menggunakan TCL Jurubahasa TCL dibenamkan dalam Python Apabila menggunakannya, anda tidak perlu memasang pakej sambungan tambahan merentas platform. Kelemahannya ialah reka letak UI dilaksanakan sepenuhnya oleh kod, terdapat hanya 15 komponen biasa, dan kesan paparan adalah mudah.
  • PySimpleGUI: PySimpleGUI ialah pembalut untuk Tkinter. Melaksanakan GUI tersuai menggunakan PySimpleGUI memerlukan lebih sedikit kod daripada menulis GUI yang sama secara terus menggunakan Tkinter.
  • WxPython: wxPython ialah bahasa Python yang mengikat untuk perpustakaan alat GUI merentas platform wxWidgets yang popular. Ia digunakan secara meluas, merentas platform, ditulis dalam C++, dan mempunyai beberapa dokumen Pengguna mungkin perlu membuat beberapa pelarasan pada kod GUI dalam platform yang berbeza berdasarkan kandungan pengaturcaraan. Sukar untuk menyelesaikan masalah apabila menghadapinya Kawalan susun atur kod tidak intuitif.
  • Wax: Berdasarkan wxPython, pakej yang dibuat untuk mengatasi masalah wxPython.
  • Kivy: Terutamanya untuk program berbilang sentuhan, telefon pintar, tablet, dll. Ia juga boleh digunakan pada sistem tanpa fungsi skrin sentuh, menyokong semua platform (Windows, Linux, Mac OS X, Android dan iOS .) Ditulis dalam Python dan cython, sokongan Cina adalah lemah Anda perlu memuat turun perpustakaan Cina sendiri dan merumuskan laluan.
  • BeeWare: Tulis sekali sahaja.
  • Toga: Kit alat GUI untuk membangunkan APP asli menggunakan Python. Toga terdiri daripada perpustakaan komponen asas dengan antara muka yang dikongsi untuk memudahkan pembangunan GUI bebas platform. Toga tersedia untuk Mac OS, Windows, Linux (GTK) dan platform mudah alih seperti Android dan iOS.
  • Belut: Pustaka Python yang ringan untuk membuat aplikasi GUI HTML/JS luar talian yang mudah serupa dengan Electron (tetapi lebih ringan daripadanya), dan mempunyai keupayaan untuk Python ) dan akses penuh kepada pustaka.
  • Flexx: Kit alat Python tulen untuk mencipta aplikasi antara muka grafik. Ia menggunakan teknologi web untuk pemaparan antara muka. Anda boleh menggunakan Flexx untuk mencipta aplikasi desktop, dan anda juga boleh mengeksport aplikasi ke dokumen HTML kendiri. Kerana ia dibangunkan dalam Python tulen, Flexx adalah platform silang. Apa yang anda perlukan ialah Python dan pelayar untuk dijalankan.
  • pywebview ialah pembalut merentas platform yang ringan di sekeliling komponen webview yang membenarkan kandungan HTML dipaparkan dalam tetingkap GUI aslinya sendiri. Ia membolehkan anda menggunakan teknologi web dalam aplikasi desktop sambil menyembunyikan sebanyak mungkin fakta bahawa penyemak imbas digunakan untuk membina GUI.
  • enaml: Rangka kerja Python yang membolehkan anda melaksanakan antara muka GUI berkualiti tinggi dengan usaha yang minimum. Ia juga merupakan bahasa pengaturcaraan yang unik. enaml menggabungkan bahasa perisytiharan dengan sistem susun atur berasaskan kekangan, membolehkan pengguna mentakrifkan reka letak fleksibel UI dengan mudah. aplikasi enaml boleh dijalankan pada mana-mana platform yang menyokong Python dan Qt.

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.

Pengenalan kepada PyQt5

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:

  • Set kawalan GUI berdasarkan Qt berprestasi tinggi.
  • Boleh menjalankan platform merentas pada sistem Linux, Window dan Mac OS.
  • Gunakan isyarat dan mekanisme slot untuk komunikasi.
  • Merangkum sepenuhnya pustaka Qt.
  • Anda boleh menggunakan IDE matang untuk reka bentuk antara muka dan menjana kod Python boleh laku secara automatik.
  • Menyediakan set lengkap kawalan tetingkap.
  • PyQt5 terdiri daripada satu siri modul Python, dengan lebih daripada 620 kelas, 6000 fungsi dan kaedah Modul utama adalah seperti berikut:
  • QtCore: Mengandungi teras. fungsi bukan GUI. Digunakan terutamanya dengan masa, fail dan folder, pelbagai data, strim, URL, fail kelas mime, proses dan benang.
  • QtGui: termasuk sistem tetingkap, pengendalian acara, imej 2D, lukisan asas, fon dan kelas teks.
  • QtWidgets: Mengandungi satu siri elemen UI untuk mencipta aplikasi desktop.
  • QtMultimedia: Mengandungi kelas untuk memproses kandungan multimedia dan memanggil API kamera.
  • QtBluetooth: Mengandungi kelas untuk mencari dan menyambung ke Bluetooth.
  • QtNetwork: Mengandungi kelas pengaturcaraan rangkaian Alat ini menjadikan pembangunan TCP/IP dan UDP lebih mudah dan boleh dipercayai.
  • QtPositioning: Mengandungi kelas penentududukan yang boleh menggunakan satelit, WiFi atau teks.
  • Enginio: Mengandungi kelas untuk memasuki dan mengurus Qt Cloud melalui pelanggan.
  • QtWebSockets: Kelas yang mengandungi protokol WebSocket.
  • QtWebKit: Mengandungi pelayar web berdasarkan WebKit2.
  • QtWebKitWidgets: Mengandungi kelas berdasarkan WebKit1 QtWidgets.
  • QtXml: Mengandungi kelas untuk memproses xml dan menyediakan alatan untuk API SAX dan DOM.
  • QtSvg: Menyediakan kelas untuk memaparkan kandungan SVG Scalable Vector Graphics (SVG) ialah format grafik berdasarkan Extensible Markup Language (XML) untuk menerangkan grafik vektor dua dimensi (Ayat ini berasal dari Wikipedia).
  • QtSql: Menyediakan alatan untuk memproses pangkalan data.
  • QtTest: Menyediakan alatan untuk menguji aplikasi PyQt5.

Pemasangan PyQt5

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

Pasang PyQt5

pip install pyqt5
pip install pyqt5-tools
Salin selepas log masuk

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.
Salin selepas log masuk

Penyelesaian:

pip install click~=7.0
Salin selepas log masuk

Konfigurasi Qt Designer

Qt Pereka bentuk menggunakan seret dan lepas untuk meletakkan kawalan dan melihat kesan kawalan dalam masa nyata untuk reka bentuk UI yang pantas.

Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!

Komposisi keseluruhan skrin:

  • "Kotak Widget" di sebelah kiri ialah pelbagai item yang boleh diseret dengan bebas Borang "MainWindow – untitled" di tengah-tengah komponen
  • ialah kanvas
  • "Objek Inspektor" di bahagian atas sebelah kanan boleh melihat struktur ui semasa
  • Kanan "Editor Hartanah" di bahagian tengah boleh menetapkan sifat komponen yang sedang dipilih
  • "Pelayar Sumber" di bahagian bawah sebelah kanan boleh tambah pelbagai bahan, seperti gambar, latar belakang, dsb.

Fail .ui (pada asasnya fail dalam format XML) akhirnya dijana, yang boleh digunakan secara langsung atau ditukar menjadi . py melalui alat pyuic5.

Konfigurasi QtDisigner

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$
Salin selepas log masuk

Konfigurasi PyUIC

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$
Salin selepas log masuk

Konfigurasi PyRCC

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$
Salin selepas log masuk

Contoh penggunaan PyQt5

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_())
Salin selepas log masuk

Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!

Antaranya:

  • Qapplication():每个GUI都必须包含一个Qapplication,argv表示获取命令行参数,如果不用获取,则可以使用[]代替。
  • QMainWindow():类似一个容器(窗口)用来包含按钮、文本、输入框等widgets。arg标识可以获取命令行执行时的参数。
  • SetGeometry是用来定义 QMainWindow() 窗口的尺寸, 语法:setGeometry(x, y, width, height ),其中x,y为屏幕上的坐标点。
  • show():用来显示窗口
  • exit(app.exec_()):设置窗口一直运行指导使用关闭按钮进行关闭

PyQt5支持的常见Widgets有:

Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!

从上到下,从左到右依次为: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_())
Salin selepas log masuk

Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!

按钮与事件:

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_())
Salin selepas log masuk

Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!

button.clicked.connect() 在按钮点击后执行特定的事件。

PyQt5实战

实战项目:简易的天气查询软件

1、使用Qt Designer设计一个界面

Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!

用到的控件有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()
Salin selepas log masuk

但是为了更好的自定义及修改上面的槽函数,可以使用External Tools – PyUIC,即可生成Weather.py,实际运行命令如下:

D:Program FilesPython36python.exe -m PyQt5.uic.pyuic Weather.ui -o Weather.py
Salin selepas log masuk

其中,我们需要把两个按钮绑定的槽函数:

# self.queryBtn.clicked.connect(Dialog.accept)
# self.clearBtn.clicked.connect(Dialog.accept)
# 修改为:
self.queryBtn.clicked.connect(Dialog.queryWeather)
self.clearBtn.clicked.connect(Dialog.clearText)
Salin selepas log masuk

最终的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", "清空"))
Salin selepas log masuk

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_())
Salin selepas log masuk

运行demo.py并执行查询后的效果:

Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!

4、将代码打包成exe文件

将.py文件打包成可执行的exe在Python中称为freezing,常用的工具有:PyInstaller, py2exe, cx_Freeze, bbfreze, py2app等。功能对比:

Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!

  • py2exe:软件更新已经不活跃,因此也就略过。
  • pyinstaller:明确支持win8、win10、理论上支持win7,,支持apple Macos, linux。pyinsaller可以打包成文件夹形式内含exe入口执行文件的形式,也可以是一个单独的exe文件。
  • fbs:基于PyInstaller,使用起来更加方便

这里选择了fbs来打包。fbs的安装方法:

pip install fbs
Salin selepas log masuk

使用方法,在命令行中输入:

fbs startproject
Salin selepas log masuk

执行完成后需要输入一些APP的名称等。完成后会生成如下目录:

Super lengkap! Rangka kerja antara muka grafik Python Panduan penggunaan PyQt5!

将刚才编写的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文件下。
Salin selepas log masuk

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!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan