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

PySide6 Win10记事本从零到一——第八章 查看菜单界面与功能实现

第八章 查看菜单界面与功能实现

在这一章我们将实现win10记事本菜单栏里的查看 菜单界面与功能。
我们将会学习如下知识:

  1. 在菜单中添加子菜单
  2. 在子菜单中添加行为
  3. 显示与隐藏状态栏
  4. 增大与缩小纯文本里的字体

8.1 界面分析

在这里插入图片描述

8.1.1 菜单项

在图示菜单项中包含如下元素:

  1. 缩放(Z) 子菜单
  2. 状态栏(S) 显示

缩放子菜单:

  • 放大
  • 缩小
  • 恢复默认缩放

8.2 界面实现

主要包含俩个文件:

  1. view_menu.py: 查看菜单
  2. notepad_main.py:记事本主窗口

notepad_main.py

from PySide6.QtWidgets import QMainWindow,QFrame,QPlainTextEdit,QApplication
from custom_menu import ViewMenu
import sysclass NotepadMain(QMainWindow):"""记事本主界面:param QMainWindow: 主窗口"""def __init__(self):"""初始化"""super().__init__()self.setup_ui()def setup_ui(self):"""设置用户界面"""# 设置窗口标题self.setWindowTitle("无标题 - 记事本")# 设置窗口大小self.resize(800, 500)# 创建菜单栏 设置为私有属性self.__menubar = self.menuBar()# 实例化查看菜单self.__view_menu  = ViewMenu()# 添加其他自定义的菜单self.__menubar.addMenu(self.__view_menu)# 示例化纯文本编辑 self.__plain_text_edit = QPlainTextEdit()# 消除框线self.__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())

view_menu.py

from PySide6.QtWidgets import QMenu
from PySide6.QtGui import QKeySequenceclass ViewMenu(QMenu):"""查看菜单:param QMenu: PySide6 菜单类"""def __init__(self):"""初始化"""super().__init__()self.setup_ui()def setup_ui(self):"""设置界面"""# 设置标题  self.setTitle("查看")# 添加 缩放子菜单 和行为zoom_menu = self.addMenu("缩放(&Z)")status_bar = self.addAction("状态栏(&S)")# 子菜单添加行为zoom_menu.addAction("放大(&I)",QKeySequence.StandardKey.ZoomIn)zoom_menu.addAction("放缩小(&O)",QKeySequence.StandardKey.ZoomOut)# 状态栏行为 可勾选且 默认为勾选状态status_bar.setCheckable(True)status_bar.setChecked(True)

8.3 功能实现

将会实现如下功能,并涉及原理:
如下功能:

  1. 放大 QPlainTextEdit.zoomIn()
  2. 缩小 QPlainTextEdit.zoomOut() 重构
  3. 恢复默认字体大小 => 重新设置字体 可能会解决

notepad_main.py

from PySide6.QtWidgets import QMenu
from PySide6.QtGui import QKeySequence
from custom_plain_text_edit import PlainTextEditclass ViewMenu(QMenu):"""查看菜单:param QMenu: PySide6 菜单类"""def __init__(self):"""初始化"""super().__init__()self.setup_ui()def setup_ui(self):"""设置界面"""# 设置标题  self.setTitle("查看")# 添加 缩放子菜单 和行为zoom_menu = self.addMenu("缩放(&Z)")self.status_bar_action = self.addAction("状态栏(&S)")# 子菜单添加行为self.zoom_in_action = zoom_menu.addAction("放大(&I)",QKeySequence.StandardKey.ZoomIn)self.zoom_out_action = zoom_menu.addAction("放缩小(&O)",QKeySequence.StandardKey.ZoomOut)self.zoom_default_action = zoom_menu.addAction("恢复默认缩放","Ctrl+0")# 状态栏行为 可勾选且 默认为勾选状态self.status_bar_action.setCheckable(True)self.status_bar_action.setChecked(True)

notepad_main.py

from PySide6.QtWidgets import QMainWindow,QFrame,QApplication
from custom_plain_text_edit import PlainTextEdit
from view_menu import ViewMenu
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()# 实例化查看菜单self.__view_menu  = ViewMenu()# 添加其他自定义的菜单self.__menubar.addMenu(self.__view_menu)# 示例化纯文本编辑 self.__plain_text_edit = PlainTextEdit()# 消除框线self.__plain_text_edit.setFrameShape(QFrame.Shape.NoFrame)# 添加纯文本编辑到 中心窗口self.setCentralWidget(self.__plain_text_edit)# 添加状态栏目self.status_bar = self.statusBar()def setup_event_bind(self):"""设置事件绑定"""self.__view_menu.zoom_in_action.triggered.connect(self.__plain_text_edit.zoomIn)self.__view_menu.zoom_out_action.triggered.connect(self.__plain_text_edit.zoomOut)self.__view_menu.zoom_default_action.triggered.connect(self.__plain_text_edit.set_default_font_size)self.__view_menu.status_bar_action.triggered.connect(self.show_hide_status_bar)def show_hide_status_bar(self,bool):"""显示或者隐藏状态栏"""self.status_bar.show()  if bool else self.status_bar.hide()if __name__ == "__main__":app = QApplication(sys.argv)# 添加其他菜单notepad_main = NotepadMain()notepad_main.show()sys.exit(app.exec())

custom_plain_text_edit.py

from PySide6.QtWidgets import QPlainTextEdit
from PySide6.QtCore import Signal,QDateTimeclass PlainTextEdit(QPlainTextEdit):"""纯文本编辑:param QPlainTextEdit: PySide6 QPlainTextEdit"""hasText = Signal(bool)def __init__(self):"""初始化"""super().__init__()def zoomOut(self, bool,range=1):"""缩小方法:param bool: 行为触发状态:return: 如果小于11 不缩小 其他缩小"""if self.font().pointSize() <= 11 :range = 0return super().zoomOut(range)else:return super().zoomOut(range)def set_default_font_size(self,bool):"""设置默认字体大小"""if not bool:
http://www.dtcms.com/a/569702.html

相关文章:

  • Linux之arm SMMUv3 驱动重要宏和函数解析(11)
  • 网站功能介绍是什么自贡网站设计
  • 做企业网站设wordpress多媒体权限
  • CTF WEB入门 命令执行篇 50-70
  • 利用网上菜谱做网站公众号开发公司排行榜
  • 免费搭建视频网站硬件开发板
  • Mysql中页分裂、合并的问题
  • Qt 的 QSqlDatabase 不能跨线程复用
  • Qt-QtCharts
  • 某番切小说畅听红果等提示“低版本不安全”的解决方案
  • 昆明网站seo技术厂家网站设计远程培训
  • Linux基本架构
  • 任务调度框架:PowerJob、XXL-Job、OpenJob
  • 做模型挣钱的网站wordpress中英文切换
  • TensorFlow Keras
  • 萧山做网站的企业wordpress集成关注公众和登陆
  • 详解EtherNet/IP转CAN边缘计算网关:基恩士PLC与CAN IO卡通讯配置步骤
  • 网站权重的提升河北网站制作多少钱
  • .net实现redis下单超卖(jmeter高并发测试)(自己记录用)
  • 全自动壁纸采集源码
  • 公司用员工信息做网站域名备案网站建站描述撰写
  • Python类中方法种类介绍
  • AI研究:大语言模型(LLMs)需要怎样的硬件算力
  • 贵阳网站建设方案报价查企业资质上什么网站
  • Parasoft C/C++test中Trace32调试器的配置与单元测试执行
  • 基于大语言模型(LLM)的多智能体应用的新型服务框架——Tokencake
  • 单元测试(TestNG+PowerMock)
  • 哪家公司网站建设好点襄樊网站建设哪家好
  • 公司网站做推广预装wordpress主机
  • CSS 文本和字体属性、列表属性