37- 输入和显示-文本浏览器QTextBrowser

2023-11-02

文本浏览器QTextBrowser

扩展了QTextEdit(只读模式),添加了一些导航功能,以便用户可以跟踪超文本文档中的链接。

  • 如果要为用户提供可编辑的富文本编辑器,请使用QTextEdit 。
  • 如果想要一个没有超文本导航的文本浏览器,使用QTextEdit,并使用setReadOnly()禁用编辑。
  • 如果只需要显示一小段富文本,使用QLabel

QTextBrowser 是 QTextEdit 的只读版本,它继承了 QTextEdit 全部的特性,支持的 HTML 标记语言子集也是一样的。

QTextBrowser 还有更多增强功能,用于打开浏览 HTML 内部的超链接。QTextBrowser 本身就是 HTML 文件浏览器,虽然支持的只是 HTML 子集。

from PySide6.QtWidgets import QTextBrowser

QTextBrowser(parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None)-> None

QTextBrowser 显示的内容可以用基类的 setHtml()、setPlainText()等函数,另外 QTextBrowser 还有自己专属的打开文件链接函数:

setSource(const :QUrl str)

doSetSource(name: Union[PySide6.QtCore.QUrl,str],
            type: PySide6.QtGui.QTextDocument.ResourceType=Instance(PySide6.QtGui.QTextDocument.UnknownResource))-> None

这是一个槽函数,它参数类似 QUrl(“file:///D:/QtProjects/ch05/simplebrowser/opensuse.htm”)文件链接,自动打开并解析 HTML 文件内容,然后显示到控件界面。

当源文件链接 Source 发生变化时,会触发信号:

sourceChanged(const QUrl & src)

参数 src 是新的链接地址,通过这个信号可以跟踪浏览的源文件链接变化。

import sys
from PySide6.QtWidgets import QApplication,QWidget,QLabel,QTextEdit,QTextBrowser,QHBoxLayout,QVBoxLayout


class Demo(QWidget):
    def __init__(self):
        super(Demo,self).__init__()
        self.edit_label=QLabel('QTextEdit',self)
        self.browser_label=QLabel('QTextBrowser',self)
        self.text_edit=QTextEdit(self)
        self.text_edit.insertPlainText("<font color='red'>Hello World~</font>")

        self.text_browser=QTextBrowser(self)

        self.edit_v_layout=QVBoxLayout()
        self.browser_v_layout=QVBoxLayout()
        self.all_h_layout=QHBoxLayout()

        self.layout_init()
        self.text_edit_init()

    def layout_init(self):
        self.edit_v_layout.addWidget(self.edit_label)
        self.edit_v_layout.addWidget(self.text_edit)

        self.browser_v_layout.addWidget(self.browser_label)
        self.browser_v_layout.addWidget(self.text_browser)

        self.all_h_layout.addLayout(self.edit_v_layout)
        self.all_h_layout.addLayout(self.browser_v_layout)

        self.setLayout(self.all_h_layout)

    def text_edit_init(self):
        self.text_edit.textChanged.connect(self.show_text_func)# 1

    def show_text_func(self):
        self.text_browser.setText(self.text_edit.toPlainText())# 2


if __name__=='__main__':
    app=QApplication(sys.argv)
    demo=Demo()
    demo.show()
    sys.exit(app.exec())

方法

方法 返回值 说明
backwardHistoryCount() int 返回历史中向后的位置数。
clearHistory() None 清除已访问文档的历史记录,并禁用向前和向后导航。
forwardHistoryCount() int 返回历史记录中向前的位置数。
historyTitle(arg__1:int) str 返回 HistoryItem 的文档标题()。
i< 0 向后()历史
i==0 当前,请参阅源()
i> 0 前进()历史
historyUrl(arg__1:int) PySide6.QtCore.QUrl 返回历史记录项的 URL。
i< 0 向后()历史
i==0 当前,请参阅源()
i> 0 前进()历史
isBackwardAvailable() bool 返回在文档历史记录中是否可以回退使用back()
isForwardAvailable() bool 返回在文档历史记录中是否可以前进使用forward()
openExternalLinks() bool 获取是否应使用openUrl()自动打开指向外部源的链接,而不是发出anchorClickd信号。如果链接的方案既不是文件也不是qrc,则将其视为外部链接。
默认值为false。
openLinks() bool 获取是否自动打开用户通过鼠标或键盘激活的链接。
无论此属性的值如何,始终发出 anchorClicked 信号。
setSearchPaths(paths) None 设置存文本浏览器用于查找支持内容的搜索路径。
paths:list
searchPaths() list of strings 此属性保存文本浏览器用于查找支持内容的搜索路径。
QTextBrowser使用此列表来查找图像和文档。
默认情况下,此属性包含一个空字符串列表。
setOpenExternalLinks(open) bool 指定 QTextBrowser 是否应使用openUrl()而不是发出 anchorClicked 信号自动打开指向外部源的链接。如果链接的方案既不是文件也不是 qrc,则将其视为外部链接。
默认值为 false。
setOpenLinks(open) bool 此属性指定 QTextBrowser 是否应自动打开用户尝试通过鼠标或键盘激活的链接。
无论此属性的值如何,始终发出 anchorClicked 信号。
默认值为 true。
[slots]setSource(name:PySide6.QtCore.QUrl[,type=QTextDocument.UnknownResource]) None 尝试以指定类型加载给定url处的文档。
如果类型为UnknownSource(默认值),则将检测文档类型:
如果url以扩展名.md、.mkd或.makdown结尾,则将通过setMarkdown()加载文档;
否则将通过setHtml()加载。可以通过显式指定类型来绕过此检测。
source() PySide6.QtCore.QUrl 此属性保存所显示文档的名称。。
如果没有显示文档或源未知,则这是一个无效的url。
设置此属性时,QTextBrowser会尝试在当前源的searchPaths属性和目录的路径中查找具有指定名称的文档,除非该值是绝对文件路径。它还检查可选的锚点并相应地滚动文档
如果文档中的第一个标记是<qt-type=detail>,则该文档在浏览器窗口中显示为弹出窗口,而不是新文档。否则,文档将在文本浏览器中正常显示,文本将通过setHtml()或setMarkdown()设置为命名文档的内容,具体取决于文件名是否以任何已知的Markdown文件扩展名结尾。
如果希望避免自动类型检测并显式指定类型,请调用setSource()而不是设置此属性。
默认情况下,此属性包含空URL。
sourceType() ResourceType 此属性保存所显示文档的类型。
如果未显示任何文档或源的类型未知,则为UnknownSource。
否则,它保存检测到的类型,或调用setSource()时指定的类型。

功能性方法

槽方法 说明
backward() 将显示的文档更改为通过导航链接生成的文档列表中的上一个文档。如果没有以前的文档,则不执行任何操作。
doSetSource(name[,type=QTextDocument.UnknownResource]) 尝试以指定类型加载给定url处的文档。
setSource()调用doSetSource。在Qt 5中,setSource(const QUrl&url)是虚拟的。
在Qt6中,doSetSource()是虚拟的,因此可以在子类中重写。
forward() 将显示的文档更改为通过导航链接生成的文档列表中的下一个文档。如果没有下一个文档,则不执行任何操作。
home() 将显示的文档更改为历史记录中的第一个文档。
reload() 重新加载当前集合源。

文档来源和内容

QTextEdit的内容是使用setHtml()或 setPlainText()设置的,

QTextBrowser 实现了 setSource()函数,可设置文本,在搜索路径列表和当前系统目录中查找指定名称名称。

如果文档名称以锚点结尾(例如#anchor),文本浏览器会自动滚动到该位置(使用scrollToAnchor())。

当用户单击超链接时,浏览器将使用链接的值作为参数调用setSource()本身。可以通过连接到 sourceChanged()信号来跟踪当前源。

导航

  • back()和forward()槽,可以使用它们来实现"后退"和"前进"按钮

  • home()插槽将文本设置为显示的第一个文档。

  • 当用户单击锚点时,会发出 anchorClicked()信号。要覆盖浏览器的默认导航行为,调用setSource()函数以在连接到此信号的插槽中提供新的文档文本。

  • 如果要加载存储在Qt资源系统中的文档,使用URL中的方案来加载。例如,对于文档资源路径qrc:/docs/index.html作为 URL,使用setSource()。

信号

信号 说明
anchorClicked(QUrl:PySide6.QtCore.QUrl) 当用户单击锚点时发出该信号。锚引用的URL在链接中传递。
注意,除非openLinks属性设置为false或在连接的插槽中调用setSource(),否则浏览器将自动处理导航到link指定的位置。此机制用于覆盖浏览器的默认导航功能。
backwardAvailable(bool) 当backward()的可用性发生变化时,会发出此信号。当用户在家时,available为false();否则这是真的。
forwardAvailable(bool) 当forward()的可用性发生变化时,会发出此信号。available在用户向后导航()后为true,在用户向前导航()时为false。
highlighted(QUrl:PySide6.QtCore.QUrl) 当用户已选择但未激活文档中的锚点时,发出该信号。锚引用的URL在链接中传递。
historyChanged() 当历史发生变化时,会发出此信号。
sourceChanged(src) 该信号在源发生变化时发出,src是新的源。
当调用setSource()、forward()、backward()或home()时,或者当用户单击链接或按下等效的键序列时,都会以编程方式更改源代码。

QTextBrowser例子

image-20230319024223873

# -*- coding: UTF-8 -*-
# File date: Hi_2023/3/15 1:01
# File_name: 02-QTextBrowser例子.py


import sys
from PySide6.QtWidgets import(QApplication,QWidget,QMainWindow
,QLineEdit,QTextBrowser,QPushButton,QVBoxLayout,QHBoxLayout,QFrame,QLabel)
from PySide6.QtCore import QUrl
import urllib
import os

os.chdir(os.path.dirname(__file__))


class TextBrowser(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.lineEdit = QLineEdit()
        self.lineEdit.setPlaceholderText("在这里添加你想要的数据,回车确认")
        self.lineEdit.returnPressed.connect(self.append_text)

        self.textBrowser = QTextBrowser()
        self.textBrowser.setAcceptRichText(True)
        self.textBrowser.setOpenExternalLinks(True)
        self.textBrowser.setSource(QUrl(r'.\support\textBrowser.html'))
        self.textBrowser.anchorClicked.connect(lambda url: self.statusBar().showMessage('你点击了url'+ urllib.parse.unquote(url.url()),3000))
        self.textBrowser.historyChanged.connect(self.show_anchor)

        self.back_btn = QPushButton('Back')
        self.forward_btn = QPushButton('Forward')
        self.home_btn = QPushButton('Home')
        self.clear_btn = QPushButton('Clear')

        self.back_btn.pressed.connect(self.textBrowser.backward)
        self.forward_btn.pressed.connect(self.textBrowser.forward)
        self.clear_btn.pressed.connect(self.clear_text)
        self.home_btn.pressed.connect(self.textBrowser.home)

        layout = QVBoxLayout()
        layout.addWidget(self.lineEdit)
        layout.addWidget(self.textBrowser)
        frame = QFrame()
        layout.addWidget(frame)

        self.text_show = QTextBrowser()
        self.text_show.setMaximumHeight(70)
        layout.addWidget(self.text_show)

        layout_frame = QHBoxLayout()
        layout_frame.addWidget(self.back_btn)
        layout_frame.addWidget(self.forward_btn)
        layout_frame.addWidget(self.home_btn)
        layout_frame.addWidget(self.clear_btn)
        frame.setLayout(layout_frame)

        widget = QWidget()
        self.setCentralWidget(widget)
        widget.setLayout(layout)

        self.setWindowTitle('QTextBrowser 案例')
        self.setGeometry(300,300,300,300)
        self.show()

    def append_text(self):
        text = self.lineEdit.text()
        self.textBrowser.append(text)
        self.lineEdit.clear()

    def show_anchor(self):
        back = urllib.parse.unquote(self.textBrowser.historyUrl(-1).url())
        now = urllib.parse.unquote(self.textBrowser.historyUrl(0).url())
        forward = urllib.parse.unquote(self.textBrowser.historyUrl(1).url())
        _str = f'上一个url:{back},<br>当前url:{now},<br>下一个url:{forward}'
        self.text_show.setText(_str)

    def clear_text(self):
        self.textBrowser.clear()


if __name__ =='__main__':
    app = QApplication(sys.argv)
    ex = TextBrowser()
    sys.exit(app.exec())

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

37- 输入和显示-文本浏览器QTextBrowser 的相关文章

随机推荐

  • ThreeJS-3D教学一基础场景创建

    Three js 是一个开源的 JS 3D 图形库 用于创建和展示高性能 交互式的 3D 图形场景 它建立在 WebGL 技术之上 并提供了丰富的功能和工具 使开发者可以轻松地构建令人惊叹的 3D 可视化效果 Three js 提供了一套完
  • 深入完整的带你了解java对象的比较

    目录 元素的比较 1 基本类型的比较 2 对象比较的问题 1 运行结果 2 疑问 3 原因 对象的比较 1 覆写基类的equals 2 基于Comparble接口类的比较 3 基于比较器比较 4 三种方式对比 元素的比较 1 基本类型的比较
  • 棋子翻转---- 美团2016研发工程师在线编程题

    编程题 棋子翻转 在4x4的棋盘上摆满了黑白棋子 黑白两色的位置和数目随机其中左上角坐标为 1 1 右下角坐标为 4 4 现在依次有一些翻转操作 要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转 请计算出翻转后的棋盘颜色 给定两个
  • Rust 中的注释

    Rust 中的注释分为两种 普通注释 仅做注释用 在编译时编译器会忽略它们 文档注释 可以通过命令生成 HTML 帮助文档 普通注释 Rust 的普通注释与 C 的风格一样 分为 单行注释 以 开头 后的内容都会被注释掉 块注释 可以注释多
  • fanuc机器人示教器输入中文注释

  • VScode+gcc编译环境搭建

    VScode gcc编译环境搭建 VScode下载 GCC安装 可能出现的问题 一些IDE集成开发环境占用内存大 体量大 比如Visual studio Visual Studio Code 简称 VS Code VSC 是一款免费开源的现
  • 双网卡上网的问题

    相信很多人都有和笔者一样的经历 由WIN XP构成的网络所有设置和由WIN 2000构成的完全一样 但还是出现了根本不能访问的情况 笔者认为这主要是因为XP的安全设置和2000不一样所导致 针对这个问题笔者在网上查了一些资料 并将各种网上提
  • C语言学习--------修改控制台输出文字颜色

    开发工具CLion 运行环境 Win10LTSC2021 操作描述 引入头文件 include
  • lua执行系统命令

    Lua中 系统库函数有 OS functions os clock os date os difftime os execute os exit os getenv os remove os rename os setlocale os t
  • MySQL数据库事务隔离级别(Transaction Isolation Level)

    今天在学习JDBC的时候看到了关于MySql的事务的隔离级别的问题 感觉内容挺高级的 所以记录一篇文章 以备后面使用 数据库隔离级别有四种 应用 高性能mysql 一书中的说明 然后说说修改事务隔离级别的方法 1 全局修改 修改mysql
  • 【Web】HTML标签:表格。(1)作用:用于显示、展示数据(2)语法<table></table>是用于定义表格的标签<tr></tr>标签用于定义表格中的行,必须嵌套在<table>

    表格 1 作用 用于显示 展示数据 2 语法 table table 是用于定义表格的标签 标签用于定义表格中的行 必须嵌套在 table table 标签中 用于定义表格中的单元格 必须嵌套在标签中 字母td指表格数据 table dat
  • 机器学习(一)——线性回归介绍及案例实战(Python实现)

    目录 前言 一 线性模型介绍 二 一元线性回归 1 介绍 2 案例 3 模型优化 总结 前言 线性回归模型是机器学习中非常基础且经典的模型 是利用线性拟合的方式探寻数据背后的规律 特征变量的个数可将线性回归模型分为一元线性回归和多元线性回归
  • 数字图象处理之二维码图像提取算法(八)

    PDF417 码几何失真的校正 1 每个 PDF417 条码都包含一个起始符和终止符 且其模块比例是固定的 利用这个特性 可以采取扫描条码左右边缘点 能后采用直线拟合方法来确定条码的左右边缘直线 Hough 变换中获得的条码横向边界直线 可
  • LaTex 连字符多篇连续引用

    将文献 1 2 3 4 变成 1 4 对elsevier模板而言 在文献部分加入如下代码即可 biboptions numbers sort compress 其他情况 可参考 https www cnblogs com yymn p 13
  • MySQL高级篇

    文章目录 MySQL高级 一 Linux下MySQL的安装与使用 1 安装前说明 2 MySQL的Linux版安装 3 MySQL登录 4 Linux下修改配置 5 字符集的相关操作 5 1 各级别的字符集 5 2 请求到响应过程中字符集的
  • ffmpeg av_register_all release版 异常

    ffmpeg av register all release版 异常退出 属性 gt Linker gt Optimization gt References Keep Unreferenced Data OPT NOREF
  • 软件测试风险点

    软件测试风险清单 圆圆测试日记 博客园 最近在看软件测试风险点的文章 转载下觉得很好的文章留存一下 软件测试风险清单 软件测试风险 主要分为 风险评估和风险控制 软件测试风险大致可以从以下几个方面考虑 一 人力 风险评估点 1 人力资源不够
  • 【笔记】计算机网络-应用层

    文章目录 网络应用模型 概述 模型 域名解析系统DNS 域名 域名服务器 域名解析过程 文件传输协议FTP FTP工作原理 电子邮件 格式 组成结构 简单邮件传送协议SMTP MIME 邮局协议POP3 网际报文存取协议IMAP 小结 万维
  • 微信小程序获取接口返回数据

    import java io BufferedReader import java io InputStreamReader import java net URL import java net URLConnection import
  • 37- 输入和显示-文本浏览器QTextBrowser

    文本浏览器QTextBrowser 扩展了QTextEdit 只读模式 添加了一些导航功能 以便用户可以跟踪超文本文档中的链接 如果要为用户提供可编辑的富文本编辑器 请使用QTextEdit 如果想要一个没有超文本导航的文本浏览器 使用QT