PyQt5初学试验记录(一):从安装PyQt5到窗口间跳转

前言:本记录为笔者自学过程中的简单笔记,说明了从安装库到最终打包成.exe的过程,分为三个部分,供初学者参考交流,存在表述有误的部分还请读者们多多指教,下方为第一部分目录。

一、前期准备

1、安装PyQt5

使用默认的 pip install pyqt5 可能会因响应超时而失败,使用国内镜像(如下用清华的镜像)安装速度较快,第一个是 pyqt5 库,第二个是有可视化界面的工具包(Qt Designer),cmd命令如下:

$ pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
$ pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完后测试一下,如果打开了一个窗口即为成功,测试代码如下:

import sys
from PyQt5.QtWidgets import QWidget, QApplication

app = QApplication(sys.argv)
widget = QWidget()
widget.resize(300, 200)
widget.setWindowTitle("Hello, PyQt5!")
widget.show()
sys.exit(app.exec())

在这里插入图片描述

2、PyCharm工具关联设置

(笔者使用的IDE为 PyCharm )如若不想亲自写大量的代码来生成界面,就需要用到 Qt Designer,在其中把各种控件拖拖拽拽布局好,即可把重心放在功能实现上了。Qt Designer 的启动路径在 Python 安装目录下的:Lib\site-packages\pyqt5_tools\Qt\bin

就是这个程序→ 在这里插入图片描述

但是每次都从中打开过于麻烦,可以在 PyCharm 添加工具拓展,启动更加方便,下面介绍如何关联工具:
首先打开 PyCharm 的 Settings 面板,找到 External Tools;
在这里插入图片描述

添加 QtDesigner 工具,Programe 处填写上述 designer.exe 所在路径,Working directory 处填写 $FileDir$
在这里插入图片描述

添加 PyUic 工具,用于将 Qt Designer 编辑的界面文件(.ui)转为 Python 文件(.py),Programe 处填 Python 安装目录下 python.exe 的路径,Arguments 处填写 -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py,Working directory 处填写 $FileDir$
在这里插入图片描述

设置完后在菜单栏的 Tools 中找到 QtDesigner,点击启动即可,注意PyUic 非在此处使用,后文继续介绍。
在这里插入图片描述

小结:安装pyqt5真是折腾了我半天,默认载点安装太慢了还容易失败,另外from import不成功可能要从Python安装目录下Lib\site-packages里把pyqt5相关文件夹拷到项目路径下的Lib\site-packages里,这个和解释器的工作路径有关,正常安装应该没问题哈哈。

二、开始使用Qt Designer

下面为 Qt Designer 界面,左边可以拖拽各种控件至窗体,右边可简单设置控件属性,各种窗体具有不同的方法和使用情景根据需要进行选择,可以先创建一个 Widget 类型的窗体;
在这里插入图片描述

笔者使用 PyQt5 是为了给爬虫加个操作界面,最后能打包成 .exe 文件方便启动运行,下图为一个初始的功能选择窗口,点击按钮可以跳转到不同的功能页面,即为主页/导航页(本次试验中暂不进行界面美化,这个括号的内容用于为界面长得丑找借口);
https://s1.ax1x.com/2020/05/11/YGBBUx.png

通过左侧的 Push Button 控件创建按钮,同时在右侧设置按钮的名字,即为在 Python 操作的对象名,笔者的命名习惯为“控件名简写_所在窗口_功能描述”,如第一个按钮为:在主窗口点击后进入爬取基本信息的页面(因为爬取后是存入 .xlsx 所以叫 getXlsx,有点啰嗦了哈哈,命名方式并不专业,主要是为了便于记忆,以免之后找不到这个玩意儿);
在这里插入图片描述

画好界面后可以保存到项目目录下,建一个文件夹专门存放界面文件,保存生成的是一个 .ui 文件(又又提下命名哈哈= v =:功能描述+窗体类型 ),此时就要使用前文提到的 PyUic 啦!在生成的ui文件处右键找到PyUic点击即可,之后便会生成一个对应的 .py 文件,注意:每次在Qt Designer中修改了.ui后都需要 PyUic一次,并且建议不要直接修改对应 .py ,主要是不要把功能代码写进去,因为重新PyUic 后对应的 .py 也被重置了;
在这里插入图片描述

下面再建立爬取基本信息的页面 getXlsxWidget,没使用布局,控件有点多哈哈,之后慢慢分块说明。笔者所用的爬虫是用于爬取某系统的某种信息列表的,根据查询所需,设置各种控件用于接收参数,并有一些需要的功能按钮,和用于反馈信息的面板(右下那一坨灰色)。
在这里插入图片描述

如此,基本页面和控件布置完毕。
小结:切记 Qt Designer 中更新界面后,要使用 PyUic 重构 .ui 生成对应的 .py。

三、启动画面与窗口间跳转的实现

既然已经建了两个窗口啦,那么就开始实现它们之间的跳转吧哈哈哈!(至此有点兴奋,文风稍有变化)首先新建一个 .py 专门用于实现界面的各种功能,我管它叫 MainFuntion.py。接着开始码,从 PyQt5 中导入必要的模块,同时导入之前创建的界面对应的 .py;

from PyQt5.QtWidgets import QWidget,QApplication,QMessageBox
from QtFile import mainWidget,getXlsxWidget #之前建的两个页面

继续码主页的功能类,让它继承 Qwidget 和自己窗口的 Ui,在__init__中写控件关联的设置,并另外写实现功能的方法。Qt语法还是挺好理解的,如点击按钮的基本操作:“某按钮.被点击.连接执行(某方法)”;

'''--------------- # 主页功能类-----------------'''
class MainForm(QWidget,mainWidget.Ui_Form):
    def __init__(self):
        super(MainForm, self).__init__()
        self.setupUi(self)
        self.pB_main_getXlsx.clicked.connect(self.open_getXlsxWidget) # 点击pB_main_getXlsx按钮执行open_getXlsxWidget()
        self.pB_main_getDetail.clicked.connect(self.hint)
        self.pB_main_other.clicked.connect(self.hint)
        
    def open_getXlsxWidget(self): # 打开爬取基本页窗口
        self.hide() #隐藏主页窗口
        self.wid = getXlsxForm() # 实例化另一个页面的对象
        self.wid.show() # 打开新页面
        self.wid.setWindowTitle("爬取基本页信息")
        
    def hint(self):
        QMessageBox.about(self,"说明","该功能有待拓展!")

如上代码实现在主页点击按钮,打开新页面并隐藏主页,示意图见下方。其中QMessageBox.about的功能是弹出提示框;
在这里插入图片描述

接下来是实际功能页,重写关闭窗口事件,实现关闭当前窗口后返回原页面;

'''------------------- # 爬取基本页功能类 --------------------'''
class getXlsxForm(QWidget,getXlsxWidget.Ui_Form):
    def __init__(self):
        super(getDetailForm, self).__init__()
        self.setupUi(self)

    def closeEvent(self, event): #重写closeEvent(),关闭后返回主窗口
        self.wid = MainForm()
        self.wid.show()
        self.wid.setWindowTitle(strTitle)

OK!那么来试试效果吧,再加上运行代码,被注释掉的部分就是用于装B的程序启动画面啦,见下图。因为没什么可加载的东西所以手动设个sleep让画面停留一会儿,注意:在主页面打开后要finish结束启动画面;

'''-------------------# 窗口运行 ---------------------'''
if __name__ == '__main__':
    app = QApplication(sys.argv)
    widget = getXlsxForm()
    strTitle = "NewSysCrawler测试版20.4.16"
    # splash = QSplashScreen(QPixmap("./QtFile/images/welcome.png")) # 加载启动画面
    # splash.showMessage("Beta version 20.4.7", Qt.AlignLeft | Qt.AlignBottom, Qt.white) # 设置文字:左下角、白色
    # splash.setFont(QFont('Microsoft YaHei UI', 12)) # 设置字体
    # splash.show() # 显示启动画面
    # time.sleep(1.5)
    widget.setWindowTitle(strTitle)
    widget.show()
    # splash.finish(widget) # 结束启动
    sys.exit(app.exec())

在这里插入图片描述

小结:本部分核心就是“某按钮.被点击.连接执行(某方法)”,想用PyQt5实现简单的操作掌握本条足矣(雾…轻喷)。


下一部分将继续说明如何从界面获取参数,以及使用日历控件,设置按钮图标、内容提示等。

猜你喜欢

转载自blog.csdn.net/zohan134/article/details/106156402
今日推荐