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

PySide6 文本编辑器(QPlainTextEdit)实现查找功能——重构版本

PySide6 文本编辑器(QPlainTextEdit)实现查找功能——重构版本

核心
  1. 文本文档实例(QTextDocument)用于传入文本光标(QTextCursor)
  2. 正则表达式(QRegularExpression) 用于匹配查找内容
  3. 文本文档的查找方法(QPlainTextEdit.find)
  4. 将光标移动到指定的位置(QPlainTextEdit.setTextCursor)
  5. 一个全局变量用于记录上一个文本光标的位置,一个局部变量用于记录下一个文本光标的位置

可选
查找标志

重构区别
  1. 设置用户界面代码更加简洁
  2. 实现基础的查找上一个(不支持循环)和下一个
  3. 未实现不区分大小写

旧版

代码示例
# coding = utf-8from PySide6.QtWidgets import (QApplication, QWidget, QLineEdit,QPlainTextEdit, QVBoxLayout,QPushButton,QCheckBox)
from PySide6.QtCore import QRegularExpression
from PySide6.QtGui import QTextCursor,QTextDocument
import sysclass MyWidget(QWidget):def __init__(self):super().__init__()self.setupUi()self.bindEvent()self.lasterCursor = Nonedef setupUi(self):"""设置用户界面"""self.setWindowTitle("测试查找")# 主窗口使用垂直布局vBoxLayout = QVBoxLayout(self)# 创建文本编辑器 设置文本 行文本编辑器 按钮与 勾选框self.mytext = QPlainTextEdit()self.mytext.setPlainText("十年生死两茫茫,写程序,到天亮。\n""千行代码,Bug何处藏。\n""纵使上线又怎样,朝令改,夕断肠。""\n相顾无言,惟有泪千行。\n ""每晚灯火阑珊处,夜难寐,加班狂。")   self.findLineEdit = QLineEdit()self.downPushButton = QPushButton("下一个!")self.upPushButton = QPushButton("上一个")self.caseSensitiveCheck = QCheckBox("区分大小写")vBoxLayout.addWidget(self.mytext)vBoxLayout.addWidget(self.downPushButton)vBoxLayout.addWidget(self.upPushButton)vBoxLayout.addWidget(self.caseSensitiveCheck)vBoxLayout.addWidget(self.findLineEdit)def bindEvent(self):self.downPushButton.clicked.connect(self.findNextText)self.upPushButton.clicked.connect(self.findPreviousText)def findNextText(self):"""查找下一个文本"""doc = self.mytext.document()searchText = self.findLineEdit.text()if not self.lasterCursor:self.lasterCursor = QTextCursor(doc)regex = QRegularExpression(searchText)nextCusror= doc.find(regex,self.lasterCursor)self.lasterCursor = nextCusrorself.mytext.setTextCursor(nextCusror)def findPreviousText(self):"""查找上一个文本"""doc = self.mytext.document()searchText = self.findLineEdit.text()self.mytext.setTextCursor( self.lasterCursor)if not self.lasterCursor:self.lasterCursor = QTextCursor(doc)regex = QRegularExpression(searchText)prevCusor = doc.find(regex,self.lasterCursor,QTextDocument.FindFlag.FindBackward)self.lasterCursor = prevCusorself.mytext.setTextCursor(prevCusor)self.mytext.document().find(regex,self.lasterCursor,QTextDocument.FindFlag.FindCaseSensitively)if __name__ == "__main__":app = QApplication(sys.argv)my = MyWidget()my.show()sys.exit(app.exec())

运行效果

下一个
上一个

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

相关文章:

  • 免费注册域名网站河南做网站那家最好
  • 山西省城乡住房和建设厅网站音乐网站如何建设的
  • 用AMD显卡节省nVidia显卡显存占用
  • Go基础:正则表达式 regexp 库详解
  • 怀旧电脑游戏 红色警戒合集 含红警1+2+3代所有版本 免安装中文版 附送地图+修改器
  • 智慧教育——解读“5G+智慧教育”典型应用场景及案例集【附全文阅读】
  • 20251005 OI总结
  • CSP-J复赛模拟赛4 王晨旭补题 2025.10.4
  • 老板让做网站报价平面磨床东莞网站建设
  • 乐清 网站建设云主机安装多个网站
  • AI-调查研究-95-具身智能 机器人场景测试全解析:从极端环境仿真到自动化故障注入
  • 建设功能网站价格传奇竖版手游
  • 河海大学土木专业类建设网站免费网站app源码
  • 网站百度地图虚拟机搭建wordpress
  • wordpress 公众号 会员wordpress优化提速
  • Week 19: 深度学习补遗:自注意力和Transformer Encoder架构
  • 给静态网站加后台简单大气网站欣赏
  • 适用于21世纪20年代的大模型训练基础知识学习哲学--以Brillm为例
  • 运营实力 网站建设泽州网站设计
  • 【计算机视觉】基于数学形态学的保留边缘图像去噪
  • 建材网站建设成都美篇app怎么制作
  • 网站设计软件microsoft2013百度地图在线导航查询
  • 10.Spring ai alibaba MCP本地远程
  • Python2 和 Python3的区别
  • 哪些网站做的比较好的文化建设的内容
  • 个人网站备案通过后招商外包服务公司
  • 手机网站建设的重点步骤电商网站毕业设计论文
  • 国内网站设计案例欣赏网站推广方法
  • 【LaTeX】 11 LaTeX 字体与间距控制
  • MySQL的联合索引以及其最左前缀原则