У меня есть 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()'))
Однако, общее мнение состоит в том, что этот "ящик" не так простопризнан интерактивным.
В целях удобства использования я хотел бы, чтобы в поле "Box" было показано, что на него можно нажимать, когда над ним наведена мышь.
Очевидно, что реакция на зависание мыши легко достигается путем подключенияmouseHoverEvent.
Однако «индикатор кнопки» должен быть унаследован, поскольку мое приложение Qt позволяет пользователю изменять стиль (из Windows XP, Windows 7, plastique, motif, cde).
Это изображение показывает конкретный виджет (нижний правый угол) и желаемую эстетику mouseHover, которую я желаю, в двух разных стилях.
Когда мышь наведена на «Box»,Я бы хотел, чтобы он отвечал так, как у выпадающего списка вверху, по центру.
(«Отклик» эстетичен и встречается со всеми кнопками Qt, кроме стилей «CDE» и «motif».).
Есть ли способ реализовать это с помощью 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