python pyside2 Text Browser(QTextBrowser) 作者:马育民 • 2025-09-16 20:45 • 阅读:10002 # 介绍 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(""" QTextBrowser 演示 这是一个 QTextBrowser 组件的使用示例。 支持的功能: 显示普通文本 显示 HTML 格式内容 处理超链接 文本导航(前进/后退) 点击 这个内部链接 查看效果 """) 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 = """ 新添加的HTML内容 这是蓝色的文本 粗体文本 和 斜体文本 表头1表头2 单元格1单元格2 """ 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"正在查看: {url}这是链接页面的模拟内容") def handle_link_click(self, url): """处理链接点击事件""" # 处理内部链接 if url.scheme() == "internal": if url.path() == "example": self.text_browser.setHtml(""" 内部链接页面 这是一个内部链接指向的页面 返回首页 """) else: # 外部链接可以在这里处理,比如用默认浏览器打开 print(f"打开外部链接: {url.toString()}") # 如果要在QTextBrowser中显示外部网页内容,需要额外的网络请求代码 if __name__ == "__main__": app = QApplication(sys.argv) window = TextBrowserDemo() window.show() sys.exit(app.exec_()) ``` ### 关键功能解析 1. **基本内容操作** - `append(text)`: 添加普通文本并自动换行 - `insertHtml(html)`: 插入HTML格式内容 - `setHtml(html)`: 设置整个内容为HTML - `clear()`: 清除所有内容 2. **导航功能** - `backward()`: 后退到上一页 - `forward()`: 前进到下一页 - `home()`: 回到初始页面 - 导航功能需要通过 `setHtml()` 或 `setPlainText()` 来建立页面历史 3. **链接处理** - `anchorClicked` 信号:当点击链接时触发 - 可以通过自定义协议(如 `internal:`)区分内部链接和外部链接 - 外部链接可以用系统默认浏览器打开(需要额外代码) 4. **文本导航与编辑** - 使用 `QTextCursor` 可以控制文本插入位置 - `moveCursor()` 方法可以滚动文本到指定位置 - 可以通过 `setReadOnly(False)` 允许用户编辑内容 原文出处:http://www.malaoshi.top/show_1GW1sEfMnUx2.html