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