У меня есть инструмент Python с виджетом CheckboxTreeview. Некоторое содержимое древовидного представления слишком длинное для отображения. Я хотел бы предложить пользователю всплывающую подсказку, если это так. У меня уже есть всплывающие подсказки в моем инструменте в других местах, но я не могу установить всплывающую подсказку для отдельного содержимого в CheckboxTreeview. Знаете ли вы, как это возможно?
Ниже приведен минимальный пример, в котором я хотел бы иметь всплывающую подсказку для ссылки ref2. Как это возможно?
import tkinter as tk
from tkinter import ttk
from ttkwidgets import CheckboxTreeview
class CreateToolTip(object):
def __init__(self, widget, text='tooltip text', wraplength=180):
self.waittime = 400 #miliseconds
self.bg = '#fdfde3'
self.wraplength = wraplength #pixels
self.widget = widget
self.text = text
self.widget.bind("", self.enter)
self.widget.bind("", self.leave)
self.widget.bind("", self.leave)
self.id = None
self.tw = None
def enter(self, event=None):
self.schedule()
def leave(self, event=None):
self.unschedule()
self.hidetip()
def schedule(self):
self.unschedule()
self.id = self.widget.after(self.waittime, self.showtip)
def unschedule(self):
id = self.id
self.id = None
if id:
self.widget.after_cancel(id)
def showtip(self, event=None):
x, y, cx, cy = self.widget.bbox("insert")
self.tw = tk.Toplevel(self.widget)
self.tw.wm_overrideredirect(True)
tk.Label(self.tw, text=self.text, justify='left',background=self.bg,
relief='solid', borderwidth=1,wraplength = self.wraplength
).pack(ipadx=10)
x += self.widget.winfo_rootx()
y += self.widget.winfo_rooty()
self.tw.wm_geometry("+%d+%d" % (x, y))
def hidetip(self):
tw = self.tw
self.tw= None
if tw:
tw.destroy()
class App():
def __init__(self, master):
self.master = master
self.master.geometry('300x400')
self.master.columnconfigure(0, weight=1)
self.tree = CheckboxTreeview(self.master)
xsb = ttk.Scrollbar(self.master, orient='horizontal', command=self.tree.xview)
ysb = ttk.Scrollbar(self.master, orient='vertical', command=self.tree.yview)
self.tree.configure(yscroll=ysb.set)
self.tree['columns']=('x', 'y')
self.tree.column('x', anchor='e', width=40)
self.tree.column('y', width=40)
self.tree.heading('#0', text='abc', anchor='w')
self.tree.heading('x', text='x', anchor='w')
self.tree.heading('y', text='y', anchor='w')
self.tree.grid(row=0, column=0)
ysb.grid(row=0, column=1, sticky='ns')
xsb.grid(row=1, column=0, sticky='ew')
self.master.frame = tk.Frame(self.master, highlightbackground="black", highlightthickness=2)
self.master.frame.grid(row=4, column=0, columnspan=2, sticky='w')
ref = tk.Label(self.master.frame, text='TEXT', font=tk.font.Font(size=16, weight='bold'))
ref.grid(row=0, column=0)
CreateToolTip(ref, text='tooltip')
ref1 = self.tree.insert('', 'end', text='node 1', values=('x1', 'y1'), open=True)
ref2 = self.tree.insert('', 'end', text='node 2 - this is a very long text where a tooltip should be displayed', values=('x2', 'y2'), open=True)
root = tk.Tk()
app = App(root)
app.master.mainloop()
Подробнее здесь: https://stackoverflow.com/questions/792 ... ch-element
Tkinter — CheckboxTreeview с подсказкой для каждого элемента ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение