常見GUI框架
- PyQt5:Qt是一個跨平台的 C 圖形使用者介面庫。 QT一度被諾基亞擁,後來賣給芬蘭的軟體公司Digia Oyj。 PyQt5是基於Digia公司Qt5的Python接口,由一組Python模組構成。 PyQt5本身擁有超過620個類別和6000函數及方法。在可以運行於多個平台,包括:Unix, Windows, and Mac OS。
- Pyside6:Pyside是QT公司官方提供的Python包,上一版本為Pyside2,對應的是QT5,最新版命名規則進行了調整,更改為Pyside6,對應的是QT6版本。由於官方出品的比較看好,缺點是發布比較晚,網路上的資料沒有PyQt5以上。
- Tkinter:Python內建的GUI框架,使用TCL實現,Python中內嵌了TCL解釋器,使用它的時候不用安裝額外的擴充包,直接import,跨平台。缺點在於UI佈局全靠程式碼實現,只有15種常用部件,顯示效果簡陋。
- PySimpleGUI:PySimpleGUI 是 Tkinter 一層包裝。使用 PySimpleGUI 實作自訂 GUI 所需的程式碼量比使用 Tkinter 直接編寫相同的 GUI 要少得多。
- WxPython:wxPython是Python語言對流行的wxWidgets跨平台GUI工具庫的綁定。用得比較廣泛,跨平台,C 寫,文件少,使用者可能就需要根據程式內容對不同平台中的GUI程式碼做一些調整。遇到問題不好解決,程式碼佈局控件,不直覺。
- Wax:基於wxPython ,為克服wxPython的問題而製作的一個套件。
- Kivy:主要針對多點觸控程序,智慧型手機平板等,也可以在沒有觸控螢幕功能的系統上,全平台支援(Windows, Linux, Mac OS X, Android and iOS .)使用Python和cython編寫,中文支援差,需要自己下載中文庫並且制定路徑。
- BeeWare:Write once. Deploy everywhere.需要與Kivy搭配使用。
- Toga:一個使用Python開發原生APP的GUI工具包。 Toga由一個具有共用介面的基礎元件庫組成,以簡化與平台無關的GUI開發。 Toga適用於Mac OS、Windows、Linux(GTK)以及Android和iOS等行動平台。
- Eel:一個輕量級的Python 庫,用於製作簡單的類似於Electron(但是比它更輕量) 的離線HTML/JS GUI 應用程序,並具有對Python 功能(capabilities )和庫的完全存取權限。
- Flexx:一個純 Python 工具包,用來創建圖形化介面應用程式。其使用 Web 技術進行介面的渲染。你可以用 Flexx 來建立桌面應用,同時也可以匯出一個應用到獨立的 HTML 文件。因為使用純 Python 開發,所以 Flexx 是跨平台的。只需要有 Python 和瀏覽器就可以運作。
- pywebview是圍繞 webview 元件的輕量型跨平台包裝器(wrapper),它允許在其自己的本機 GUI 視窗中顯示 HTML 內容。它使您可以在桌面應用程式中使用 Web 技術,同時盡可能隱藏使用瀏覽器建立GUI的事實。
- enaml:一種能讓你用最小的努力就可以實現高品質GUI介面的的Python框架,也是一種獨特的程式語言。 enaml將聲明性語言與基於約束的佈局系統結合在一起,使用戶可以輕鬆定義靈活佈局的UI。 enaml應用程式可以在任何支援Python和Qt的平台上運行。
個人想法:太多學不完,先學PyQt5,原因是資料多,學有餘力再學pyside6,最後看下PySimpleGUI,看能否解決一些簡單問題。
PyQt5簡介
PyQt是Qt框架的Python語言實現,由Riverbank Computing開發,是最強大的GUI庫之一。 PyQt提供了一個設計良好的視窗控件集合,每個PyQt控件都對應一個Qt控件,因此PyQt的API介面與Qt的API介面很接近,但PyQt不再使用QMake系統和Q_OBJECT巨集。
PyQt5提供GPL版和商業版證書,自由開發者可以使用免費的GPL許可,如果需要將PyQt用於商業應用,則必須購買商業許可。
PyQt5特性如下:
- 基於高效能的Qt的GUI控制集。
- 能夠跨平台運作在Linux、Window和Mac OS系統上。
- 使用訊號槽機制進行通訊。
- 對Qt庫進行完全封裝。
- 可以使用成熟的IDE進行介面設計,並自動產生可執行的Python程式碼。
- 提供一整套種類齊全的視窗控制項。
- PyQt5是由一系列Python模組組成,有超過620個類,6000個函數和方法,主要模組如下:
- QtCore:包含了核心的非GUI 的功能。主要和時間、檔案與資料夾、各種資料、流、URLs、mime 類別檔案、進程與執行緒一起使用。
- QtGui:包含了視窗系統、事件處理、2D 圖像、基本繪畫、字體和文字類別。
- QtWidgets:包含了一系列創建桌面應用程式的 UI 元素。
- QtMultimedia:包含了處理多媒體的內容和呼叫攝影機 API 的類別。
- QtBluetooth:包含了尋找和連接藍牙的類別。
- QtNetwork:包含了網路程式設計的類,這些工具能讓 TCP/IP 和 UDP 開發變得更加方便和可靠。
- QtPositioning:包含了定位的類,可以使用衛星、WiFi 甚至文字。
- Enginio:包含了透過用戶端進入和管理 Qt Cloud 的類別。
- QtWebSockets:包含了 WebSocket 協定的類別。
- QtWebKit:包含了一個基底 WebKit2 的 web 瀏覽器。
- QtWebKitWidgets:包含了基於 QtWidgets 的 WebKit1 的類別。
- QtXml:包含了處理 xml 的類,提供了 SAX 和 DOM API 的工具。
- QtSvg:提供了顯示SVG 內容的類,Scalable Vector Graphics (SVG) 是一種是一種基於可擴展標記語言(XML),用於描述二維向量圖形的圖形格式(這句話出自維基百科)。
- QtSql:提供了處理資料庫的工具。
- QtTest:提供了測試 PyQt5 應用的工具。
PyQt5的安裝
由於後期要使用fbs打包,fbs對Python 3.7以後的版本可能有相容問題,所以我選擇了Python 3.6 .8進行了整個環境的搭建。主要內容為:Python PyCharm PyQt5
安裝PyQt5
雷雷其中pyqt5-tools為Qt Designer拖曳式的介面設計工具。安裝過程中可能會報如下錯誤:
qt5-tools 5.15.2.1.2 has requirement click~=7.0, but you'll have click 8.0.1 which is incompatible.
解決方案:
pip install click~=7.0
Qt Designer的設定
Qt Designer 是透過拖拽的方式放置控件,並即時查看控件效果進行快速UI設計。
整個畫面的構成:
- # 左邊的「Widget Box」就是各種可以自由拖曳的元件
- 中間的「MainWindow – untitled」窗體就是畫布
- 右上方的」Object Inspector」可以檢視目前ui的結構
- 右側中部的」Property Editor」可以設定目前選取組件的屬性
- 右下方的」Resource Browser」可以新增各種素材,例如圖片,背景等等
最終產生.ui檔案(實質上是XML格式的檔案),可直接使用,也可以透過pyuic5工具轉換成.py檔案。
QtDisigner設定
在Pycharm中,依序開啟File – Settings – Tools – External Tools,點選Create Tool,設定如下:
Name: QtDisigner Program : D:Program FilesPython36Libsite-packagesqt5_applicationsQtbindesigner.exe # 请根据实际修改 Working directory: $FileDir$
PyUIC設定
PyUIC主要是把Qt Designer產生的.ui檔換成.py檔。
在Pycharm中,依序開啟File – Settings – Tools – External Tools,點選Create Tool,設定如下:
Name: PyUIC Program : D:Program FilesPython36python.exe # 当前Python目录,请根据实际修改 Arguments: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py Working directory: $FileDir$
PyRCC設定
PyRCC主要是把編寫的.qrc資源檔換成.py檔。在Pycharm中,依序開啟File – Settings – Tools – External Tools,點選Create Tool,設定如下:
Name: PyRCC Program: D:Program FilesPython36pyrcc5.exe # 当前rcc工具目录,请根据实际修改 Arguments: $FileName$ -o $FileNameWithoutExtension$_rc.py Working directory: $FileDir$
PyQt5使用範例
#建立一個空白的介面:
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_())
其中:
- 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文件下。
以上是超全! Python圖形介面框架PyQt5使用指南!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python的靈活性體現在多範式支持和動態類型系統,易用性則源於語法簡潔和豐富的標準庫。 1.靈活性:支持面向對象、函數式和過程式編程,動態類型系統提高開發效率。 2.易用性:語法接近自然語言,標準庫涵蓋廣泛功能,簡化開發過程。

Python因其簡潔與強大而備受青睞,適用於從初學者到高級開發者的各種需求。其多功能性體現在:1)易學易用,語法簡單;2)豐富的庫和框架,如NumPy、Pandas等;3)跨平台支持,可在多種操作系統上運行;4)適合腳本和自動化任務,提升工作效率。

可以,在每天花費兩個小時的時間內學會Python。 1.制定合理的學習計劃,2.選擇合適的學習資源,3.通過實踐鞏固所學知識,這些步驟能幫助你在短時間內掌握Python。

Python適合快速開發和數據處理,而C 適合高性能和底層控制。 1)Python易用,語法簡潔,適用於數據科學和Web開發。 2)C 性能高,控制精確,常用於遊戲和系統編程。

學習Python所需時間因人而異,主要受之前的編程經驗、學習動機、學習資源和方法及學習節奏的影響。設定現實的學習目標並通過實踐項目學習效果最佳。

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)