python-GUI编程-pyqt5-学习记录

python-GUI编程-pyqt5-学习记录

文章目录

  • python-GUI编程-pyqt5-学习记录
    • GUI框架介绍
    • QT和pyqt5
      • 介绍
      • pyqt5开发环境配置
    • pyqt5基本组件
      • **学习视频地址**
      • 选项卡
      • 其他资源
      • 总结
    • 打包和制作安装包
        • 网络资源
        • 总结
    • 问题记录
      • 1.如何从主页面跳转到子页面,并且传参数给子页面?
    • Bug记录
      • 1.执行添加操作后,界面直接退出了
      • 2.显示模型信息消时,无法显示,也没有提示具体的错误信息

GUI框架介绍

python-GUI编程-pyqt5-学习记录_第1张图片

QT和pyqt5

介绍

qt是一个跨平台的语言,一次运行,到处运行。qt是用C++写的,为了能适应python语言,出了pyqt.

pyqt5开发环境配置

  1. Pycharm Qt5开发环境配置
  2. PyCharm如何使用Qt Designer

注意:如果配置了pycharm的external tool,右击项目不显示,可以打开external tool点击apply,然后重启pycharm试试。

pyqt5基本组件

学习视频地址

https://www.bilibili.com/video/BV1e64y1T7PD?p=2

python-GUI编程-pyqt5-学习记录_第2张图片

python-GUI编程-pyqt5-学习记录_第3张图片

最终效果如下图

python-GUI编程-pyqt5-学习记录_第4张图片

选项卡

  • 先设置选项卡

  • 设置选项卡大小

  • 再设置选项卡中的每个标签页

    • 设置标签
    • 选择其中的组件
    • 选择组布局方式
    • 将组件添加到布局方式中
    • 将选择组件布局设置成改标签的布局
  • 将该标签添加到选项卡中

  • 例子如下:

    self.bottom_left_tabwidget=QTabWidget()     self.bottom_left_tabwidget.setSizePolicy(QSizePolicy.Preferred,QSizePolicy.Ignored)
    #标签一
    tab1=QWidget()
    tablewidget=QTableWidget(10,10)
    tab1hbox=QHBoxLayout()
    tab1hbox.addWidget(tablewidget)
    tab1.setLayout(tab1hbox)
    self.bottom_left_tabwidget.addTab(tab1,'表格')   
    
    

其他资源

  • [工程-学习笔记] Pyqt5常用组件

总结

  • 先想好一个主布局,例如利用网格布局

  • 然后想好每个小布局

  • 对于小布局

    • 先设置好其中的组件
    • 设置其布局样式
    • 将组件添加到布局中
    • 将布局添加到当前函数的self中
  • 调用小布局的函数

  • 设置小布局在主布局中的位置

  • 将主布局添加到当前的self中

    注:self目前理解是整个窗口界面

打包和制作安装包

python-GUI编程-pyqt5-学习记录_第5张图片

网络资源
  1. Python3.x+Pyqt5+Pyinstaller实现打包Python窗体程序为*.exe可执行文件
  2. Inno Setup 5.5.9(a) 软件实现把由“Python3.x+Pyqt5+Pyinstaller实现打包Python窗体程序为*.exe可执行文件”为标准安装程序文件
  3. 使用pyinstaller打包多个python文件
总结

要先打包出exe文件,再将exe文件制作成安装包

打包

  • 安装python打包软件pyinstaller
  • 分单个文件打包还是多个文件打包 ,多文件打包具体见网络资源3
    • 选择打包方式
  • 打包完得到exe文件
  • 运行exe文件,如果闪退,不知道什么原因
    • 通过cmd进入dos命令行窗口
    • 用指令cd /d e:\software (跳转到其他硬盘的其他文件夹,注意此处必须加/d参数。否则无法跳转)进入打完后,exe的存放位置,在这里运行exe,就知道报什么错误了
    • 根据错误修改bug

制作安装包

  • 用制作安装包的软件制作,本文选用的是inno Setup,具体操作见上网络资源2

问题记录

1.如何从主页面跳转到子页面,并且传参数给子页面?

答:可以通过信息和槽函数来实现,主要四步

  • 在主页面定义信号

  • 在子页面定义槽函数

  • 连接信号和槽函数

  • 主页面发送信号

    这样主页面的信号就可以传到子页面,主页面发送信号后,会自动调用子页面的槽函数,并将值传给子页面

    #主页面
    ui, _ = loadUiType('main.ui')
    class MainApp(QMainWindow, ui):
        # 定义构造方法
        def __init__(self):
            QMainWindow.__init__(self)
            self.setupUi(self)
            sendid = pyqtSignal(str)#1.信号,并指定传递字符串类型参数##########
        # 更新实验信息
        def updateTable(self, id):
            self.update_app = update.updateAPP()
            self.sendid.connect(self.update_app.get)#3.子页面的get函数#########
            self.sendid.emit(id)#4.主页面发送信号给子页面#######
            self.update_app.show()
    #子页面
    update, _ = loadUiType('update.ui')
    class updateAPP(QWidget, update):
        def __init__(self):
            QWidget.__init__(self)
            self.setupUi(self)
        #2.面的槽函数############
        def get(self, exp_id):
            print('信号:', id)
            self.save_exp_id = exp_id
            self.showExperimentInfo(exp_id)
    

Bug记录

1.执行添加操作后,界面直接退出了

原因:finally中重复关闭数据库,出现错误,导致退出程序

python-GUI编程-pyqt5-学习记录_第6张图片

2.显示模型信息消时,无法显示,也没有提示具体的错误信息

原因:self.model_input_steps.setText(model_data[5])
self.model_output_steps.setText(model_data[6])中model_data[5],model_data[6]中的值都是int类型的(因为数据库中被设置成了int),但是model_input_steps和model_output_steps中的内容是char字符类型,因此类型不符合,出现错误。

解决:把数据库中input_steps,output_steps两个属性改成varchar类型.

# 显示实验信息
    def showModelInfo(self, model_id):
        conn = get_conn()
        cur = conn.cursor()
        sql = "select model_name,model_type,model_introduce,model_input,model_output,input_steps,output_steps from model where model_id=%s"
        cur.execute(sql, model_id)
        model_data = cur.fetchone()
        print(model_data)
        self.model_name.setText(model_data[0])
        self.model_type.setText(model_data[1])
        self.model_desc.setPlainText(model_data[2])
        self.model_input.setText(model_data[3])
        self.model_output.setText(model_data[4])
        self.model_input_steps.setText(model_data[5])
        self.model_output_steps.setText(model_data[6])
        close_conn(conn, cur)

你可能感兴趣的:(python,python,qt5)