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

PySide6 Win10记事本从零到一——第七章 格式菜单界面与功能实现

文章目录

  • 第七章 格式菜单界面与功能实现
    • 7.1 界面分析
      • 7.1.1 实现代码
    • 7.2 功能分析
      • 7.2.1 自动换行实现
      • 7.2.2 设置字体
    • 7.3 效果演示

第七章 格式菜单界面与功能实现

这一章我们会实现格式菜单的菜单项界面 以及所以功能

7.1 界面分析

在这里插入图片描述

  • 自动换行(&W): 可以被勾选而且默认被勾选
  • 字体(&F):打开字体对话框

7.1.1 实现代码

custom_menu.py,这里只提供实现格式菜单的代码

from PySide6.QtWidgets import QMenuclass FormatMenu(QMenu):"""格式菜单:param QMenu: PySide6 菜单类"""def __init__(self):"""初始化"""super().__init__()self.setup_ui()def setup_ui(self):"""设置菜单项"""# 设置菜单标题self.setTitle("格式(&O)")# 添加自动换行 和 字体 行为line_warp = self.addAction("自动换行(&W)")font_dialog =  self.addAction("字体(&F)")# 设置自动换行 可勾选 且 默认勾选line_warp.setCheckable(True)line_warp.setChecked(True)

注意QAction.setCheckable(True) 用于设置行为可勾选,QAction.setChecked(True)设置行为默认勾选。
notepad_main.py

from PySide6.QtWidgets import QMainWindow,QPlainTextEdit,QFrame,QApplication
from custom_menu import FormatMenu
import sysclass NotepadMain(QMainWindow):"""记事本主界面:param QMainWindow: 主窗口"""def __init__(self):"""初始化"""super().__init__()self.setup_ui()self.setup_event_bind()def setup_ui(self):"""设置用户界面"""# 设置窗口标题self.setWindowTitle("记事本主界面")# 设置窗口大小self.resize(800, 500)# 创建菜单栏 设置为私有属性self.__menubar = self.menuBar()# 实例化文件、编辑、格式、查看、帮助菜单file_menu = FileMenu()edit_menu = EditMenu()format_menu  = FormatMenu()# 添加其他自定义的菜单self.__menubar.addMenu(file_menu)self.__menubar.addMenu(edit_menu)self.__menubar.addMenu(format_menu)# 示例化纯文本编辑 plain_text_edit = QPlainTextEdit()# 消除框线plain_text_edit.setFrameShape(QFrame.Shape.NoFrame)# 添加纯文本编辑到 中心窗口self.setCentralWidget(self.plain_text_edit)# 添加状态栏目self.statusBar()if __name__ == "__main__":app = QApplication(sys.argv)# 添加其他菜单notepad_main = NotepadMain()notepad_main.show()sys.exit(app.exec())

7.2 功能分析

  • 自动换行(&W): 勾选时,换行类型为 自动换行;不勾选时,换行类型为 手动换行;
  • 字体(&F): 触发行为时: 打开字体对话框,选择字体并 修改纯文本编辑的文本

重点

  • 触发自动换行行为的信号,连接设置换行模式(槽函数)
  • 触发字体行为的信号,连接设置字体对话框(槽函数)

注意:

  • 勾选自动换行时(默认状态),纯文本编辑器QPlainTextEdit)的水平滚动条策略(horizontalScrollBarPolicy)设为“按需显示”。
  • 取消勾选自动换行时,纯文本编辑器QPlainTextEdit)的水平滚动条策略(horizontalScrollBarPolicy)设为“始终显示”。

描述继承关系 ,然后 链接相关代码

小技巧: QActiontriggered 信号会携带一个布尔值,表示该动作是否被触发。结合条件分支语句,即可根据这一布尔值在两种状态下实现不同的效果。

7.2.1 自动换行实现

由于上一章我们已经自定义了一个纯文本编辑器,为了更好地划分代码职责、便于后续的代码整合,这里也自定义一个纯文本编辑器,并且在里面实现自动换行的槽函数。
custom_plain_text_edit.py 自定义纯文本编辑

from PySide6.QtWidgets import QPlainTextEditclass PlainTextEdit(QPlainTextEdit):"""纯文本编辑:param QPlainTextEdit: PySide6 QPlainTextEdit"""def __init__(self):"""初始化"""super().__init__()def set_line_warp_mode(self,triggered = True):"""设置换行模式"""if triggered:self.setLineWrapMode(self.LineWrapMode.WidgetWidth)else:self.setLineWrapMode(self.LineWrapMode.NoWrap)

custom_menu.py 格式菜单

from PySide6.QtWidgets import QMenu
from custom_plain_text_edit import PlainTextEditclass FormatMenu(QMenu):"""格式菜单:param QMenu: PySide6 菜单类"""def __init__(self):"""初始化"""super().__init__()self.setup_ui()def setup_ui(self):"""设置菜单项"""# 设置菜单标题self.setTitle("格式(&O)")# 添加自动换行 和 字体 行为self.__line_warp = self.addAction("自动换行(&W)")self.__font_dialog =  self.addAction("字体(&F)")# 设置自动换行 可勾选 且 默认勾选self.__line_warp.setCheckable(True)self.__line_warp.setChecked(True)def set_event_bind(self,plain_text_edit: PlainTextEdit):"""设置事件绑定"""self.__line_warp.triggered.connect(plain_text_edit.set_line_warp_mode) 

notepad_main.py 记事本主界面

from PySide6.QtWidgets import QMainWindow,QFrame,QApplication
from custom_menu import FormatMenu
from custom_plain_text_edit import PlainTextEdit
import sysclass NotepadMain(QMainWindow):"""记事本主界面:param QMainWindow: 主窗口"""def __init__(self):"""初始化"""super().__init__()self.setup_ui()self.setup_event_bind()def setup_ui(self):"""设置用户界面"""# 设置窗口标题self.setWindowTitle("记事本主界面")# 设置窗口大小self.resize(800, 500)# 创建菜单栏 设置为私有属性self.__menubar = self.menuBar()# 实例化文件、编辑、格式、查看、帮助菜单file_menu = FileMenu()edit_menu = EditMenu()self.__format_menu  = FormatMenu()# 添加其他自定义的菜单self.__menubar.addMenu(file_menu)self.__menubar.addMenu(edit_menu)self.__menubar.addMenu(self.__format_menu)# 示例化纯文本编辑 self.__plain_text_edit = PlainTextEdit()# 消除框线self.__plain_text_edit.setFrameShape(QFrame.Shape.NoFrame)# 添加纯文本编辑到 中心窗口self.setCentralWidget(self.__plain_text_edit)# 添加状态栏目self.statusBar()def setup_event_bind(self):"""设置事件绑定"""self.__format_menu.set_event_bind(self.__plain_text_edit)if __name__ == "__main__":app = QApplication(sys.argv)# 添加其他菜单notepad_main = NotepadMain()notepad_main.show()sys.exit(app.exec())

7.2.2 设置字体

首先我们来看一个简单的打开字体对话框,并返回字体的方法。

        ok,font = QFontDialog.getFont()if ok:plain_text_edit.setFont(font)

这里使用了QFontDialog字体对话框,然后使用文本编辑 设置获取到的字体。

下边是完整功能的代码:
notepad_main.py 使用7.2.1的代码即可
custom_menu.py 修改如下

  1. 添加设置字体方法
    def set_font(self,plain_text_edit: PlainTextEdit):"""显示字体对话框 然后设置字体"""ok,font = QFontDialog.getFont()if ok:plain_text_edit.setFont(font)
  1. 添加事件绑定
        self.__font_dialog.triggered.connect(lambda: self.set_font(plain_text_edit))

7.3 效果演示

等待更新

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

相关文章:

  • PDF文件损坏打不开怎么修复?2025年最新修复工具测评与对比
  • 谈谈MYSQL索引失效场景
  • Qwen-Image-Edit本地到底如何部署使用?怎么还有comfyui
  • 佳能LBP6018L打印浅淡问题的尝试性解决方法
  • 微算法科技(NASDAQ MLGO):以隐私计算区块链筑牢多方安全计算(MPC)安全防线
  • SpringCache :让缓存开发更高效
  • 电路分析 | Phasor Analysis(篇 1)
  • 网站备案取消长春网站建设模板样式
  • get_ccopt系列命令介绍(二)
  • 成都工业学院文献检索在哪个网站做破解wordpress密码
  • 做网站用什么系统好网站登录验证码是怎么做的
  • SQL语法基础教程
  • 算法25.0
  • 无穿戴动捕技术:解锁动作捕捉新维度,拓展多元应用边界
  • 高速PCB设计指南(5)
  • 栈与队列---算法题
  • 外包加工网站开发一个网页具体流程
  • 泰安肥城做网站的公司平台推广活动策划方案
  • 衡石科技跨平台数据网关技术解析:实现多源异构数据整合的新范式
  • 计算机网络实验04:IP与ICMP数据报分析实验
  • 基于python的天气预报系统设计和可视化数据分析源码+报告
  • lerobot so-arm101复现步骤
  • 司马阅与数之境科技达成生态战略合作,释放1+1>2的产业赋能价值
  • IE跳转Chrome浏览器及静默打包
  • Chrome恢复关闭网页的快捷键
  • python报修网站开发源码建设网站遇到的问题
  • 深入解析 Qt QListWidget 控件:功能、实现与最佳实践
  • Qt在线安装问题
  • Qt Quick ApplicationQt Quick Application (compat)
  • 快速搭建分布式链路追踪系统:SkyWalking全攻略