class Tooltip(PopupPanel): def __init__(self, sender, offsetX, offsetY, contents, show_delay, hide_delay, styleName, **kwargs): """ contents may be a text string or it may be a widget """ PopupPanel.__init__(self, True, **kwargs) self.show_delay = show_delay self.hide_delay = hide_delay if isinstance(contents, str): contents = HTML(contents) self.add(contents) left = sender.getAbsoluteLeft() + offsetX top = sender.getAbsoluteTop() + offsetY self.setPopupPosition(left, top) self.setStyleName(styleName) if tooltip_hide_timer: self.tooltip_show_timer = Timer(1, self) else: self.tooltip_show_timer = Timer(self.show_delay, self) def show(self): global tooltip_hide_timer # activate fast tooltips tooltip_hide_timer = Timer(self.hide_delay, self) PopupPanel.show(self) def hide(self, autoClosed=False): self.tooltip_show_timer.cancel() PopupPanel.hide(self, autoClosed) def onTimer(self, tooltip_id): global tooltip_hide_timer # deactivate fast tooltips on last timer if tooltip_hide_timer and tooltip_id == tooltip_hide_timer.getID(): tooltip_hide_timer = None if tooltip_id == self.tooltip_show_timer.getID(): self.show() else: self.hide()