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

PySide6 GUI 学习笔记——常用类及控件使用方法(多行文本控件QTextEdit)

文章目录

  • PySide6.QtWidgets.QTextEdit 应用举例
    • 概述
    • 核心特性
    • 常用方法
      • 文本内容操作
      • 光标和选择操作
      • 格式和样式
      • 查找功能
      • 视图控制
      • 状态设置
      • 常用信号
    • 代码示例
    • 示例说明
      • 1. 基本设置
      • 2. 文本格式化功能
      • 3. 功能按钮
      • 4. 信号处理

PySide6.QtWidgets.QTextEdit 应用举例

概述

QTextEditPySide6 中用于编辑和显示纯文本和富文本的控件。它提供了强大的文本处理能力,支持 HTML 样式标签和 Markdown 格式,能够处理大型文档并快速响应用户输入。

核心特性

  • 支持纯文本和富文本(HTML 4 子集)编辑

  • Markdown 格式支持

  • 自动换行和格式控制

  • 撤销/重做功能

  • 查找替换功能

  • 自定义拖放操作

  • 多种编辑和只读模式键盘快捷键

常用方法

文本内容操作

方法描述
setPlainText(text: str)设置纯文本内容
toPlainText() -> str获取纯文本内容
setHtml(html: str)设置 HTML 内容
toHtml() -> str获取 HTML 内容
setMarkdown(markdown: str)设置 Markdown 内容
toMarkdown() -> str获取 Markdown 内容
clear()清空所有内容
append(text: str)在文档末尾追加新段落

光标和选择操作

方法描述
textCursor() -> QTextCursor获取当前光标
setTextCursor(QTextCursor)设置当前光标
cursorForPosition(QPoint) -> QTextCursor获取指定位置的光标
cursorRect() -> QRect获取光标矩形区域
selectAll()全选所有文本
copy()复制选中内容
cut()剪切选中内容
paste()粘贴内容

格式和样式

方法描述
setAlignment(Qt.Alignment)设置段落对齐方式
setFontFamily(family: str)设置字体族
setFontPointSize(size: float)设置字体大小(磅值)
setFontWeight(weight: int)设置字体粗细
setFontItalic(italic: bool)设置斜体
setFontUnderline(underline: bool)设置下划线
mergeCurrentCharFormat(QTextCharFormat)合并当前字符格式

查找功能

方法描述
find(pattern: str, options: QTextDocument.FindFlags) -> bool查找文本模式

视图控制

方法描述
ensureCursorVisible()确保光标可见
scrollToAnchor(name: str)滚动到指定锚点

状态设置

方法描述
setReadOnly(ro: bool)设置只读模式
setPlaceholderText(text: str)设置占位文本
setLineWrapMode(mode: QTextEdit.LineWrapMode)设置换行模式
setLineWrapColumnOrWidth(width: int)设置换行宽度/列数

常用信号

信号描述
textChanged()文本内容改变时触发
cursorPositionChanged()光标位置改变时触发
selectionChanged()选择区域改变时触发
copyAvailable(bool)复制可用状态改变时触发
redoAvailable(bool)重做可用状态改变时触发
undoAvailable(bool)撤销可用状态改变时触发

代码示例

import sys
from PySide6.QtWidgets import (QApplication, QMainWindow, QTextEdit, QVBoxLayout, QWidget, QPushButton
)
from PySide6.QtGui import QTextCharFormat, QFont, QColor
from PySide6.QtCore import Qtclass TextEditorDemo(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QTextEdit 示例")self.setGeometry(100, 100, 800, 600)# 创建主控件和布局central_widget = QWidget()self.setCentralWidget(central_widget)layout = QVBoxLayout(central_widget)# 创建文本编辑器self.text_edit = QTextEdit()self.text_edit.setPlaceholderText("在此输入内容...")self.text_edit.setLineWrapMode(QTextEdit.WidgetWidth)layout.addWidget(self.text_edit, 1)# 创建按钮面板button_layout = self.create_button_panel()layout.addLayout(button_layout)# 连接信号self.text_edit.textChanged.connect(self.on_text_changed)self.text_edit.cursorPositionChanged.connect(self.on_cursor_moved)def create_button_panel(self):from PySide6.QtWidgets import QHBoxLayoutbutton_layout = QHBoxLayout()# 格式按钮btn_bold = QPushButton("粗体")btn_bold.clicked.connect(self.toggle_bold)button_layout.addWidget(btn_bold)btn_italic = QPushButton("斜体")btn_italic.clicked.connect(self.toggle_italic)button_layout.addWidget(btn_italic)btn_color = QPushButton("颜色")btn_color.clicked.connect(self.change_color)button_layout.addWidget(btn_color)# 功能按钮btn_clear = QPushButton("清空")btn_clear.clicked.connect(self.text_edit.clear)button_layout.addWidget(btn_clear)btn_html = QPushButton("获取HTML")btn_html.clicked.connect(self.print_html)button_layout.addWidget(btn_html)return button_layoutdef toggle_bold(self):fmt = QTextCharFormat()fmt.setFontWeight(QFont.Bold if not self.text_edit.fontWeight() > QFont.Normal else QFont.Normal)self.text_edit.mergeCurrentCharFormat(fmt)def toggle_italic(self):fmt = QTextCharFormat()fmt.setFontItalic(not self.text_edit.fontItalic())self.text_edit.mergeCurrentCharFormat(fmt)def change_color(self):fmt = QTextCharFormat()fmt.setForeground(QColor("blue"))self.text_edit.mergeCurrentCharFormat(fmt)def on_text_changed(self):print("文本内容已更改")def on_cursor_moved(self):print(f"光标位置: {self.text_edit.textCursor().position()}")def print_html(self):html = self.text_edit.toHtml()print("HTML内容:")print(html[:200] + "..." if len(html) > 200 else html)if __name__ == "__main__":app = QApplication(sys.argv)window = TextEditorDemo()window.show()sys.exit(app.exec())

运行效果:
运行效果

示例说明

1. 基本设置

  • 创建主窗口和布局

  • 添加 QTextEdit 控件并设置占位文本和换行模式

  • 连接文本变化和光标移动信号

2. 文本格式化功能

  • 粗体/斜体切换按钮

  • 更改文本颜色功能

  • 通过 QTextCharFormat 和 mergeCurrentCharFormat 应用格式

3. 功能按钮

  • 清空编辑器内容

  • 打印当前内容的 HTML 表示

  • 获取纯文本内容

4. 信号处理

  • 监听文本变化事件

  • 跟踪光标位置变化

这个示例展示了 QTextEdit 的核心功能,包括文本编辑、格式控制、内容获取和信号处理。您可以根据需要扩展功能,如添加查找替换、Markdown支持或自定义拖放操作。

http://www.xdnf.cn/news/917965.html

相关文章:

  • Redis高可用架构
  • CCPC chongqing 2025 H
  • PySide6 GUI 学习笔记——常用类及控件使用方法(单行文本控件QLineEdit)
  • Linux进程(中)
  • Java高级 |【实验八】springboot 使用Websocket
  • 174页PPT家居制造业集团战略规划和运营管控规划方案
  • 【android bluetooth 协议分析 15】【SPP详解 1】【SPP 介绍】
  • ThinkPHP 5.1 中的 error 和 success 方法详解
  • 【LangchainAgent】Agent基本构建与使用
  • 基于Spring Boot的云音乐平台设计与实现
  • Vue3 项目的基本架构解读
  • K8S认证|CKS题库+答案| 6. 创建 Secret
  • Gartner《How to Create and Maintain a Knowledge Base forHumans and AI》学习报告
  • 学习使用YOLO的predict函数使用
  • Android 平台RTSP/RTMP播放器SDK接入说明
  • 现代简约壁炉:藏在极简线条里的温暖魔法
  • 数据库(sqlite)基本操作
  • 量子计算突破:新型超导芯片重构计算范式
  • Axure应用交互设计:注册登录页完整交互设计
  • Web前端基础
  • Axure应用交互设计:如何构建注册登录页
  • AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
  • 1.5 Node.js 的 HTTP
  • 9.进程间通信
  • 提供MD5解密的网站
  • JAVA学习 DAY3 注释与编码规范讲解
  • Supersonic 新一代AI数据分析平台
  • 【题解-洛谷】B3622 枚举子集(递归实现指数型枚举)
  • 设计一个算法:删除非空单链表L中结点值为x的第一个结点的前驱结点
  • 零基础玩转物联网-串口转以太网模块如何快速实现与TCP服务器通信