Как изменить изображение на кнопке QPushButton при на наведении на нее курсора мыши?
Главный и единственный корнтейнер окна box содержит в себе всего лишь один виджет - кнопку button.
button представляет из себя кнопку с изображением. Это изображение мне необходимо изменять на другое, когда на кнопку будет наведен курсор мыши, и возвращать предыдущее изображение, если курсор мыши будет убран с кнопки.
Идеальным вариантом было бы изменение таблицы стиля кнопки текст курсивом. Насколько я знаю, в таблице стиля можно указать пункт QPushButton:hover, который как раз позволяет контролировать нахождение курсора на кнопке. Но с помощью него я умею только изменять цвет.
Пожалуйста, скажите, как можно решить мою проблему?
from PyQt5 import QtCore, QtWidgets, QtGui
class MyWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
box = QtWidgets.QHBoxLayout(self)
button = QtWidgets.QPushButton()
button.setStyleSheet(qss)
button.setIcon(QtGui.QIcon('-_1.png'))
button.setIconSize(QtCore.QSize(30, 20))
box.addWidget(button)
qss = '''QPushButton {
border: none;
margin: 0px;
padding: 0px;
}'''
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.setWindowTitle(' ')
window.show()
sys.exit(app.exec_())
Ответы (2 шт):
Как вариант, используйте фильтр событий над кнопкой. Установка фильтра выполняется через метод installEventFilter, а обработка в переопределенном методе eventFilter.
В нем для конкретных событий меняйте иконку кнопки.
Пример:
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtCore import QEvent
class MyWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
box = QtWidgets.QHBoxLayout(self)
self.button = QtWidgets.QPushButton()
self.button.setStyleSheet(qss)
self.button.setIcon(QtGui.QIcon('-_1.png'))
self.button.setIconSize(QtCore.QSize(30, 20))
self.button.installEventFilter(self)
box.addWidget(self.button)
def eventFilter(self, object, event):
# Если событие от кнопки
if object == self.button:
if event.type() == QEvent.Enter:
self.button.setText('Курсор тут')
return False
elif event.type() == QEvent.Leave:
self.button.setText('Курсор покинул кнопку')
return False
return super().eventFilter(object, event)
qss = '''QPushButton {
border: none;
margin: 0px;
padding: 0px;
}'''
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.setWindowTitle(' ')
window.show()
sys.exit(app.exec_())
border-image: вам в помощь
from PyQt5 import QtCore, QtWidgets, QtGui
class MyWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
box = QtWidgets.QHBoxLayout(self)
button = QtWidgets.QPushButton()
button.setFixedSize(30, 20) # +
button.setStyleSheet(qss)
# button.setIcon(QtGui.QIcon('im.png'))
# button.setIconSize(QtCore.QSize(30, 20))
box.addWidget(button)
qss = '''
QPushButton {
border: none;
margin: 0px;
padding: 0px;
border-image: url(Ok.png);
}
QPushButton:hover {
border-image: url(im.png);
}
'''
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.setWindowTitle(' ')
window.show()
sys.exit(app.exec_())
