更改QLineEdit的ClearButton图标

2024-09-28 23:22:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Windows10(1909,64位)上的Python3.8和PyQt5(5.15.0)上更改QLineEdit的ClearButton图标,稍后我想在Linux上运行代码

我已尝试应用此处找到的代码:How to make an extra icon in QLineEdit like this?

然而,我无法用它生成一些运行Python 3的代码,希望有人能帮助我解决这个问题

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

ClearButtonExampleMainWindow

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

ClearButtonTest.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_())

资源\u 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()

Tags: selfqtresourcex00x04x01x02qtcore
1条回答
网友
1楼 · 发布于 2024-09-28 23:22:26

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

解决方案是访问QTool按钮并设置图标:

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

或采取行动:

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)

相关问题 更多 >