带有 QIcon 的灰度 QPushButton 直到悬停
Grayscale QPushButton with QIcon until hovered over
我有一个 QPushButton
有一个 QIcon
集合。我想对图标的颜色进行灰度化,直到它悬停或被选中,而不是为每个图标编写 2 个单独的图像文件。如果使用 QPushButton.setDisabled(True)
,图标的颜色实际上会变成灰度,所以我希望通过 enterEvent
控制同样的行为。这完全可能吗?
是的,您完全可以按照您的描述进行操作。如果未选中,请启用 enterEvent
中的按钮并在 leaveEvent
中禁用它。
import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from PySide2.QtGui import *
class Button(QPushButton):
def __init__(self):
super().__init__()
self.setCheckable(True)
self.setDisabled(True)
self.setIcon(QIcon('icon.png'))
self.setIconSize(QSize(100, 100))
def enterEvent(self, event):
self.setEnabled(True)
def leaveEvent(self, event):
if not self.isChecked():
self.setDisabled(True)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
grid = QGridLayout(w)
grid.addWidget(Button(), 0, 0, Qt.AlignCenter)
w.show()
sys.exit(app.exec_())
我为图标图像使用了绿色复选标记。结果:
您也不需要子类化 QPushButton,这也可以。
btn = QPushButton()
btn.setCheckable(True)
btn.setIcon(QIcon('icon.png'))
btn.setIconSize(QSize(100, 100))
btn.setDisabled(True)
btn.enterEvent = lambda _: btn.setEnabled(True)
btn.leaveEvent = lambda _: btn.setEnabled(btn.isChecked())
我有一个 QPushButton
有一个 QIcon
集合。我想对图标的颜色进行灰度化,直到它悬停或被选中,而不是为每个图标编写 2 个单独的图像文件。如果使用 QPushButton.setDisabled(True)
,图标的颜色实际上会变成灰度,所以我希望通过 enterEvent
控制同样的行为。这完全可能吗?
是的,您完全可以按照您的描述进行操作。如果未选中,请启用 enterEvent
中的按钮并在 leaveEvent
中禁用它。
import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from PySide2.QtGui import *
class Button(QPushButton):
def __init__(self):
super().__init__()
self.setCheckable(True)
self.setDisabled(True)
self.setIcon(QIcon('icon.png'))
self.setIconSize(QSize(100, 100))
def enterEvent(self, event):
self.setEnabled(True)
def leaveEvent(self, event):
if not self.isChecked():
self.setDisabled(True)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
grid = QGridLayout(w)
grid.addWidget(Button(), 0, 0, Qt.AlignCenter)
w.show()
sys.exit(app.exec_())
我为图标图像使用了绿色复选标记。结果:
您也不需要子类化 QPushButton,这也可以。
btn = QPushButton()
btn.setCheckable(True)
btn.setIcon(QIcon('icon.png'))
btn.setIconSize(QSize(100, 100))
btn.setDisabled(True)
btn.enterEvent = lambda _: btn.setEnabled(True)
btn.leaveEvent = lambda _: btn.setEnabled(btn.isChecked())