更改QLineEdit的ClearButton图标

2024-05-16

我想在Windows 10(1909,64位)上的Python 3.8和PyQt5(5.15.0)上更改我的QLineEdit的ClearButton图标,稍后我想在Linux上运行代码。

我尝试应用此处找到的代码:如何在 QLineEdit 中制作一个像这样的额外图标? https://stackoverflow.com/questions/11381865/how-to-make-an-extra-icon-in-qlineedit-like-this

但是,我无法从中生成一些正在运行的 Python 3 代码,希望有人可以帮助我解决我的问题。

下面是我的最小代码示例的预览。除了带有标准 ClearButton 的 QLineEdit 之外,我真正想要的图标是可见的 - 也是为了确保 resources_rc.py 正确加载。

My 最小代码示例由两个 .py 文件组成(一个用于图像,一个用于代码本身):

清除按钮测试.py:

from PyQt5 import QtCore, QtGui, QtWidgets
import resources_rc


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(423, 136)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(32, 28, 257, 57))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.lineEdit.setFont(font)
        self.lineEdit.setClearButtonEnabled(True)
        self.lineEdit.setObjectName("lineEdit")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(324, 33, 33, 37))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/icon/ClearButton.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.pushButton.setIcon(icon)
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

resources_rc.py:

from PyQt5 import QtCore

qt_resource_data = b"\
\x00\x00\x03\xfb\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x14\x00\x00\x00\x14\x08\x02\x00\x00\x00\x02\xeb\x8a\x5a\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\
\x09\x70\x48\x59\x73\x00\x00\x0e\xc2\x00\x00\x0e\xc2\x01\x15\x28\
\x4a\x80\x00\x00\x03\x90\x49\x44\x41\x54\x38\x4f\x4d\x54\x4b\x4f\
\x1b\x57\x14\xc6\x8f\x99\xb1\xc0\x15\x89\x44\x23\xbb\xae\xc1\x06\
\xcc\x58\xbc\xec\xb1\x09\x41\xd4\x22\x62\xd1\x90\x45\xb3\x29\x31\
\x31\x4d\x52\x2a\x56\x89\x50\xd4\x15\xff\x22\xc1\x2c\x78\xa5\xab\
\x66\x41\xb3\x48\x37\xcd\x06\x55\x79\xa0\x1a\x92\x80\x94\xaa\x94\
\x0d\x34\x18\x08\xa9\xc2\xcc\x90\x48\x48\x78\x4c\x31\x73\xc7\xee\
\x77\xae\x41\xed\x99\xb9\x33\xf7\xea\x9c\xef\x9c\xef\x3c\x66\x6c\
\xa3\xa3\xa3\x1e\x8f\x67\xf7\xfd\xfb\xfc\xe1\xa1\x69\x32\x93\x1d\
\x5b\x58\xcc\x34\x4d\xcb\x62\xc7\x26\x76\x38\xe3\xc4\x18\x9e\xa4\
\x60\xcc\x29\x0a\xb5\x7e\xff\x9f\x7f\xac\xd8\x7d\x9f\xfb\x46\x46\
\x46\x6e\xdd\xbe\xed\x74\x38\x61\x6e\x59\x45\x86\x47\xf9\xc5\x8a\
\x16\x2e\xd3\xa2\x2d\x6e\xae\x16\x5d\xe2\x0f\xf7\xef\xcf\xce\xce\
\xb6\x45\xda\xed\x1f\x3e\x7e\xdc\xdf\xdf\x6f\x6c\x6c\xbc\xf3\xfd\
\x1d\xa7\xd3\x49\x56\x10\x56\x04\x90\xa3\xc8\x03\xb9\x00\x90\x59\
\xa2\x24\xce\x4c\xcf\x74\x74\x74\xa8\xaa\xba\xb3\xf3\xd6\x11\x69\
\x6f\xfb\xfd\xf5\xeb\xd6\xd6\xd6\x40\x5d\x40\x96\x9b\x5e\xbc\x78\
\x59\x38\x2a\x00\x56\xa4\x68\x04\x60\xa0\x0d\x17\x26\x13\x45\x71\
\x66\x66\x1a\xc8\x6c\x36\x9b\xec\xbf\xba\xab\xa9\x8e\x78\x3c\x9e\
\xcf\x1f\x2e\x2f\x2f\x47\x22\x91\x60\x30\x18\x0e\x87\x33\x99\x4c\
\xe1\xe8\x88\x63\x4f\x1d\x98\x96\x28\x0a\x53\xd3\xd3\xf1\x78\x47\
\x76\x33\x9b\x4c\x0e\xa8\xea\x2e\x54\x0e\x25\xa6\x40\x97\xcf\xe7\
\x5f\xbd\x7a\xa9\x28\xb1\xfa\xfa\xfa\xe6\xe6\xe6\xf9\xf9\xf9\x42\
\xa1\x00\x35\x0f\xca\x04\x41\x98\x9c\x9a\x42\x98\xcd\xcd\xcd\x6b\
\x03\x03\xea\xae\x5a\xf6\xea\x50\x22\x51\xd4\x15\x7b\xc3\xc8\x2f\
\x2e\x2e\xc2\x02\xf9\x23\x8b\xe7\xcf\x9e\xff\x53\x38\x82\x05\x62\
\x4e\x4e\x4e\x9e\x22\xaf\x69\xaa\x8a\x82\x13\xc2\x62\x94\x33\xe7\
\x47\xe5\xcd\xe5\x8d\xcc\x6f\x99\xf3\x9d\xe7\x9b\x9a\x9a\xda\xda\
\xdb\x9e\xfc\xfa\xc4\x66\xab\x98\x98\x98\x88\xc5\x62\x84\x4c\xa5\
\x54\x55\xa3\x1c\xca\x8b\x59\xb6\xeb\x37\xae\x53\x13\x79\x2f\x51\
\x16\xbc\xdd\xee\x4f\xd2\xe9\x74\x5d\x5d\xdd\xea\xea\x6a\xa9\x54\
\x42\x2d\x80\x4c\xa5\x52\x9a\xaa\xd1\x1c\xf0\x9e\x97\x37\x8e\x96\
\x96\x16\xcc\x01\x67\x41\x17\xc4\x30\x8c\x67\x4f\x9f\x7e\x91\x48\
\xc8\xb2\x8c\xf9\xd9\xde\xde\x4e\xa5\x06\x75\x5d\xe3\x69\xe2\x42\
\x1f\x88\x38\xc8\xda\xe9\x89\x23\xa1\xf9\xe2\x0d\xcd\x19\x46\x2e\
\x97\xab\xe0\x72\x70\x70\x60\xe4\x0e\xb8\x5b\x74\x1c\x5a\xa2\x8c\
\xbb\x54\x2c\xda\xcb\xd3\x40\x67\xe8\x79\x73\x45\x41\x1a\x1f\x1f\
\x47\xcd\x76\xb8\x80\xf6\x8f\x0f\x1e\x48\x92\x44\x55\x21\x4b\x1e\
\xaa\x68\xc1\xaf\x9d\x02\x51\xb4\x32\xdc\x12\x44\x29\x3d\x9e\x56\
\x14\x65\x6b\x6b\x6b\x70\xf0\x9b\x64\xf2\x2a\x46\xa2\xb3\xb3\xf3\
\xa7\x87\x0f\x5d\x92\x8b\x2c\xb8\x69\x99\x94\x9d\x93\x80\x50\xde\
\xa2\x20\xa6\xc7\xc6\x94\x68\x14\xc8\x9b\x37\xbf\xd5\x75\x55\xd3\
\xf5\xfe\xfe\xaf\x37\x36\x36\xba\xba\xba\x1e\xfd\xfc\xc8\xe5\x72\
\x21\x70\xa9\xa2\x74\x02\x26\x20\x77\x27\x0a\xc2\xbd\xb1\x7b\xd1\
\x68\x14\x15\x1a\x1a\x1a\xa2\x0a\xf1\x02\x68\xaa\x7e\xe5\xca\x57\
\x7f\xbd\x79\xd3\xdd\xdd\xfd\xcb\xe3\xc7\x95\x95\x95\x65\x24\x04\
\x39\x53\x64\x49\x10\xef\xde\x3d\x45\x7e\x57\x46\x52\xfe\xe4\xb9\
\xc8\xd0\xde\xcb\x7d\x97\xd7\xd7\xd7\x13\x89\xc4\xdc\xdc\x9c\xdb\
\xed\x3e\x41\xf7\xf6\xf6\x7e\x79\xe9\xd2\xca\xca\x0a\x5a\x0a\xb6\
\x3d\x3d\x3d\x21\x39\x14\xac\x0f\xfa\xfd\x7e\x8f\xc7\x5b\x53\x53\
\x53\x5d\x5d\x5d\x55\x55\x85\xaf\xc2\xeb\xf1\xae\xad\xad\xc1\x6c\
\x61\x61\xe1\x04\xdf\xd7\xd7\xf7\x1f\xf2\xe2\x45\x39\x2c\x37\x34\
\x34\xd4\xd6\xfa\xbd\x9f\x79\x3f\x3d\x57\x73\xe6\xec\x19\xd8\x49\
\x2e\xc9\x61\x77\xc0\x18\x6d\xff\x3f\xde\xee\xf3\xf9\x42\xa1\x10\
\xd8\x0e\x0f\x0f\xef\xed\xed\x51\xf6\x44\x16\xd9\x22\x21\x74\x85\
\xd2\xa6\xe6\xf0\xde\x68\x9a\x06\xa6\xe0\x8f\x04\xf1\xfd\xd9\x2e\
\x5c\xe8\x0a\x87\xe5\x77\x7f\xbf\xd3\x35\x1d\x83\xc3\xc7\xee\x18\
\x2f\x0c\x2b\xfd\x75\x4e\x7e\x43\x0c\xd1\x88\x27\x17\xc4\x0f\x04\
\x02\x4b\x4b\x4b\xff\x02\x87\x5b\x08\x31\xd5\xe7\xaf\xcd\x00\x00\
\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
"

qt_resource_name = b"\
\x00\x04\
\x00\x06\xfa\x5e\
\x00\x69\
\x00\x63\x00\x6f\x00\x6e\
\x00\x0f\
\x0c\x6d\x46\x87\
\x00\x43\
\x00\x6c\x00\x65\x00\x61\x00\x72\x00\x42\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
"

qt_resource_struct_v1 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
"

qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x01\x73\x2e\xd9\x74\x23\
"

qt_version = [int(v) for v in QtCore.qVersion().split('.')]
if qt_version < [5, 8, 0]:
    rcc_version = 1
    qt_resource_struct = qt_resource_struct_v1
else:
    rcc_version = 2
    qt_resource_struct = qt_resource_struct_v2

def qInitResources():
    QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)

def qCleanupResources():
    QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)

qInitResources()

根据您的代码,您创建了一个带有自定义图标的 QPushButton,而不是修改 QLineEdit 的清晰图标。

解决方案是访问 QToolButton 并设置图标:

self.lineEdit.findChild(QtWidgets.QToolButton).setIcon(
    QtGui.QIcon(":/icon/ClearButton.png")
)

或者到 QAction:

self.lineEdit.findChild(QtWidgets.QAction, "_q_qlineeditclearaction").setIcon(
    QtGui.QIcon(":/icon/ClearButton.png")
)

另一个解决方案是使用 QProxyStyle 更改清除按钮的默认图标:

class ProxyStyle(QtWidgets.QProxyStyle):
    def standardIcon(self, standardIcon, option=None, widget=None):
        if standardIcon == QtWidgets.QStyle.SP_LineEditClearButton:
            return QtGui.QIcon(":/icon/ClearButton.png")
        return super().standardIcon(standardIcon, option, widget)
app = QtWidgets.QApplication(sys.argv)
proxy_style = ProxyStyle(app.style())
app.setStyle(proxy_style)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改QLineEdit的ClearButton图标 的相关文章

随机推荐

  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • popupBackground 与 Material Design 相关的问题

    我一直致力于将我的应用程序更新为 Material Design 我有一个使用选项卡的应用程序 由于某种原因 每当我使用 android popupBackground 设置下拉菜单颜色时 它就会崩溃 我设置了一个带有选项卡的默认项目并使用
  • 转义 \u200b(零宽度空格)和其他非法 JavaScript 字符

    我有一组 JavaScript 对象 我引导到后端模板 以在页面加载时初始化我的 Backbone js 集合 它看起来像这样 作为 Twig 模板 我遇到的问题是某些文本字段包含 u200b 零宽度空格 这会破坏
  • 如何使用 C# 以编程方式编辑 Power BI Desktop 文档参数或数据源?

    我有一个在 Power BI Desktop 中内置的报告模板 并保存为 pbix 或 pbit 文件 该模板使用DirectQuery SQL数据库作为数据源 而服务器地址和数据库名称被提取到参数中 还有一个参数包含一个ReportId
  • libtool 在 Ubuntu 13.04 上构建 thrift 0.9.1 时出错

    在 Ubuntu 13 04 上构建 thrift 0 9 1 支持 C C java C perl python 时出现此错误 configure 不带任何选项运行 make 不带任何选项运行 Making all in test mak
  • 如何调试超时等待异步 Angular 任务?无法在角度页面上找到元素

    编辑 请注意 在 ernst zwingli 的帮助下 我找到了问题的根源 因此 如果您遇到相同的错误 他指出的修复之一可能会帮助您 我的问题是量角器本身的一个已知问题 如果您认为这可能是您 我已经扩展了我的步骤 以在我最初的问题之后查明问
  • Python MySQL 操作错误:1045,“用户 root@'localhost' 的访问被拒绝

    我试图通过以下方式从我的 python 程序访问数据库 db mysql connect host localhost user Max passwd maxkim db TESTDB cursor db cursor 但是 我在第一行代码
  • 在 Subversion 中,我可以是登录名以外的用户吗?

    我想知道如何获得Subversion更改我的更改显示的名称 我刚刚开始使用Subversion 我目前正在使用它来对 XP 笔记本电脑上的代码进行版本控制 我总是以我妻子的名字登录 我希望 subversion DB 显示我名下的更改 稍后
  • 在 WordPress 中获取作者角色

    我正在开发我的第一个 WP 网站 需要在其帖子旁边显示作者的角色 类似于 吉米 管理员 查看可用的作者元数据 http codex wordpress org Function Reference the author meta http
  • Maven 版本插件跳过更新检查

    当我尝试使用versions use releases我的发布存储库被标记为 已禁用 这意味着快照依赖项不会解析为发布 我不明白为什么存储库被认为是禁用的 以下是构建的简短调试输出 DEBUG f remoteArtifactReposit
  • 自调用函数未定义

    如果我声明一个函数文字 var x function alert hi console log x returns the function code However var x function alert hi console log
  • 在grails控制器中识别ajax请求或浏览器请求

    我正在开发一个使用大量ajax的grails应用程序 如果请求是ajax调用 那么它应该给出响应 这部分正在工作 但是如果我在浏览器中输入URL 它应该带我到主页 索引页面而不是请求的页面 下面是ajax调用的示例gsp代码
  • 为什么在 C++ 中声明枚举时使用 typedef?

    我已经很多年没有写过任何 C 了 现在我正试图重新开始 然后我遇到了这个并考虑放弃 typedef enum TokenType blah1 0x00000000 blah2 0X01000000 blah3 0X02000000 Toke
  • 在 Mac OSX 上从 Python 3.6 运行 wine 命令

    我正在尝试用 Python 编写一个打开的脚本wine然后发送代码到wine终端打开一个 exe程序 这 exe程序也是命令驱动的 我可以打开wine 但我无法进一步 import shlex subprocess line usr bin
  • 如何从webkit浏览器中检测Android版本和品牌?

    如何通过webkit浏览器检测Android版本和品牌 可靠吗 我相信你可以检查用户代理 但是 我认为它不安全 因为有很多方法可以用来欺骗用户代理 在谷歌上搜索这个问题给了我们很多答案 它甚至可以在默认浏览器上运行 您只需输入 about
  • 不要包裹 span 元素

    我有一份清单 span 可以在 a 内左右移动的元素 div 元素 如果某些跨度超出了 div 它们应该被隐藏 这可以很好地使用overflow hidden 但是 如果跨度超出了 div 的容纳范围 跨度就会换行 这对于我的用例来说是不期
  • 合并sql中的列

    我正在使用 SQL Server 2017 有一个存储过程 其中我有一个带有连接的简单选择 例如 SELECT p legacyKey AS JobNumber p Name AS JobName G Label AS DesignStat
  • 仅当某些值相等时,如何才能将一个文本文件中的值替换为另一个文本文件中的其他值?

    我有一个名为finalscores txt我想创建一个 python 脚本 它将打开它并从两个单独的列中读取值 这是我的finalscores txt file Atom nVa predppm avgppm stdev delta QPr
  • 如何使用 Rspec 测试具有嵌套路由的控制器?

    我有 2 个使用轨道脚手架生成器创建的控制器 我希望它们嵌套在一个名为 demo 的文件夹中 所以运行 rails g scaffold demo flows rails g scaffold demo nodes 然后我决定将节点嵌套在流
  • 更改QLineEdit的ClearButton图标

    我想在Windows 10 1909 64位 上的Python 3 8和PyQt5 5 15 0 上更改我的QLineEdit的ClearButton图标 稍后我想在Linux上运行代码 我尝试应用此处找到的代码 如何在 QLineEdit