我有一个带有“StyledPanel,凸起”框架的 QLabel。
它是可点击的,通过继承 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、plastique、motif、cde 之外)。
此图像以两种不同的样式显示了我想要的特定小部件(右下角)和 mouseHover 美学。
当鼠标悬停在“框”上时,我希望它像组合框在顶部、中间一样做出响应。
(“响应”在美学上是原生的,并且出现在所有 Qt 按钮上,除了“CDE”和“motif”样式。)。
有没有办法用 PyQt4 实现这个?
(我想非本地解决方案将涉及 QGradient 并检查本地样式,但这很糟糕。)
更新:
lol4t0 关于 QPushButton 上的 QLabel 的想法。
这是我的 pythonic 实现,信号正常工作,所有适当的按钮美学。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