使用 PySide 和 QTextEdit 半透明突出显示

2023-12-04

我创建了一个 QTextEdit 对象。下面的代码向当前选定的文本添加随机颜色的突出显示。我需要高光是半透明的,这样我就可以看到高光彼此分层。使用“setAlpha”似乎没有做任何事情。如何设置突出显示的 Alpha 或以其他方式获得半透明?

# Define cursor & span    
self.cursor = self.textdoc.textCursor()
self.selstart = self.cursor.selectionStart()
self.selend = self.cursor.selectionEnd()
self.seltext = self.cursor.selectedText()

# Create random color
r = randint(0,255)
g = randint(0, 255)
b = randint(0, 255)
color = QColor(r,g,b)
color.setAlpha(125)
format = QTextCharFormat()
format.setBackground(color)
self.cursor.setCharFormat(format)

看来不太可能QTextEdit将支持任何复杂的分层格式。所以我认为你必须自己混合颜色。下面的示例使用了相当粗略的方法,但看起来效果还不错。我不太确定你想要什么结果,但它应该让你知道如何继续:

import sys
from random import sample
from PySide import QtCore, QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.button = QtGui.QPushButton('Highlight', self)
        self.button.clicked.connect(self.handleButton)
        self.edit = QtGui.QTextEdit(self)
        self.edit.setText(open(__file__).read())
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.edit)
        layout.addWidget(self.button)

    def blendColors(self, first, second, ratio=0.5, alpha=100):
        ratio2 = 1 - ratio
        return QtGui.QColor(
            (first.red() * ratio) + (second.red() * ratio2),
            (first.green() * ratio) + (second.green() * ratio2),
            (first.blue() * ratio) + (second.blue() * ratio2),
            alpha,
            )

    def handleButton(self):
        cursor = self.edit.textCursor()
        start = cursor.selectionStart()
        end = cursor.selectionEnd()
        if start != end:
            default = QtGui.QTextCharFormat().background().color()
            color = QtGui.QColor(*sample(range(0, 255), 3))
            color.setAlpha(100)
            for pos in range(start, end):
                cursor.setPosition(pos)
                cursor.movePosition(QtGui.QTextCursor.NextCharacter,
                                    QtGui.QTextCursor.KeepAnchor)
                charfmt = cursor.charFormat()
                current = charfmt.background().color()
                if current != default:
                    charfmt.setBackground(self.blendColors(current, color))
                else:
                    charfmt.setBackground(color)
                cursor.setCharFormat(charfmt)
            cursor.clearSelection()
            self.edit.setTextCursor(cursor)

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(800, 100, 600, 500)
    window.show()
    sys.exit(app.exec_())

(PS:我没有尝试在这里实现的一件事是removing强调。如果您使用相对较小的颜色集,我想您可以预先计算所有颜色组合的表格,然后使用(current_color, removed_color)查找所需的“减去”颜色)。

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

使用 PySide 和 QTextEdit 半透明突出显示 的相关文章

  • 如何从网站中抓取动态内容?

    所以我使用 scrapy 从亚马逊图书部分抓取数据 但不知何故我知道它有一些动态数据 我想知道如何从网站中提取动态数据 到目前为止我已经尝试过以下方法 import scrapy from items import AmazonsItem
  • 将预训练的手套词嵌入与 scikit-learn 结合使用

    我已经使用 keras 来使用预先训练的词嵌入 但我不太确定如何在 scikit learn 模型上执行此操作 我也需要在 sklearn 中执行此操作 因为我正在使用vecstack集成 keras 序列模型和 sklearn 模型 这就
  • 用定点迭代求解该方程

    我怎样才能解这个方程 x3 x 1 0 使用定点迭代 有没有定点迭代我可以在网上找到代码 尤其是Python 吗 Using scipy optimize fixed point http docs scipy org doc scipy
  • Buildozer Numpy RuntimeError:工具链损坏:无法链接简单的 C 程序

    用 Python 编写我的第一个 Android 应用程序并使用 Buildozer 对其进行打包 因为稍后在项目中需要使用numpy 所以我尝试打包以下测试代码 import numpy import kivy kivy require
  • Qt/c++ 随机字符串生成[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 需要生成多个随机字符串 几乎就像一个由一定长度的 ASCII 字符组成的唯一 ID 这些字符混合有大写 小写 数字字符 有没有 Qt 库可以实现这一点 如果没有 在纯 C 中生成多个随机字
  • 有效地写入 pandas 中的多个相邻列

    使用 numpy ndarray 可以一次写入多个列 而无需先进行复制 只要它们相邻 如果我想写入数组的前三列 我会写 a 0 0 3 1 2 3 this is very fast a is a numpy ndarray 我希望在 pa
  • Tkinter 按钮鼠标右键和左键单击有不同的命令

    我正在用 Python 制作扫雷游戏 并使用 tkinter 库来创建 gui 有没有 绑定到 tkinter 按钮两个命令的方法 一个是右键单击按钮时的命令 另一个是单击左键时的命令 通常 按钮仅设计用于单击 但 tkinter 允许您为
  • 我无法设置顶级标题

    我想为 TopLevel 设置标题 但 TopLevel 显示 Root 的标题 我认为我的下一个脚本与 TkInter 文档中的示例相对应 但给了我不好的结果 你能解释一下 为什么我的设置master title 顶部 in 应用程序顶部
  • 如何在Python中获取套接字的外部IP?

    当我打电话时socket getsockname 在套接字对象上 它返回我的机器的内部 IP 和端口的元组 但是 我想找回我的外部IP 最便宜 最有效的方式是什么 如果没有外部服务器的配合 这是不可能的 因为您和另一台计算机之间可能存在任意
  • 如何在 PyTorch 中对子集使用不同的数据增强

    如何针对不同的情况使用不同的数据增强 转换 Subset在 PyTorch 中吗 例如 train test torch utils data random split dataset 80000 2000 train and test将具
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • django 南迁移,不设置默认值

    我使用 South 来迁移我的 Django 模型 然而 南方有一个令人讨厌的错误 它不会在 Postgres 数据库中设置默认值 例子 created at models DateTimeField default datetime no
  • 了解字典的深度

    假设我们有这个字典 d a 1 b c 了解嵌套的最直接方法是什么depth of it 您需要创建一个递归函数 gt gt gt def depth d if isinstance d dict return 1 max map dept
  • (venv) (base) 都在 python 项目上活跃,我如何只进入 venv?

    所以我将 vscode 与 conda 对于 django 项目 一起使用 并尝试激活名为 venv 的虚拟环境 它来自 base C Users User Desktop pfa master pfa master venv Script
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • 有没有比 Python 内置 == 运算符更快的方法来测试两个列表是否具有完全相同的元素?

    如果我有两个列表 每个列表有 800 个元素长并填充整数 有没有比使用内置元件更快的方法来比较它们具有完全相同的元件 如果没有 则短路 操作员 a 6 2 3 88 54 486 b 6 2 3 88 54 486 a b gt gt gt
  • 使用 pyspark 计算所有可能的单词对

    我有一个文本文档 我需要找到整个文档中重复单词对的可能数量 例如 我有下面的word文档 该文档有两行 每行用 分隔 文档 My name is Sam My name is Sam My name is Sam My name is Sa
  • 通过过滤对 Pyspark Dataframe 进行分组

    我有一个数据框如下 cust id req req met 1 r1 1 1 r2 0 1 r2 1 2 r1 1 3 r1 1 3 r2 1 4 r1 0 5 r1 1 5 r2 0 5 r1 1 我必须观察客户 看看他们有多少要求 看看
  • Pandas:合并多个数据框并控制列名称?

    我想将九个 Pandas 数据帧合并到一个数据帧中 对两列进行联接 控制列名称 这可能吗 我有九个数据集 它们都有以下列 org name items spend 我想将它们加入到具有以下列的单个数据框中 org name items df

随机推荐

  • 如何在 Spring Cloud Gateway .yml 配置中禁用全局 CORS 配置以允许来自任何来源的请求?

    我想为我的微服务应用程序创建一个网关服务 并添加 Spring Cloud Gateway 文档中提到的配置以在网关中禁用 CORS spring GATEWAY CONFIG cloud gateway globalcors corsCo
  • 如何将 python 对象 pickle 到 csv 文件中?

    我正在尝试将 python 对象 pickle 到 csv 文件中 我想将对象的 pickle 写入文件中的第三列 我想使用 pickle 来避免为复杂对象编写序列化 写入 csv 的代码 with open self file path
  • 从 PHP 执行 Ruby 脚本并获取输出

    我有这个 Ruby 脚本 test rb print hello 我有这个 PHP 脚本 test php cmd ruby test rb system cmd 现在我通过 CLI 调用 PHP 脚本 php test php 我没有得到
  • 替换标识结束字符的多行

    我有下面的代码 CREATE TABLE Table1 column1 double NOT NULL column2 varchar 60 NULL column3 varchar 60 NULL column4 double NOT N
  • Apache Commons 电子邮件使用 base64 进行编码附加

    我正在尝试通过以下方式发送 base64 编码的文件apache commons mail我似乎无法理解Content Transfer Encoding base64标头应该去的地方 Create the email MultiPartE
  • 使用另一个文件夹中的 git“log”

    我在目录中A 我该如何执行git log对于目录中的 git 存储库B From man git 您可以使用 git dir参数 在传递任何命令之前 git git dir foo bar git log 指定 git目录是必要的 从文档
  • 如何在不同时间向 facebook 请求不同的权限?

    Facebook 建议 在使用 Facebook 登录时 您应该首先向用户请求尽可能少的权限 特别是避免请求发布权限 直到用户需要通过您的网站发布某些内容 https developers facebook com docs faceboo
  • 用于在窗口上打印串行数据的Python代码。

    我对 python 和 pyserial 很陌生 我的电脑安装了带有 pyserial 的 python 2 7 4 我想在我的电脑上的单独窗口上打印串行接收的数据 首先必须打开窗口 然后在该窗口上打印串行数据 这里必须打开一次窗口 并且必
  • 什么会让 git 在 git pull --rebase 期间删除本地文件?

    我正在尝试重现我尝试回答所导致的问题这个问题 In short github 用户尝试这样做git pull rebase并且该用户的本地文件已被删除 我尝试在 github 上重新创建这个场景 但在我的例子中没有删除任何内容 那么如何重现
  • C: printf 一个浮点值

    我想打印一个浮点值 该值在逗号后有 2 个整数和 6 个小数位 如果我只是使用printf f myFloat 我得到了一个被截断的值 我不知道这是否总是发生在 C 语言中 或者只是因为我使用 C 语言作为微控制器 确切地说是 CCS 但在
  • 如何在 Android 中调出锁屏?

    我想在单击按钮时调出设备的锁定屏幕 我搜索了很多并且知道可以通过DevicePolicyManager但不知道该怎么做 我还找到了很多例子 但它们都没有打开锁屏 没有错误 例如this or this 如何使用锁定设备DevicePolic
  • 如何在Python中计算One Class SVM的AUC?

    我在 python 中绘制 OneClassSVM 的 AUC 图时遇到困难 我使用 sklearn 生成混淆矩阵 例如 tp fp fn tn with fn tn 0 from sklearn metrics import roc cu
  • Grunt imagemin正在运行但不缩小

    Image min 运行正常 但我得到 0 个缩小的图像 为什么 在我的终端上运行代码后 grunt imagemin Running imagemin dist imagemin task Minified 0 images saved
  • 如何在 Laravel 5.0 中使用外全连接?

    这是我的控制器 public function lihatpesanansemua ajax if Request ajax hasil DB table pesanan gt join pemesan pemesan id pesanan
  • 解析字段名不一致的JSON字符串

    我在反序列化以下 JSON 结构时遇到问题 每个节点包含一个 ID 和带有值的多语言代码 语言属性的数量并不一致 但我需要这些值作为具有语言字段和值字段的对象列表 id w 312457 eng deep fat frying ger Fr
  • 需要帮助在单个单元格中获取多个值,并在 Excel 中满足条件

    我需要帮助来获取单个单元格中的值并满足条件 我想要单个单元格中的值低于 95 的违约者 e g 如果有动态数组公式 FILTER 和 TEXTJOIN TEXTJOIN CHAR 10 TRUE FILTER A2 A7 E2 E7 lt
  • 如何在 iOS 应用程序中以编程方式创建 PDF 文件?

    如何根据用户操作生成 PDF 文件 See 用石英画画 了解如何创建 PDF 图形上下文 一些注意事项 iPhoneOS注意 如果您想在 iPhone 应用程序中创建 PDF 图形上下文 请确保您还阅读了 在 iPhone OS 中绘制到图
  • 在 C# 中使用 AES 加密

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我似乎找不到使用 AES 128 位加密的清晰示例 有人有一些示例代码吗 如果您只想使用内置加密提供程序 RijndaelMana
  • 注销 WordPress 并重定向到不同的 URL

    我的网站上有一个用于注销 Wordpress 的注销选项 注销后 我想将用户重定向到不同的 URL 我在functions php中使用它 add action wp logout auto redirect external after
  • 使用 PySide 和 QTextEdit 半透明突出显示

    我创建了一个 QTextEdit 对象 下面的代码向当前选定的文本添加随机颜色的突出显示 我需要高光是半透明的 这样我就可以看到高光彼此分层 使用 setAlpha 似乎没有做任何事情 如何设置突出显示的 Alpha 或以其他方式获得半透明