首先来几张图展示一下界面。
最后附一个动图来演示一下效果:
是不是感觉还不错,接下来我们就来看看做这么一个小工具的过程吧。
一、使用环境
1.QtCreator 4.8.0
使用Qt进行界面创作的理由是它可以很方便的生成UI界面,并且制作UI界面的过程不需要任何代码的编写,这对于想要快速制作一个界面的人来说,Qt在这方面算是个不错的优点。
首先是Qt的安装。
Qt的安装很方便,在其官网上下载便可。
Qt官网地址:Qt官网.
2.PyCharm
Python的IDE有很多,我个人喜欢PyCharm,它的代码提示与补全功能在开发任何项目里都有很大的价值。
3.Python环境–Python 3.7
Python 3.7的环境已经用了很多年,个人认为比较稳定。
二、UI界面
2.1 设计UI界面
安装好Qt以后,我们就可以进行UI界面的制作了。在制作的过程中不需要编写任何代码,只需要使用Qt本身自带的组件库就可以完成基本的UI界面了,这对于不熟悉Qt的人来说是一件好事。
2.1.1 项目创建
打开Qt Creator后,点击“新建文件或项目”,选择默认的“Application”–“Qt Widgets Application”即可,之后自定义项目名称和路径,接下来一路按照默认点击“下一步”即可。
创建项目后具体的结构如图所示:
其中Resources为资源文件,其中包括之后界面设计用到的图标,logo等图片文件,Resources的创建方法为:右键项目名称,点击“Add New…”,选择“Qt”–“Qt Resources Files”即可完成Resources的创建。
2.1.2 界面设计
在项目列表中点击“Forms”—”MainWindow.ui“后,便出现了如图所示的设计界面,然后便根据情况,通过拖拽左侧的组件设计自己需要的界面。
在拖拽组件后,在右侧有相关组件的属性,根据实际情况修改属性,而在其中,修改组件的名称至关重要,因为在之后使用Python代码编写具体功能时需要使用组件的名称。
2.2 使用QSS对界面进行美化
和CSS类似,Qt有着自己的界面优化方案。Qt样式表(Qt Style Sheets,QSS)是用于定制用户界面的强有力的机制,其概念、术语是受到HTML中的级联样式表(Cascading Style Sheets,CSS)启发而来。而在该界面的制作中,我选择了直接在每个组件内加入QSS,但这耗费的一定的时间。
修改QSS的方法为:右键单击你想要修改的组件,选择”改变样式表“,在弹出的文本框中加入QSS,即可完成界面的美化。
2.3 将UI界面转换为.py文件
在将在Qt制作的UI文件之后,就是将其转换为.py文件,在操作之前需要安装PyQt5,而安装PyQt5的方法很简单,在PyPI网站上有最新的版本,直接使用pip安装即可:
pip3 install PyQt5
直接连接PyPI服务器可能速度比较慢,我们可以使用清华大学的镜像网站:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple PyQt5
使用PyQt5的两个可执行程序进行转换,分别是:pyuic5.exe和pyrcc5.exe。
- pyuic5.exe是用于将Qt Designer(或Qt Creator内置的UI Designer)可视化设计的界面文件(.ui文件)编译转换为Python程序文件的根据软件,是使用PyQt5设计GUI程序最常使用的根据软件
- pyrcc5.exe是用于将Qt Creator里设计的资源文件(.qrc文件)编译转换为Python程序文件的工具软件,资源一般存储了图标、图片等UI设计资源。
这两个工具软件使用起来也很方便,Win+R打开控制台后首先使用cd跳转到UI文件的地址,然后使用pyuic5和pyrcc5即可。
例如:假设文件HelloWorld.ui保存在目录“C:\admin\UI”,执行下面的指令即可完成转换:
cd C:\admin\UI
pyuic5 -o ui_HelloWorld.py HelloWorld.ui
同理,将资源文件转换为Python文件的方法如下所示:
cd C:\admin\UI
pyrcc5 res.qrc -o HelloWorld.ui
而为了节约时间,方便操作,我们可以建立一个批处理文件app.bat。你只要双击该文件便可以快速将UI文件和资源文件转换为Python文件。例如:假设你所建立的Qt项目名称为“QtApp”,所在路径为“C:\admin”,那么你就可以在该路径下新建一个批处理文件,文件内容如下:
echo off
rem将子目录QtApp下的UI文件复制到当前目录下
copy .\QtApp\HelloWorld.ui HelloWorld.ui
rem用pyuic5编译UI文件
pyrcc5 res.qrc -o HelloWorld.ui
rem用pyrcc5编译UI文件
pyrcc5 .\QtApp\res.qrc -o HelloWorld.ui
在进行如上所示的操作后,同时生产了UI文件和资源文件,这时你就可以在目录中看到编译完成后的Python文件了。
三、项目框架
3.1 ui_MainWindow.py------UI界面转.py文件
UI文件编译后的内容是一个类,如下所示:
pyuic5通过编译,实际上创建了一个叫做Ui_MainWindow的类,在这个类里包含了UI文件中各个组件的相关属性,以及涉及的资源文件等。
3.2 res_re.py------资源文件
打开编译后的资源文件后,查看它的内容,你会发现文件的内容如图所示:
编译完成后的资源文件里保存的是相关图片的十六进制编码数据,还有相关的管理代码。
3.3 myFigureCanvas.py------自定义绘图组件类
我们在设计这个UI的时候,是使用matplotlib等绘图库的,为了方便设计,设计一个从QWidget继承的绘图组件类QmyFigureCanvas,在这个类里创建一个FigureCanvas对象、一个Figure对象和一个NavigationToolBar工具栏,构成一个绘图组件。在进行界面设计的时候,我们只要将放置的QWidget组件提升为QmyFigureCanvas类,就可以完成可视化的展示,其完整代码如下所示:
from PyQt5.QtWidgets import QWidget
import matplotlib as mpl
from matplotlib.backends.backend_qt5agg import (FigureCanvas,
NavigationToolbar2QT as NavigationToolbar)
from PyQt5.QtWidgets import QVBoxLayout
import matplotlib.pyplot as plt
class QmyFigureCanvas(QWidget):
def __init__(self, parent=None, toolbarVisible=True,showHint=False):
super().__init__(parent)
self.figure=plt.figure() #公共的figure属性
figCanvas = FigureCanvas(self.figure) #创建FigureCanvas对象,必须传递一个Figure对象
self.naviBar=NavigationToolbar