From b96f8ff999f0fc9194d5cd7e78b010e30d722652 Mon Sep 17 00:00:00 2001 From: Blake Harnden <32446120+bharnden@users.noreply.github.com> Date: Tue, 12 Nov 2019 13:01:58 -0800 Subject: [PATCH] updated standard tooltip to use delays and have the same style of the canvas tooltip --- coretk/coretk/toolbar.py | 14 +++++++------- coretk/coretk/tooltip.py | 34 +++++++++++++++++++++++++++------- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/coretk/coretk/toolbar.py b/coretk/coretk/toolbar.py index 5b2c83bd..752b1000 100644 --- a/coretk/coretk/toolbar.py +++ b/coretk/coretk/toolbar.py @@ -5,7 +5,7 @@ from functools import partial from coretk.dialogs.customnodes import CustomNodesDialog from coretk.graph import GraphMode from coretk.images import ImageEnum, Images -from coretk.tooltip import CreateToolTip +from coretk.tooltip import Tooltip class Toolbar(tk.Frame): @@ -188,7 +188,7 @@ class Toolbar(tk.Frame): button = tk.Button(frame, width=self.width, height=self.height, image=image) button.bind("", lambda e: func()) button.grid(pady=1) - CreateToolTip(button, tooltip) + Tooltip(button, tooltip) def create_radio_button(self, frame, image, func, variable, value, tooltip_msg): button = tk.Radiobutton( @@ -202,14 +202,14 @@ class Toolbar(tk.Frame): command=func, ) button.grid() - CreateToolTip(button, tooltip_msg) + Tooltip(button, tooltip_msg) def create_regular_button(self, frame, image, func, tooltip): button = tk.Button( frame, width=self.width, height=self.height, image=image, command=func ) button.grid() - CreateToolTip(button, tooltip) + Tooltip(button, tooltip) def click_selection_tool(self): logging.debug("clicked selection tool") @@ -274,7 +274,7 @@ class Toolbar(tk.Frame): ) self.node_button.bind("", lambda e: self.draw_node_picker()) self.node_button.grid() - CreateToolTip(self.node_button, "Network-layer virtual nodes") + Tooltip(self.node_button, "Network-layer virtual nodes") def draw_network_picker(self): """ @@ -323,7 +323,7 @@ class Toolbar(tk.Frame): "", lambda e: self.draw_network_picker() ) self.network_button.grid() - CreateToolTip(self.network_button, "link-layer nodes") + Tooltip(self.network_button, "link-layer nodes") def draw_annotation_picker(self): """ @@ -369,7 +369,7 @@ class Toolbar(tk.Frame): "", lambda e: self.draw_annotation_picker() ) self.annotation_button.grid() - CreateToolTip(self.annotation_button, "background annotation tools") + Tooltip(self.annotation_button, "background annotation tools") def create_observe_button(self): menu_button = tk.Menubutton( diff --git a/coretk/coretk/tooltip.py b/coretk/coretk/tooltip.py index 6fbbc3c9..1877fd24 100644 --- a/coretk/coretk/tooltip.py +++ b/coretk/coretk/tooltip.py @@ -1,7 +1,8 @@ import tkinter as tk +from tkinter import ttk -class CreateToolTip(object): +class Tooltip(object): """ Create tool tip for a given widget """ @@ -9,10 +10,29 @@ class CreateToolTip(object): def __init__(self, widget, text="widget info"): self.widget = widget self.text = text - self.widget.bind("", self.enter) - self.widget.bind("", self.close) + self.widget.bind("", self.on_enter) + self.widget.bind("", self.on_leave) + self.waittime = 400 + self.id = None self.tw = None + def on_enter(self, event=None): + self.schedule() + + def on_leave(self, event=None): + self.unschedule() + self.close(event) + + def schedule(self): + self.unschedule() + self.id = self.widget.after(self.waittime, self.enter) + + def unschedule(self): + id_ = self.id + self.id = None + if id_: + self.widget.after_cancel(id_) + def enter(self, event=None): x, y, cx, cy = self.widget.bbox("insert") x += self.widget.winfo_rootx() @@ -21,13 +41,13 @@ class CreateToolTip(object): self.tw = tk.Toplevel(self.widget) self.tw.wm_overrideredirect(True) self.tw.wm_geometry("+%d+%d" % (x, y)) - label = tk.Label( + label = ttk.Label( self.tw, text=self.text, justify=tk.LEFT, - background="#ffffe6", - relief="solid", - borderwidth=1, + background="#FFFFEA", + relief=tk.SOLID, + borderwidth=0, ) label.grid(padx=1)