您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

超全!Python图形界面框架PyQt5使用指南!

2025/8/3 0:18:10发布29次查看
常见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
pip install pyqt5 pip install pyqt5-tools
其中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使用指南!的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product