PySide6 Win10记事本从零到一——第三章 记事本主窗口基础
本章摘要:本章介绍了如何使用PySide6实现记事本主窗口界面。主要内容包括界面元素分析(菜单栏、文本编辑区、状态栏)、基于QMainWindow的主窗口框架实现,以及一个基本的记事本窗口代码示例。通过面向对象编程方式,创建了包含文件菜单、纯文本编辑区和状态栏的简单记事本界面,并提供了优化边框显示的解决方案。最后还给出了扩展练习建议,让读者尝试添加更多菜单项。
文章目录
第三章 记事本主窗口基础
在本章我们会分析记事本主窗口的界面元素,然后使用PySide6实现记事本主窗口界面。
3.1界面分析
见下图
3.1.1 菜单栏
PySide6中PySide6.QtWidgets.QMenuBar类用于创建菜单栏。
记事本中菜单栏包含如下元素:
- 菜单(QMenu) 如:文件菜单
- 菜单项 如:点击文件菜单后显示的
- 子菜单(QMenu) 如: 查看菜单里的 缩放子菜单
- 行为(QAction) 如:文件菜单 打开行为
- 分割线(QAction) 使用(QMenu.addSeparator()方法创建)
注意:这里只是简单分析,后面会仔细讲解
参考:菜单栏的组成控件
3.1.2 文本编辑
PySide6中PySide6.QtWidgets.QTextEdit或PySide6.QtWidgets.QPlainTextEdit类用于创建文本编辑/纯文本编辑器
3.1.3 状态栏
PySide6中PySide6.QtWidgets.QStatusBar类用于创建状态栏
3.2主窗口
上边描述的菜单栏、按钮栏目、在主窗口(QMainWindow)中都可在主窗口中快速创建。
3.2.1 主窗口框架

由图可见该框架包含:
- 菜单栏(QMenuBar)
- 工具栏(QToolBar)
- 中心窗口(QWidget) 使用
QMainWindow.setCentralWidget方法创建 - 状态栏(QStatusBar)
是不是完美契合记事本的主窗口?那我们就基于QMainWindow写一个与记事本主界面相似的窗口。
3.3 QMainWindow 实现记事本主窗口
笔者会借助面向对象编程(类,继承等知识)来编写一个记事本主窗口界面。
注意:没有学习面向对象编程知识的读者,建议阅读菜鸟教程的相关内容。
3.3.1 代码实现
主要控件与实现:
- 菜单栏:借助
QMainWindow.menuBar()方法来快速创建一个菜单栏 - 纯文本编辑:实例化一个
QTextEdit对象 并使用QMainWindows.setCentralWidget()方法将其加入 - 状态栏:借助
QMainWindow.statusBar()方法来快速创建一个菜单栏
常见问题:为什么不使用
QTextEdit?因为win10的记事本是一个纯文本编辑器。
from PySide6.QtWidgets import QMainWindow,QPlainTextEdit,QApplication
import sys
class NotePadMain(QMainWindow):
"""记事本主界面
:param QMainWindow: 主窗口
"""
def __init__(self):
"""初始化
"""
super().__init__()
self.setupUi()
def setupUi(self):
"""设置用户界面
"""
# 设置窗口标题
self.setWindowTitle("记事本主界面")
# 创建菜单栏
menubar = self.menuBar()
# 添加文件菜单
menubar.addMenu("文件(&F)")
# 示例化纯文本编辑
plain_text_edit = QPlainTextEdit()
# 添加纯文本编辑到 中心窗口
self.setCentralWidget(plain_text_edit)
# 添加状态栏目
self.statusBar()
if __name__ == "__main__":
app = QApplication(sys.argv)
notepad_main = NotePadMain()
notepad_main.show()
sys.exit(app.exec())
常见问题: 看不懂未注释部分的读者 点击查看
3.3.2 代码解读
主要有俩个问题:
- 为什么要创建
setupUi()方法? 这是参考QtDesigner文件转为Python文件的部分代码 "文件(&F)"里的&什么作用?指定F被用作键盘快捷方式 按下Alt + F会按下该菜单按钮
3.3.3效果演示
fedora42_gnome48_wayland
Kubuntu24.04_KDE5.27.12_x11 待更新
Win10工作站版 待更新
3.3.4 代码优化
可以看到主窗口QMainWindow中心控件centralWidget的边缘有一个虚线。这影响了一定的视觉效果。
优化方案:
- 借助
PySide6.QtWidgets.QFrame.setFrameShape()方法的QFrame.Shape.NoFrame属性来实现
效果:
from PySide6.QtWidgets import QMainWindow,QPlainTextEdit,QFrame,QApplication
import sys
class NotePadMain(QMainWindow):
"""记事本主界面
:param QMainWindow: 主窗口
"""
def __init__(self):
"""初始化
"""
super().__init__()
self.setupUi()
def setupUi(self):
"""设置用户界面
"""
# 创建菜单栏
menubar = self.menuBar()
# 添加文件菜单
menubar.addMenu("文件(&F)")
# 示例化纯文本编辑
plain_text_edit = QPlainTextEdit()
# 消除框线
plain_text_edit.setFrameShape(QFrame.Shape.NoFrame)
# 添加纯文本编辑到 中心窗口
self.setCentralWidget(plain_text_edit)
# 添加状态栏目
self.statusBar()
if __name__ == "__main__":
app = QApplication(sys.argv)
notepad_main = NotePadMain()
notepad_main.show()
sys.exit(app.exec())
小技巧: 如何判断一个窗口是否有状态栏(
QStatusBar)?有状态栏的窗口右下角有标志
本章小结
在本章我们分析并实现了一个简单的记事本主界面。
小试牛刀
在本章讲述代码的基础上,再添加多个菜单,让菜单栏看起来和记事本一样!
更多推荐

所有评论(0)