概述
python-GUI编程-pyqt5-学习记录
文章目录
- python-GUI编程-pyqt5-学习记录
- GUI框架介绍
- QT和pyqt5
- 介绍
- pyqt5开发环境配置
- pyqt5基本组件
- **学习视频地址**
- 选项卡
- 其他资源
- 总结
- 打包和制作安装包
- 网络资源
- 总结
- 问题记录
- 1.如何从主页面跳转到子页面,并且传参数给子页面?
- Bug记录
- 1.执行添加操作后,界面直接退出了
- 2.显示模型信息消时,无法显示,也没有提示具体的错误信息
GUI框架介绍
QT和pyqt5
介绍
qt是一个跨平台的语言,一次运行,到处运行。qt是用C++写的,为了能适应python语言,出了pyqt.
pyqt5开发环境配置
- Pycharm Qt5开发环境配置
- PyCharm如何使用Qt Designer
注意:如果配置了pycharm的external tool,右击项目不显示,可以打开external tool点击apply,然后重启pycharm试试。
pyqt5基本组件
学习视频地址
https://www.bilibili.com/video/BV1e64y1T7PD?p=2
最终效果如下图
选项卡
-
先设置选项卡
-
设置选项卡大小
-
再设置选项卡中的每个标签页
- 设置标签
- 选择其中的组件
- 选择组布局方式
- 将组件添加到布局方式中
- 将选择组件布局设置成改标签的布局
-
将该标签添加到选项卡中
-
例子如下:
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目前理解是整个窗口界面
打包和制作安装包
网络资源
- Python3.x+Pyqt5+Pyinstaller实现打包Python窗体程序为*.exe可执行文件
- Inno Setup 5.5.9(a) 软件实现把由“Python3.x+Pyqt5+Pyinstaller实现打包Python窗体程序为*.exe可执行文件”为标准安装程序文件
- 使用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中重复关闭数据库,出现错误,导致退出程序
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-GUI编程-pyqt5-学习记录python-GUI编程-pyqt5-学习记录的全部内容,希望文章能够帮你解决python-GUI编程-pyqt5-学习记录python-GUI编程-pyqt5-学习记录所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复