hkq666 发表于 2023-8-5 18:10

记录+总结:学习PySide6 GUI开发及打包

本帖最后由 hkq666 于 2023-8-5 18:15 编辑

# 写在前面
业余学习Python,给自己写几个小工具用,最近学了点 PySide6和GUI打包,记录一下,也希望能帮到遇到类似问题的小伙伴
# 1 文件组织
``` python
MyGUI/
-- Res/# 非代码文件
-- scr/# 代码文件
-- scr/ main.py# 入口文件
-- scr/ script/ CallMainPage.py, CallSecondPage.py# 页面逻辑代码 # CallMainPage为主页面
-- scr/ script/ ui/ MainPage.py, SecondPage.py # 页面文件
```
## main.py
``` python
import sys
from PySide6.QtWidgets import *
from script.CallMainPage import MainPage

def main():
    app = QApplication(sys.argv)
    mainwindow=MainPage()
    mainwindow.show()
    app.exec()

if __name__ == "__main__":
    main()
```
# 2 GUI页面组织
## 2.1 GUI需求——TabWidget
初步想以后再写几个小工具,把这些工具都整合到一个GUI中,选择了TabWidget容器,每个工具一个页面,也是一个TabWidget中的Tab页面
## 2.2 TabWidget添加Tab页面
1. 主页面:创建一个Widget窗口,添加一个TabWidget容器,仅保留一个Tab页面
2. 其他Tab页面:创建一个Widget窗口即可

``` python
# 此文件为主页面逻辑页面
# 省略其他不重要代码
# 仅作示意

from CallSecondPage import SecondPage
# 导入其他页面文件
self.tabwidget.addTab(SecondPage(),'第二页')
# 添加页面
```
## 2.3 动态添加Tab页面
后续添加了新功能只需将相应的类导入,再addTab即可,但这样做每次都需要更改相应的py文件,未免太过麻烦,想了个懒人方法,加一个tab.txt文件作为配置文件,将所有想添加的页面的文件名都写在tab.txt中,一行一个,再在主页面逻辑代码内将其读入,如此则后面都不用更改其他代码了,只需将不同页面的代码放入相应文件夹,再在tab.txt中加一行就行,而要是哪个功能不想要了,懒点也只需在tab.txt中删了就行,个人小工具也不需要考虑性能啊什么的,方便最重要
思路有了,主要的代码如下
``` python
exec("from script.Call" + tabfile_name + " import " + tabfile_name)
exec("self.tabWidget.addTab(" + tabfile_name + "(), " + "'" + tabname + "')")
# 若 tabfile_name='SecondPage'tabname='第二页',则上述代码执行后为
# from script.CallSecondPage import SecondPage
# self.tabWidget.addTab( SecondPage(), '第二页')
# 如此则可在 tab.txt中写入各种东西,不用改动其他代码
```
# 3 GUI打包
GUI打包参考怎么样打包 pyqt 应用才是最佳方案?或者说 pyqt 怎样的发布方式最优? - 韦易笑的回答 - 知乎
https://www.zhihu.com/question/48776632/answer/2336654649

以上,最近的学习思路,仅做记录。

java420 发表于 2023-8-5 18:43

楼主优秀啊

平淡最真 发表于 2023-8-5 19:26

打开那个打包的链接看了一下,麻烦的要死。
我的评价是:不如pyinstaller

Imagawa-451 发表于 2023-8-5 20:45

感谢分享

sjr8791 发表于 2023-8-5 22:46


感谢分享!

acs 发表于 2023-8-6 02:14

总结到位

86618513 发表于 2023-8-6 09:20

页: [1]
查看完整版本: 记录+总结:学习PySide6 GUI开发及打包