介绍
QTextBrowser 是 PySide2 中一个功能强大的富文本浏览组件,支持显示 HTML 内容、超链接、列表等,还可以实现简单的文本编辑和导航功能。
通过结合 HTML 格式和信号处理,QTextBrowser 可以实现丰富的文本展示和交互功能,是 PySide2 中处理富文本的重要组件。
应用场景
- 显示帮助文档或用户手册
- 实现简单的网页浏览器
- 日志显示组件
- 富文本编辑器的预览窗口
- 聊天记录显示区域
例子
import sys
from PySide2.QtWidgets import (QApplication, QMainWindow, QTextBrowser,
QVBoxLayout, QHBoxLayout, QWidget, QPushButton,
QLineEdit, QLabel)
from PySide2.QtCore import Qt, QUrl
from PySide2.QtGui import QFont, QTextCursor
class TextBrowserDemo(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QTextBrowser 教程")
self.resize(800, 600)
# 创建中心部件和主布局
central_widget = QWidget()
self.setCentralWidget(central_widget)
main_layout = QVBoxLayout(central_widget)
# 创建QTextBrowser组件
self.text_browser = QTextBrowser()
# 设置字体
font = QFont()
font.setPointSize(10)
self.text_browser.setFont(font)
# 添加到主布局
main_layout.addWidget(self.text_browser)
# 创建控制按钮区域
control_layout = QHBoxLayout()
# 添加文本按钮
self.add_text_btn = QPushButton("添加普通文本")
self.add_text_btn.clicked.connect(self.add_plain_text)
control_layout.addWidget(self.add_text_btn)
# 添加HTML按钮
self.add_html_btn = QPushButton("添加HTML内容")
self.add_html_btn.clicked.connect(self.add_html_content)
control_layout.addWidget(self.add_html_btn)
# 清除按钮
self.clear_btn = QPushButton("清除内容")
self.clear_btn.clicked.connect(self.text_browser.clear)
control_layout.addWidget(self.clear_btn)
# 导航按钮
self.back_btn = QPushButton("后退")
self.back_btn.clicked.connect(self.text_browser.backward)
control_layout.addWidget(self.back_btn)
self.forward_btn = QPushButton("前进")
self.forward_btn.clicked.connect(self.text_browser.forward)
control_layout.addWidget(self.forward_btn)
# 添加到主布局
main_layout.addLayout(control_layout)
# 创建链接演示区域
link_layout = QHBoxLayout()
link_layout.addWidget(QLabel("链接示例:"))
self.link_input = QLineEdit("https://www.qt.io")
self.open_link_btn = QPushButton("打开链接")
self.open_link_btn.clicked.connect(self.open_link)
link_layout.addWidget(self.link_input)
link_layout.addWidget(self.open_link_btn)
main_layout.addLayout(link_layout)
# 初始内容
self.init_content()
# 连接链接点击信号
self.text_browser.anchorClicked.connect(self.handle_link_click)
def init_content(self):
"""初始化显示内容"""
self.text_browser.setHtml("""
<h1>QTextBrowser 演示</h1>
<p>这是一个 QTextBrowser 组件的使用示例。</p>
<p>支持的功能:</p>
<ul>
<li>显示普通文本</li>
<li>显示 HTML 格式内容</li>
<li>处理超链接</li>
<li>文本导航(前进/后退)</li>
</ul>
<p>点击 <a href="internal:example">这个内部链接</a> 查看效果</p>
""")
def add_plain_text(self):
"""添加普通文本"""
text = "\n这是新添加的普通文本。可以包含换行符等内容。"
self.text_browser.append(text)
# 滚动到末尾
self.text_browser.moveCursor(QTextCursor.End)
def add_html_content(self):
"""添加HTML格式内容"""
html = """
<h3>新添加的HTML内容</h3>
<p style="color: blue;">这是蓝色的文本</p>
<p><b>粗体文本</b> 和 <i>斜体文本</i></p>
<table border="1">
<tr><th>表头1</th><th>表头2</th></tr>
<tr><td>单元格1</td><td>单元格2</td></tr>
</table>
"""
self.text_browser.insertHtml(html)
# 滚动到末尾
self.text_browser.moveCursor(QTextCursor.End)
def open_link(self):
"""打开指定链接"""
url = self.link_input.text()
if url:
# 设置新的页面内容,这会添加到导航历史
self.text_browser.setHtml(f"<h2>正在查看: {url}</h2><p>这是链接页面的模拟内容</p>")
def handle_link_click(self, url):
"""处理链接点击事件"""
# 处理内部链接
if url.scheme() == "internal":
if url.path() == "example":
self.text_browser.setHtml("""
<h2>内部链接页面</h2>
<p>这是一个内部链接指向的页面</p>
<p><a href="#">返回首页</a></p>
""")
else:
# 外部链接可以在这里处理,比如用默认浏览器打开
print(f"打开外部链接: {url.toString()}")
# 如果要在QTextBrowser中显示外部网页内容,需要额外的网络请求代码
if __name__ == "__main__":
app = QApplication(sys.argv)
window = TextBrowserDemo()
window.show()
sys.exit(app.exec_())
关键功能解析
基本内容操作
append(text): 添加普通文本并自动换行insertHtml(html): 插入HTML格式内容setHtml(html): 设置整个内容为HTMLclear(): 清除所有内容
导航功能
backward(): 后退到上一页forward(): 前进到下一页home(): 回到初始页面- 导航功能需要通过
setHtml()或setPlainText()来建立页面历史
链接处理
anchorClicked信号:当点击链接时触发- 可以通过自定义协议(如
internal:)区分内部链接和外部链接 - 外部链接可以用系统默认浏览器打开(需要额外代码)
文本导航与编辑
- 使用
QTextCursor可以控制文本插入位置 moveCursor()方法可以滚动文本到指定位置- 可以通过
setReadOnly(False)允许用户编辑内容
- 使用