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.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("<ButtonRelease-1>", 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("<ButtonRelease-1>", 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):
"<ButtonRelease-1>", 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):
"<ButtonRelease-1>", 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(

View file

@ -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("<Enter>", self.enter)
self.widget.bind("<Leave>", self.close)
self.widget.bind("<Enter>", self.on_enter)
self.widget.bind("<Leave>", 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)