一、前言
PyQt5很早就用过,并写过几篇教程,在我CSDN博客里也能看到之前的内容,不过当时的我还是保留了一些东西,现在看来这不是一个很好的习惯,这段时间我需要用到PyQt写小程序,但在一开始就卡壳了,回头翻翻自己的文章,也没什么很大的收获,最后费了不少精力才解决,所以我想重启文章,也是一种记录。
二、开发环境
操作系统:Deepin V20(Debian10)
IDE:PyCharm 2020.2(Community Edition)
Python版本:3.7.3
PyQt版本:5.15.0
具体的下载安装这里就不过多赘述,这里就讲讲如何给自己的项目进行PyQt的配置。我的开发环境虽然是Linux,但由于软件、语言都具有跨平台的特性,所以可以相同。
PyCharm如果英文版用不惯想要汉化,可以去下载汉化包,虽然汉化不完全,但基本的汉化都有,为了保证文章的通用性,我就用英文版,其实真正用起来,上手了就没什么难的,真正操作的也就这么几个按键,建议用原版。
三、配置
1.创建工程
为了给开发有个干净的环境,不会因为项目的积累导致最后系统环境变得很杂乱,所以在一开始不要直接在命令行用pip下载Python库,我们在PyCharm里面用虚拟环境Venv将项目隔开来。
2.配置PIP
由于我们使用了虚拟环境,所以在每个项目了都需要单独安装python库,这个安装直接在PyCharm里进行。软件默认是官方源,国内访问起来速度很慢,应此需要换成国内的pip源。
这里使用清华的pip源:
https://pypi.tuna.tsinghua.edu.cn/simple
按照此路径打开至设置界面:
File > Settings > Project > Python Interpreter
点开上图红圈位置"+",进入库管理界面
再点开上图红圈的"Manage Repositiories"
最后把官方的源给删除,将清华源添加进去,然后确定之后,回到上个界面点下刷新就能看到清华源的库啦。
3.安装PyQt5及相关工具
在库管理界面搜索"pyqt5",安装下面2个库:“pyqt5”和"pyqt5-tools",如果安装失败了可以尝试换个姿势多试几次。
4.配置PyQt5工具
安装完PyQt后,我们还需要配置一下工具,即QtDesigner和PyUic:
QtDesigner:可视化窗口开发工具
PyUic:将QtDesigner的ui文件转换成Python识别的py文件
来到以下路径:
File > Settings > Tools > External Tools
按下面两张图创建2个工具:
QtDesigner的具体参数如下:
Program:$FileDir$/venv/bin/pyqt5designer
Arguments:$FileName$
Program:$FileDir$
PyUic的具体参数如下:
Program:$FileDir$/venv/bin/pyuic5
Arguments:$FileName$ -o $FileNameWithoutExtension$.py
Program:$FileDir$
这两个工具的具体使用,在下面Demo里进行演示。
5.Demo实操
要实现的功能如下:按下按钮,界面上的标签文字更改为"hello"
步骤如下:
在External Tools里打开QtDesigner,我们就能进入设计器的界面。
第一次打开可能会报错,因为我们写了参数,而此时什么文件都没有,忽略即可。
我们新建一个Widget页面,这里有三类页面可选:MainWindow、Widget、Dialog,简单说明一下:
MainWindow:一般作为软件的主窗口,带有工具栏和状态栏。
Widget:一般用作子窗口,可以是一个软件里面的不同功能界面。
Dialog:一般用作对话窗口,临时弹出输入或确定一些内容之类的。
这里我们随便选一个就好啦,这里选Widget。
我们来看下整个QtDesigner的界面功能,如下图所示:
从控件工具箱拖拽出一个label标签和pushbutton按钮进行布局,界面就完成里。
接下去需要将按钮的信号和槽进行关联,这里的“信号”相当于田径比赛的信号枪发出信号,“槽”就是我们听到这个指定的信号之后会做出的反映,将信号和槽关联起来就能实现我按下按钮后触发预定的python函数。
点击下图红圈里的按钮进入关联界面:
切换到界面后,鼠标按住按钮可以拖拽出一条线,可以直接连到label上进行关联,也可以拉到界面空白处,其实就是和谁关联的问题,如果不确定或者想实现更多的功能,你可以拖到界面空白处,我们都是可以在python里获取到的。
随后就会弹出一个窗口,左半部分是对信号的选择,我这选择click(),也就是被按下的时候发送信号,有半部分没有内容,没关系,我们点Edit按钮,自己添加一个。
最终创建了一个名为btn_clicked()的槽,这也是我们在python编程中对应函数的名字。
在点击OK按钮后,设计器右边自动就生成了信号与槽的内容,看一下也能大致理解其工作过程。
至此界面设计部分全部完成,我将其保存在项目的根目录,命名为"myWindow.ui"。我们回到PyCharm,右击“myWindow.ui”找到“External Tools”里的Py2Uic,将"myWindow.ui"转换为"myWindow.py",打开"myWindow.py"也可以看到里面的内容。
在软件编写的过程中,我们肯定会对界面不断进行添加、修改,所以ui文件肯定不能动,我们需要用另外的py文件来驱动,这里在"main.py"里进行编写,代码如下:
# Author: 斜影重阳xycy # Date: 2020.8.27 import sys from PyQt5 import QtWidgets from myWindow import Ui_Form class MyWin(QtWidgets.QMainWindow, Ui_Form): # 继承QtDesigner设计的界面 def __init__(self): # 类初始化 super().__init__() # 用父类的初始化方法来初始化继承的属性 self.setupUi(self) # UI初始化 def btn_clicked(self): # 定义槽函数 self.label.setText("Hello") # 改变label的文本属性 if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) myShow = MyWin() myShow.show() sys.exit(app.exec_())
然后点击右上角的运行绿色小三角,看看效果吧~
四、总结
QT开发本身大大提高里我们的开发效率,现在借了Python的东风,更是降低了开发的门槛,例如QT本身自带了很多的数据类型,强大但有些复杂,我们就能用Python的数据类型来代替,强强联手,所向无敌。
本文地址:https://blog.csdn.net/gan19951101/article/details/108252137
希望与广大网友互动??
点此进行留言吧!