使用 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 半透明突出显示 的相关文章

  • 有没有办法使用纯Python释放纯函数的GIL?

    我想我一定错过了什么 这看起来很正确 但我看不出有什么办法可以做到这一点 假设你有一个 Python 纯函数 from math import sin cos def f t x 16 sin t 3 y 13 cos t 5 cos 2
  • 在 MacOSX10.6 上运行 python 服务器时 MySQLdb 错误

    运行我的服务器 python manage py runserver 产生以下错误 django core exceptions ImproperlyConfigured 加载 MySQLdb 模块时出错 没有名为 MySQLdb 的模块
  • PyQt4 信号和槽

    我正在使用 PyQt4 编写我的第一个 Python 应用程序 我有一个 MainWindow 和一个 Dialog 类 它是 MainWindow 类的一部分 self loginDialog LoginDialog 我使用插槽和信号 这
  • 使用 for 循环 Python 为数组赋值

    我正在尝试将字符串的值分配给不同的数组索引 但我收到一个名为 列表分配超出范围 的错误 uuidVal distVal uuidArray distArray for i in range len returnedList for beac
  • 插入多行并返回主键时 Sqlalchemy 的奇怪行为

    插入多行并返回主键时 我注意到一些奇怪的事情 如果我在 isert 查询中添加使用参数值 我会得到预期的行为 但是当将值传递给游标时 不会返回任何内容 这可能是一个错误还是我误解了什么 我的sqlachemy版本是0 9 4 下面如何重现错
  • 代码 zip( *sorted( zip(units, error) ) ) 的作用是什么?

    对于我的申请units and errors始终是数值列表 我尝试用谷歌搜索每个部分的作用 并找出了 zip 的第一部分 它似乎 ziped list zip units errors 只需将单位和误差配对即可生成一个列表 如下所示 uni
  • 使用 pygtk3 将 GUI 窗口添加到 python opencv2 程序

    我已经使用Python和Opencv2完成了一个程序 现在 我想向我的程序添加一个 GUI 窗口 我对 PyGtk3 有一些经验 因此 我修改了代码以采用 PyGtk3 但是 我遇到了错误 因此 我尝试了一个简单的程序来找出实际的错误 我的
  • 使用 Twisted Python 的 UDP 客户端和服务器

    我想创建一个服务器和客户端 使用 Twisted 从网络发送和接收 UDP 数据包 我已经用 Python 中的套接字编写了此代码 但想利用 Twisted 的回调和线程功能 然而 我需要 Twisted 设计方面的帮助 我想接收多种类型的
  • 使用主宰器将实时数据发送给客户端

    我尝试使用 Flask 的主宰框架 以便按照 Flask 代码片段将实时信息发送到客户端浏览器http flask pocoo org snippets 80 http flask pocoo org snippets 80 当我尝试为我的
  • Pandas:向量化局部范围操作([i:i+2] 行的最大值和总和)

    我希望在数据帧中的每一行的局部范围内进行计算 同时避免速度缓慢for环形 例如 对于下面数据中的每一行 我想找到未来 3 天内 包括当天 的最高气温以及未来 3 天内的总降雨量 Day Temperature Rain 0 30 4 1 3
  • 将多个 isinstance 检查转换为结构模式匹配

    我想转换此现有代码以使用模式匹配 if isinstance x int pass elif isinstance x str x int x elif isinstance x float Decimal x round x else r
  • Celery 设计帮助:如何防止并发执行任务

    我对 Celery AMQP 相当陌生 正在尝试提出一个任务 队列 工作人员设计来满足以下要求 我有多种类型的 每用户 任务 例如 TaskA TaskB TaskC 这些 每用户 任务中的每一个都为系统中的一个特定用户读取 写入数据 因此
  • 如何在 Python 中包含 PHP 脚本?

    我有一个 PHP 脚本 news generator php 当我包含它时 它会抓取一堆新闻项并打印它们 现在 我在我的网站 CGI 中使用 Python 当我使用 PHP 时 我在 新闻 页面上使用了这样的内容 为了简单起见 我删掉了这个
  • 如何使用JQuery和Django(ajax + HttpResponse)?

    假设我有一个 AJAX 函数 function callpage ajax method get url abc data x 3 beforeSend function success function html IF HTTPRESPO
  • 如何在 Flask 中获取 POSTed JSON?

    我正在尝试使用 Flask 构建一个简单的 API 现在我想在其中读取一些 POSTed JSON 我使用 Postman Chrome 扩展进行 POST 我 POST 的 JSON 很简单 text lalala 我尝试使用以下方法读取
  • 使用多行选项和编码选项读取 CSV

    在 azure Databricks 中 当我使用以下命令读取 CSV 文件时multiline true and encoding SJIS 似乎编码选项被忽略了 如果我使用multiline选项 Spark 使用默认值encoding那
  • Flask APScheduler + Gunicorn 工作人员 - 在套接字修复后仍在运行任务两次

    我有一个 Flask 应用程序 我使用 Flask APScheduler 在我的数据库上运行计划查询并通过 cron 作业发送电子邮件 我通过 Gunicorn 使用以下配置运行我的应用程序并通过主管进行控制 program myapp
  • 在 Mac (Catalina) 上安装 PyGame 时出错 [重复]

    这个问题在这里已经有答案了 我一直在尝试将 PyGame 安装到 Catalina 上的 Mac 上 但不知道如何安装 我收到的错误消息是 SystemExit error command gcc failed with exit stat
  • “ModuleNotFoundError:我的 Docker 容器中没有名为 的模块”

    我正在尝试在 Docker 容器中运行 python 脚本 但我不知道为什么 python 找不到任何 python 模块 我认为它与 PYTHONPATH 环境变量有关 所以我尝试将其添加到 Dockerfile 中 如下所示 ENV P
  • 有效积累稀疏 scipy 矩阵的集合

    我有一个 O N NxN 的集合scipy sparse csr matrix 每个稀疏矩阵都有 N 个元素集 我想将所有这些矩阵加在一起以获得一个常规的 NxN numpy 数组 N 约为 1000 矩阵内非零元素的排列使得所得总和肯定不

随机推荐

  • 如何在 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 或以其他方式获得半透明