【问题标题】:How to change icon while mouse is clicking in PyQt5如何在 PyQt5 中单击鼠标时更改图标
【发布时间】:2019-10-26 07:44:09
【问题描述】:

我在 PyQt5 上使用 python 3.6。 我希望按钮默认为 off.png,然后当我点击它时,图标变为 click.png,当我释放点击时,它变为 On.png 目前默认是off.png,但是点击它并不会将图标变为click.png,释放确实会成​​功将图标变为on.png

但奇怪的是,当我单击窗口(而不是实际按钮)时,图标会切换到 click.png 并在我释放它后又回到 off.png。 如何修复中间三行代码,以便在我按住按钮单击时图标变为 click.png,然后在释放后变为 on.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")

【问题讨论】:

  • 我有一个疑问,假设它可以按您的意愿工作,并且我已经按下并释放了一次,因此图标为 on.png。如果按回,是否应该改为“点击”?如果发布了,应该改成“on.png”还是“off.png”?
  • 一旦按下它应该切换到点击,然后当释放时,回到off.png

标签: python python-3.x pyqt pyqt5 qt-designer


【解决方案1】:

您将小部件的状态与按钮的单击状态混淆了。例如,在 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")
# ...

【讨论】:

    猜你喜欢
    • 2020-11-30
    • 2016-08-08
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    相关资源
    最近更新 更多