如何在PyQt5中单击鼠标时更改图标

2024-04-26 06:37:15 发布

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

我在PyQt5上使用python3.6。 我想把扣子扣上关闭.png默认情况下,当我点击它时,图标变成单击.png,当我释放单击按钮时,它将变为打开.png 目前,它是关闭.png默认情况下,但单击它不会将图标更改为单击.png,并且释放会成功地将图标更改为打开.png你知道吗

奇怪的是,当我点击窗口(而不是实际的按钮)时,图标切换到单击.png然后回到关闭.png一旦我释放它。 如何修复中间的三行代码,使图标变成单击.png当我按住按钮,然后变成打开.png一旦我释放它?谢谢

注意:如果您的计算机上没有保存任何图像,我认为代码不会按原样运行。你知道吗

我试过在不同的模式/状态下乱搞,但还是没能让它工作

self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(160, 180, 271, 121))
self.pushButton.setStyleSheet("")
self.pushButton.setText("")
icon = QtGui.QIcon()

icon.addPixmap(QtGui.QPixmap("images/Clicking.png"))
icon.addPixmap(QtGui.QPixmap("images/Off.png"), QtGui.QIcon.Active)
icon.addPixmap(QtGui.QPixmap("images/On.png"), QtGui.QIcon.Normal, QtGui.QIcon.On)


self.pushButton.setIcon(icon)
self.pushButton.setIconSize(QtCore.QSize(300, 300))
self.pushButton.setCheckable(True)
self.pushButton.setAutoRepeatDelay(400)
self.pushButton.setDefault(False)
self.pushButton.setObjectName("pushButton")

Tags: 代码selfpngon情况按钮图标icon
1条回答
网友
1楼 · 发布于 2024-04-26 06:37:15

你混淆了小部件的状态和按钮的状态。在QIcon使用小部件状态的情况下,例如,正常状态是当用户不与小部件交互时,选择状态是当用户选择小部件时,禁用状态是当小部件被禁用时,并且活动状态是当用户与小部件交互时。另一方面,根据您的逻辑,不可能知道按下前和释放后的状态。你知道吗

解决方案是实现一个自定义按钮:

# ...

class PushButton(QtWidgets.QPushButton):
    def __init__(self, parent=None):
        super(PushButton, self).__init__(parent)
        self.setIcon(QtGui.QIcon("images/Off.png"))

    def mousePressEvent(self, event):
        super(PushButton, self).mousePressEvent(event)
        self.setIcon(QtGui.QIcon("images/Clicking.png"))

    def mouseReleaseEvent(self, event):
        super(PushButton, self).mouseReleaseEvent(event)
        self.setIcon(
            QtGui.QIcon("images/On.png" if self.isChecked() else "images/Off.png")
        )

# ...
self.pushButton = PushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(160, 180, 271, 121))
self.pushButton.setStyleSheet("")
self.pushButton.setText("")
self.pushButton.setIconSize(QtCore.QSize(300, 300))
self.pushButton.setCheckable(True)
self.pushButton.setAutoRepeatDelay(400)
self.pushButton.setDefault(False)
self.pushButton.setObjectName("pushButton")
# ...

相关问题 更多 >