当前位置: 首页 > news >正文

PySide6 Win10记事本从零到一——第三章 记事本主窗口基础

文章目录

  • 第三章 记事本主窗口基础
    • 3.1界面分析
      • 3.1.1 菜单栏
      • 3.1.2 文本编辑
      • 3.1.3 状态栏
    • 3.2主窗口
      • 3.2.1 主窗口框架
    • 3.3 QMainWindow 实现记事本主窗口
      • 3.3.1 代码实现
      • 3.3.2 代码解读
      • 3.3.3效果演示
      • 3.3.4 代码优化
    • 本章小结
    • 小试牛刀

第三章 记事本主窗口基础

在本章我们会分析记事本主窗口的界面元素,然后使用PySide6实现记事本主窗口界面。

3.1界面分析

见下图
界面分析

3.1.1 菜单栏

PySide6PySide6.QtWidgets.QMenuBar类用于创建菜单栏
记事本中菜单栏包含如下元素:

  • 菜单(QMenu) 如:文件菜单
  • 菜单项 如:点击文件菜单后显示的
  • 子菜单(QMenu) 如: 查看菜单里的 缩放子菜单
  • 行为(QAction) 如:文件菜单 打开行为
  • 分割线(QAction) 使用(QMenu.addSeparator()方法创建)

注意:这里只是简单分析,后面会仔细讲解

参考:菜单栏的组成控件

3.1.2 文本编辑

PySide6PySide6.QtWidgets.QTextEditPySide6.QtWidgets.QPlainTextEdit类用于创建文本编辑/纯文本编辑器

3.1.3 状态栏

PySide6PySide6.QtWidgets.QStatusBar类用于创建状态栏

3.2主窗口

上边描述的菜单栏、按钮栏目、在主窗口(QMainWindow)中都可在主窗口中快速创建

3.2.1 主窗口框架

QMainWindow框架
由图可见该框架包含:

  1. 菜单栏(QMenuBar)
  2. 工具栏(QToolBar)
  3. 中心窗口(QWidget) 使用QMainWindow.setCentralWidget方法创建
  4. 状态栏(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 sysclass 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 代码解读

主要有俩个问题:

  1. 为什么要创建setupUi()方法? 这是参考QtDesigner文件转为Python文件的部分代码
  2. "文件(&F)"里的 &什么作用?指定F被用作键盘快捷方式 按下Alt + F 会按下该菜单按钮

3.3.3效果演示

fedora42_gnome48_wayland
gnome48
Kubuntu24.04_KDE5.27.12_x11 待更新

Win10工作站版 待更新

3.3.4 代码优化

可以看到主窗口QMainWindow中心控件centralWidget的边缘有一个虚线。这影响了一定的视觉效果。

优化方案:

  • 借助PySide6.QtWidgets.QFrame.setFrameShape()方法的QFrame.Shape.NoFrame属性来实现

效果:
gnome48

参考: QFrame.setFrameShape()方法 | QFrame.Shape

from PySide6.QtWidgets import QMainWindow,QPlainTextEdit,QFrame,QApplication
import sysclass 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)?有状态栏的窗口右下角有标志

本章小结

在本章我们分析并实现了一个简单的记事本主界面。

小试牛刀

在本章讲述代码的基础上,再添加多个菜单,让菜单栏看起来和记事本一样!

http://www.dtcms.com/a/540939.html

相关文章:

  • 中国《个人信息保护法》与欧盟《GDPR》的差异对比
  • 手动配置ingress讲服务端获取客户端的真实用户IP
  • 做网站导航按钮怎么做网页游戏大全力荐新壹玩
  • 迅为rk3568开发板配置 rk3568_uart_config.hcs
  • 临沂哪里做网站比较好wordpress注册中文插件
  • 二谈-双FIFO流水案例
  • 揭开Linux跨平台 adb调试原理神秘面纱
  • 零基础学jsp网站开发自己做的网站链接
  • 根据参数动态配置多数据源
  • 帝国cms小程序获取分类的api接口
  • 黄冈网站建设有哪些某互联网公司开发官网的首页
  • 前端与Node.js
  • 怎样做电商网站好视频教学ps做网站页面设置为多大
  • 肇庆市住房和城乡建设局网站企业网站维护工作内容
  • 芯片选型避坑指南:如何根据需求快速筛选MCU
  • 【MATLAB代码】基于噪声协方差自适应的互补滤波器方法vs标准互补滤波,用于估计角度,附完整代码
  • 金仓数据库替代MongoDB实战:政务电子证照系统的国产化转型之路
  • 深度学习超材料逆向设计专题学习
  • 基于Matlab的批处理最小二乘法参数估计
  • 自己做书画交易网站北京网页设计如何创意
  • 鸿蒙应用开发:华为静默登录解决方案
  • 【Linux Oracle】批量抽取数据库特定条件的数据
  • 公司网站一年费用wordpress 球员
  • 百度建立企业网站建设的目的用h5开发的网站模板
  • Windows下C语言连接瀚高数据库
  • 现代 Python 学习笔记:Statements Syntax
  • Debian、Ubuntu、CentOS:Linux 三大发行版的核心区别
  • 石家庄桥西网站制作公司阮一峰wordpress
  • WordPress网站接入公众号设计参考图网站
  • Spring Boot 中 controller层注解