[PyQt] Show tooltip onto QLabel

Tong Zhang warriorlance at gmail.com
Tue Jan 22 15:21:04 GMT 2019


Thanks, Maurizio! I've got what I want from your message, BTW, I used 
hover event to trig the help message to show on a textedit, since I 
found tooltip event responses a little bit slower than I want, maybe 
there is someway to speed up.

Tong

On 1/21/19 6:40 PM, Maurizio Berti wrote:
> Using standard tooltips might be an issue in some (not so special) 
> cases, as QToolTip events are strictly related to the widget events, so 
> you'll need to install an eventFilter on every single widget you'll want 
> the behavior you ask about.
> A simple implementation would be something like this:
> 
>      def __init__(self, *args, **kwargs):
>          [...]
>          self.toolTipWidget = QtWidgets.QLabel()
>          [...]
>          self.someWidget = SomeWidget()
>          self.someWidget.setToolTip('I am a tooltip!')
>          self.someWidget.installEventFilter(self)
>          [...]
> 
>      def eventFilter(self, source, event):
>          if event.type() == QtCore.QEvent.ToolTip:
>              self.toolTipWidget.setText(source.toolTip())
>          return QtWidgets.QWidget.eventFilter(self, source, event)
> 
> On the other hand, I'd suggest to use the StatusTip instead of the 
> ToolTip: it's something I've successfully used for something similar to 
> your needs: in this way you can keep the StatusTip for "simple" tooltip 
> text and the ToolTips for further customized messages, as they also 
> allow rich text content.
> Here's a small example:
> 
>      def __init__(self, *args, **kwargs):
>          [...]
>          self.toolTipWidget = QtWidgets.QLabel()
>          [...]
>          self.someWidget = SomeWidget()
>          self.someWidget.setStatusTip('I am a statustip!')
>          [...]
> 
>      def event(self, event):
>          if event.type() == QtCore.QEvent.StatusTip and event.tip():
>              self.toolTipWidget.setText(event.tip())
>          return QtWidgets.QWidget.event(self, event)
> 
> Note that here I used the setStatusTip() method instead of the 
> setToolTip() one.
> Obviously, if you're using Designer you'll set the StatusTip property 
> from there, instead of the ToolTip property.
> 
> How does it work?
> Usually the StatusTip is only used on a QMainWindow with a QStatusBar 
> installed, but, interestingly enough, the event() method of *any* widget 
> can be used to catch /any/ StatusTip event called from both that widget 
> /and/ its children.
> 
> In both cases you'd better think about a way to "clear" the tool/status 
> tip, as leaving it there might be confusing.
> If you don't have too many widgets, the eventFilter way might be a good 
> solution, as you can also catch the QEvent.Leave event type to hide the 
> "tooltip" by clearing the label text, otherwise it's probably 
> better using a QTimer on the parent widget or the label, and set it as 
> singleShot (don't use the static method, as it could hide a new 
> statustip activated in the meantime), then connect it to something like 
> lambda: self.toolTipWidget.setText('')whenever you catch the StatusTip 
> event.
> 
> If for some reason you'll need to stick with ToolTips, there's a 
> solution anyway.
> If all widgets already have their tooltips, and the layout is static and 
> permanent once the main parent widget is being instantiated, just use 
> the children() iterator and check for both isWidgetType() and toolTip() 
> contents: if those condition match, install the eventFilter; if the 
> layout is dynamic instead, use the childEvent method on the parent and 
> check for QEvent.childAdded and QEvent.childRemoved events, then use 
> installEventFilter or removeEventFilter respectively.
> 
> Regards,
> Maurizio
> 
> 
> Il giorno lun 21 gen 2019 alle ore 23:22 Tong Zhang 
> <warriorlance at gmail.com <mailto:warriorlance at gmail.com>> ha scritto:
> 
>     Hello,
> 
>     Can I show the tooltip of some widget onto a QLabel? e.g. Tooltip
>     will show when I move the mouse onto the pushbutton, how about show
>     the tooltip on another widget, say label?
> 
>     Thanks,
>     Tong
>     _______________________________________________
>     PyQt mailing list PyQt at riverbankcomputing.com
>     <mailto:PyQt at riverbankcomputing.com>
>     https://www.riverbankcomputing.com/mailman/listinfo/pyqt
> 
> 
> 
> -- 
> È difficile avere una convinzione precisa quando si parla delle ragioni 
> del cuore. - "Sostiene Pereira", Antonio Tabucchi
> http://www.jidesk.net


More information about the PyQt mailing list