PySide6 GUI 学习笔记——常用类及控件使用方法(多行文本控件QTextEdit)
文章目录
- PySide6.QtWidgets.QTextEdit 应用举例
- 概述
- 核心特性
- 常用方法
- 文本内容操作
- 光标和选择操作
- 格式和样式
- 查找功能
- 视图控制
- 状态设置
- 常用信号
- 代码示例
- 示例说明
- 1. 基本设置
- 2. 文本格式化功能
- 3. 功能按钮
- 4. 信号处理
PySide6.QtWidgets.QTextEdit 应用举例
概述
QTextEdit
是 PySide6
中用于编辑和显示纯文本和富文本的控件。它提供了强大的文本处理能力,支持 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支持或自定义拖放操作。