文章目录
- [PySide6.QtWidgets.QTextEdit 应用举例](#PySide6.QtWidgets.QTextEdit 应用举例)
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) |
撤销可用状态改变时触发 |
代码示例
python
import sys
from PySide6.QtWidgets import (
QApplication, QMainWindow, QTextEdit,
QVBoxLayout, QWidget, QPushButton
)
from PySide6.QtGui import QTextCharFormat, QFont, QColor
from PySide6.QtCore import Qt
class 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 QHBoxLayout
button_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_layout
def 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支持或自定义拖放操作。