「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 の美学を 2 つの異なるスタイルで示しています。
マウスが「ボックス」の上に置かれたとき、コンボボックスが上部、中央にあるように応答したいと思います。
(「応答」は美的にネイティブであり、「CDE」および「モチーフ」スタイルを除くすべての Qt ボタンで発生します。)
これを PyQt4 で実装する方法はありますか?
(非ネイティブ ソリューションには、QGradient とネイティブ スタイルのチェックが含まれると思いますが、それは厄介です。)
更新:
QPushButton 上の QLabel の lol4t0 のアイデア。
これは、シグナルが適切に機能し、適切なボタンの美学をすべて備えた私の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