大家是怎么学习Pyqt5的?

本文最后更新于 2025年8月17日 下午

忽略 pyqt/pyside 以及大的版本号,以前的我会好好看官方文档和示例,现在的我只想拥抱大模型快速实现功能。

在了解一些基础 GUI 专业名词和大致的框架后,剩下的就是功能实现的细节。而大多数常规功能都可以通过大模型快速问出来。

比如我写的圣遗物评分工具,前些日子有群友反映有些词条的系数配置不是非常合理。

比如常规评分暴击系数配 2,暴伤系数配 1,大攻击配 1,小攻击配 0.15。现在角色+专武的攻击力差不多有 1000 左右,1% 大攻击约等于+10 攻击力,评分为 1;而小攻击配 0.15,同样的 10 点攻击加了 1.5 评分,造成小攻击评分偏高。

一番沟通后,我觉得可以做成配置项,有高级需求的专业玩家可以手动修改。由于之前的配置项都做成了 json 文件,改动起来专业性更高,所以一直都有做成 GUI 的想法。

所以现在的需求是在原来主页面的基础上,增加一个设置页面,在设置页面中可以对一些词条系数进行修改。

由于之前都是在一个页面完成所有 GUI 布局的,这次新加页面的需求暂无思路。这两年  AI 辅助编程发展迅速,所以第一时间也是想到了能不能问问大模型得到想要的结果。

pyside6 如何一个窗口内实现多个页面?

大模型很快就给出了几个可能的方法:

大模型给出的方法总结

我觉得 QStackedWidget 比较合适,于是进一步问实现细节:

使用 QStackedWidget 方法,我想要拆分第二个页面的代码到另一个 py 文件中

大模型很快给出了基本框架,包括创建第二个页面的.py 文件,两个页面间的跳转。以下是首页控制切换的核心代码逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# main.py
from PySide6.QtWidgets import (
QApplication, QWidget, QVBoxLayout, QPushButton,
QStackedWidget, QLabel
)
from page2 import Page2 # 导入第二个页面

class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("多页面切换示例")

self.stack = QStackedWidget()

# 页面 1
self.page1 = QWidget()
layout1 = QVBoxLayout()
layout1.addWidget(QLabel("这是页面 1"))
self.btn_go = QPushButton("跳转到页面 2")
layout1.addWidget(self.btn_go)
self.page1.setLayout(layout1)

# 页面 2(从外部文件导入)
self.page2 = Page2()

# 添加到堆栈
self.stack.addWidget(self.page1)
self.stack.addWidget(self.page2)

# 连接按钮信号
self.btn_go.clicked.connect(lambda: self.stack.setCurrentWidget(self.page2))
self.page2.btn_back.clicked.connect(lambda: self.stack.setCurrentWidget(self.page1))

# 主布局
main_layout = QVBoxLayout()
main_layout.addWidget(self.stack)
self.setLayout(main_layout)

if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec()

简单看过代码后,我发现其中一个问题。大模型给出的示例代码其实在第一个页面中已经包含了 2 个页面逻辑,使用 Layout 包了一层 StackedWidget,StackedWidget 里包了两个页面。我现在没有外面那层 Layout,感觉整体都需要重构,于是再次和大模型友好交流:

关于 pyside6 多页面,我原先只考虑了一个页面,布局都用了 self.layout 快速实现,现在增加一个页面,如何快速修改?

大模型也很快指出,只需要将原来第一个页面封装成 QWidget 类,然后在新的主窗口中导入原先主页面的类和新的设置页的类即可。具体页面项目结构如下:

大模型给出的页面结构

随后我将原来整段页面代码(大概 500 多行)提供给了大模型,帮我生成三份.py 文件。试着运行了下居然可以跑通,且原页面功能都基本完全实现。只是一些特殊的操作逻辑会报错,我看着报错说明快速定位问题,补充了几个缺失的全局变量就完全没问题了。

最值得称赞的是,大模型提供的代码帮我原先页面的初始化部分也重新整理了。原先混在一起的 UI、数据、交互事件它居然比较合理地拆成了三份 inti_ui(self), inti_data(self), init_events(self)。

最后补充了一些业务细节,页面上已经非常完善,包括两个页面的 SizePolicy 不会互相影响,避免页面很空等等。之后有时间再补充数据修改的逻辑即可,感觉 AI 辅助编程大大提升了我的效率。

首页,点击设置跳转设置页

设置页,可修改词条系数,保存后回到首页

具体项目可参考:刻晴办公桌


大家是怎么学习Pyqt5的?
https://skeathytomas.github.io/post/大家是怎么学习pyqt5的?/
作者
Skeathy
发布于
2025年7月15日
许可协议