import ttkbootstrap as ttk
from ttkbootstrap.tableview import Tableview
import tkinter as tk
[docs]
class CopyableTableview(Tableview):
def __init__(self, master=None, **kwargs):
super().__init__(master, **kwargs)
self.clicked_cell = None
self.clicked_row = None
self.clicked_column_index = None
self.copied_label = None
# Tag for highlighting
self.view.tag_configure("copied", background="#d4edda")
# Create context menu
self.menu = tk.Menu(self.view, tearoff=0)
self.menu.add_command(label="Copy Cell", command=self.copy_cell)
# Bind right-click
self.view.bind("<Button-3>", self.show_context_menu)
[docs]
def copy_cell(self):
if self.clicked_cell:
self.clipboard_clear()
self.clipboard_append(self.clicked_cell)
# Highlight the row briefly
self.view.item(self.clicked_row, tags=("copied",))
self.after(500, lambda: self.view.item(self.clicked_row, tags=()))
# Show 'Copied!' label
if self.copied_label:
self.copied_label.destroy()
self.copied_label = tk.Label(self.view, text="Copied!", bg="lightyellow", fg="green")
self.copied_label.place(x=5, y=5)
self.view.after(1000, self.copied_label.destroy)
[docs]
def clear_selection(self):
self.clicked_cell = None
self.clicked_row = None
self.clicked_column_index = None