updated standard tooltip to use delays and have the same style of the canvas tooltip

This commit is contained in:
Blake Harnden 2019-11-12 13:01:58 -08:00
parent 96abea311f
commit b96f8ff999
2 changed files with 34 additions and 14 deletions

View file

@ -5,7 +5,7 @@ from functools import partial
from coretk.dialogs.customnodes import CustomNodesDialog from coretk.dialogs.customnodes import CustomNodesDialog
from coretk.graph import GraphMode from coretk.graph import GraphMode
from coretk.images import ImageEnum, Images from coretk.images import ImageEnum, Images
from coretk.tooltip import CreateToolTip from coretk.tooltip import Tooltip
class Toolbar(tk.Frame): 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 = tk.Button(frame, width=self.width, height=self.height, image=image)
button.bind("<ButtonRelease-1>", lambda e: func()) button.bind("<ButtonRelease-1>", lambda e: func())
button.grid(pady=1) button.grid(pady=1)
CreateToolTip(button, tooltip) Tooltip(button, tooltip)
def create_radio_button(self, frame, image, func, variable, value, tooltip_msg): def create_radio_button(self, frame, image, func, variable, value, tooltip_msg):
button = tk.Radiobutton( button = tk.Radiobutton(
@ -202,14 +202,14 @@ class Toolbar(tk.Frame):
command=func, command=func,
) )
button.grid() button.grid()
CreateToolTip(button, tooltip_msg) Tooltip(button, tooltip_msg)
def create_regular_button(self, frame, image, func, tooltip): def create_regular_button(self, frame, image, func, tooltip):
button = tk.Button( button = tk.Button(
frame, width=self.width, height=self.height, image=image, command=func frame, width=self.width, height=self.height, image=image, command=func
) )
button.grid() button.grid()
CreateToolTip(button, tooltip) Tooltip(button, tooltip)
def click_selection_tool(self): def click_selection_tool(self):
logging.debug("clicked selection tool") logging.debug("clicked selection tool")
@ -274,7 +274,7 @@ class Toolbar(tk.Frame):
) )
self.node_button.bind("<ButtonRelease-1>", lambda e: self.draw_node_picker()) self.node_button.bind("<ButtonRelease-1>", lambda e: self.draw_node_picker())
self.node_button.grid() 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): def draw_network_picker(self):
""" """
@ -323,7 +323,7 @@ class Toolbar(tk.Frame):
"<ButtonRelease-1>", lambda e: self.draw_network_picker() "<ButtonRelease-1>", lambda e: self.draw_network_picker()
) )
self.network_button.grid() self.network_button.grid()
CreateToolTip(self.network_button, "link-layer nodes") Tooltip(self.network_button, "link-layer nodes")
def draw_annotation_picker(self): def draw_annotation_picker(self):
""" """
@ -369,7 +369,7 @@ class Toolbar(tk.Frame):
"<ButtonRelease-1>", lambda e: self.draw_annotation_picker() "<ButtonRelease-1>", lambda e: self.draw_annotation_picker()
) )
self.annotation_button.grid() self.annotation_button.grid()
CreateToolTip(self.annotation_button, "background annotation tools") Tooltip(self.annotation_button, "background annotation tools")
def create_observe_button(self): def create_observe_button(self):
menu_button = tk.Menubutton( menu_button = tk.Menubutton(

View file

@ -1,7 +1,8 @@
import tkinter as tk import tkinter as tk
from tkinter import ttk
class CreateToolTip(object): class Tooltip(object):
""" """
Create tool tip for a given widget Create tool tip for a given widget
""" """
@ -9,10 +10,29 @@ class CreateToolTip(object):
def __init__(self, widget, text="widget info"): def __init__(self, widget, text="widget info"):
self.widget = widget self.widget = widget
self.text = text self.text = text
self.widget.bind("<Enter>", self.enter) self.widget.bind("<Enter>", self.on_enter)
self.widget.bind("<Leave>", self.close) self.widget.bind("<Leave>", self.on_leave)
self.waittime = 400
self.id = None
self.tw = 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): def enter(self, event=None):
x, y, cx, cy = self.widget.bbox("insert") x, y, cx, cy = self.widget.bbox("insert")
x += self.widget.winfo_rootx() x += self.widget.winfo_rootx()
@ -21,13 +41,13 @@ class CreateToolTip(object):
self.tw = tk.Toplevel(self.widget) self.tw = tk.Toplevel(self.widget)
self.tw.wm_overrideredirect(True) self.tw.wm_overrideredirect(True)
self.tw.wm_geometry("+%d+%d" % (x, y)) self.tw.wm_geometry("+%d+%d" % (x, y))
label = tk.Label( label = ttk.Label(
self.tw, self.tw,
text=self.text, text=self.text,
justify=tk.LEFT, justify=tk.LEFT,
background="#ffffe6", background="#FFFFEA",
relief="solid", relief=tk.SOLID,
borderwidth=1, borderwidth=0,
) )
label.grid(padx=1) label.grid(padx=1)