У меня есть QLabel с рамкой "StyledPanel, поднятая".
На нее можно щелкнуть, создав подкласс QLabel;
class InteractiveLabel(QtGui.QLabel):
def __init__(self, parent):
QtGui.QLabel.__init__(self, parent)
def mouseReleaseEvent(self, event):
self.emit(QtCore.SIGNAL('clicked()'))
Однако общее мнение состоит в том, что это "ящик" не так легко распознать как интерактивный.
В целях повышения удобства использования я хотел бы, чтобы "коробка" показывала, что на нее можно нажимать при наведении на нее указателя мыши.
> Очевидно, что реакцию на наведение мыши легко получить, подключив событие mouseHoverEvent.
Однако «индикатор кнопки» должен быть изначально унаследован, поскольку мое приложение Qt позволяет пользователю изменять стиль (из Windows XP, Windows 7, пластика, мотива, cde).
На этом изображении показан конкретный виджет (нижний правый угол) и желаемая эстетика mouseHover в двух разных стилях.
Когда указатель мыши наводится на "Box", я хотел бы, чтобы он реагировал так же, как поле со списком вверху, посередине.
("Ответ" эстетически нативен и происходит со всеми кнопками Qt, кроме "CDE" и «стили мотивов».).
Есть ли способ реализовать это с помощью PyQt4?
(Я полагаю, что ненативные решения будут включать QGradient и проверку нативного стиля, но это противно.)
ОБНОВЛЕНИЕ:
идея lol4t0 о QLabel над QPushButton.
Вот моя питоническая реализация с правильно работающими сигналами и соответствующей эстетикой кнопок. RichTextBox — это виджет, который вы встраиваете в программу.
from PyQt4 import QtCore, QtGui
class RichTextButton(QtGui.QPushButton):
def __init__(self, parent=None):
QtGui.QPushButton.__init__(self, parent)
self.UnitText = QtGui.QLabel(self)
self.UnitText.setTextInteractionFlags(QtCore.Qt.NoTextInteraction)
self.UnitText.setAlignment(QtCore.Qt.AlignCenter)
self.UnitText.setMouseTracking(False)
self.setLayout(QtGui.QVBoxLayout())
self.layout().setMargin(0)
self.layout().addWidget(self.UnitText)
Спасибо!
Спецификации:
— Python 2.7.2
— Windows 7
— PyQt4