Fix tooltips not being displayed for layout buttons in layout menu

This commit is contained in:
Kovid Goyal 2024-01-29 08:21:14 +05:30
parent a8dfb5885f
commit f01474325e
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -4,7 +4,7 @@
from qt.core import ( from qt.core import (
QFontMetrics, QHBoxLayout, QIcon, QMenu, QStylePainter, QPushButton, QSize, QFontMetrics, QHBoxLayout, QIcon, QMenu, QStylePainter, QPushButton, QSize,
QSizePolicy, Qt, QWidget, QStyleOption, QStyle, QEvent) QSizePolicy, Qt, QWidget, QStyleOption, QStyle)
ICON_SZ = 64 ICON_SZ = 64
@ -12,9 +12,10 @@ ICON_SZ = 64
class LayoutItem(QWidget): class LayoutItem(QWidget):
mouse_over = False
def __init__(self, button, parent=None): def __init__(self, button, parent=None):
QWidget.__init__(self, parent) QWidget.__init__(self, parent)
self.mouse_over = False
self.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) self.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
self.button = button self.button = button
self.text = button.label self.text = button.label
@ -22,6 +23,10 @@ class LayoutItem(QWidget):
self.fm = QFontMetrics(self.font()) self.fm = QFontMetrics(self.font())
self._bi = self._di = None self._bi = self._di = None
def update_tips(self):
self.setToolTip(self.button.toolTip())
self.setStatusTip(self.button.statusTip())
@property @property
def bright_icon(self): def bright_icon(self):
if self._bi is None: if self._bi is None:
@ -34,17 +39,17 @@ class LayoutItem(QWidget):
self._di = self.button.icon().pixmap(ICON_SZ, ICON_SZ, mode=QIcon.Mode.Disabled) self._di = self.button.icon().pixmap(ICON_SZ, ICON_SZ, mode=QIcon.Mode.Disabled)
return self._di return self._di
def event(self, ev): def enterEvent(self, ev):
m = None super().enterEvent(ev)
et = ev.type() if not self.mouse_over:
if et == QEvent.Type.Enter: self.mouse_over = True
m = True self.update()
elif et == QEvent.Type.Leave:
m = False def leaveEvent(self, ev):
if m is not None and m != self.mouse_over: super().leaveEvent(ev)
self.mouse_over = m if self.mouse_over:
self.mouse_over = False
self.update() self.update()
return QWidget.event(self, ev)
def sizeHint(self): def sizeHint(self):
br = self.fm.boundingRect(self.text) br = self.fm.boundingRect(self.text)
@ -100,8 +105,13 @@ class LayoutMenu(QMenu):
for b in buttons: for b in buttons:
self.items.append(LayoutItem(b, self)) self.items.append(LayoutItem(b, self))
l.addWidget(self.items[-1]) l.addWidget(self.items[-1])
self.aboutToShow.connect(self.about_to_show)
self.current_item = None self.current_item = None
def about_to_show(self):
for x in self.items:
x.update_tips()
def sizeHint(self): def sizeHint(self):
return QWidget.sizeHint(self) return QWidget.sizeHint(self)