i not used anymore
This commit is contained in:
@@ -1,151 +0,0 @@
|
|||||||
from tksheet import Sheet, num2alpha
|
|
||||||
import tkinter as tk
|
|
||||||
|
|
||||||
|
|
||||||
class demo(tk.Tk):
|
|
||||||
def __init__(self):
|
|
||||||
tk.Tk.__init__(self)
|
|
||||||
self.grid_columnconfigure(0, weight=1)
|
|
||||||
self.grid_rowconfigure(0, weight=1)
|
|
||||||
self.frame = tk.Frame(self)
|
|
||||||
self.frame.grid_columnconfigure(0, weight=1)
|
|
||||||
self.frame.grid_rowconfigure(0, weight=1)
|
|
||||||
|
|
||||||
# create an instance of Sheet()
|
|
||||||
self.sheet = Sheet(
|
|
||||||
# set the Sheets parent widget
|
|
||||||
self.frame,
|
|
||||||
# optional: set the Sheets data at initialization
|
|
||||||
data=[[f"Row {r}, Column {c}\nnewline1\nnewline2" for c in range(20)] for r in range(100)],
|
|
||||||
theme="light green",
|
|
||||||
height=520,
|
|
||||||
width=1000,
|
|
||||||
)
|
|
||||||
# enable various bindings
|
|
||||||
self.sheet.enable_bindings("all", "edit_index", "edit_header")
|
|
||||||
|
|
||||||
# set a user edit validation function
|
|
||||||
# AND bind all sheet modification events to a function
|
|
||||||
# chained as two functions
|
|
||||||
# more information at:
|
|
||||||
# #validate-user-cell-edits
|
|
||||||
self.sheet.edit_validation(self.validate_edits).bind("<<SheetModified>>", self.sheet_modified)
|
|
||||||
|
|
||||||
# add some new commands to the in-built right click menu
|
|
||||||
# setting data
|
|
||||||
self.sheet.popup_menu_add_command(
|
|
||||||
"Say Hello",
|
|
||||||
self.say_hello,
|
|
||||||
index_menu=False,
|
|
||||||
header_menu=False,
|
|
||||||
empty_space_menu=False,
|
|
||||||
)
|
|
||||||
# getting data
|
|
||||||
self.sheet.popup_menu_add_command(
|
|
||||||
"Print some data",
|
|
||||||
self.print_data,
|
|
||||||
empty_space_menu=False,
|
|
||||||
)
|
|
||||||
# overwrite Sheet data
|
|
||||||
self.sheet.popup_menu_add_command("Reset Sheet data", self.reset)
|
|
||||||
# set the header
|
|
||||||
self.sheet.popup_menu_add_command(
|
|
||||||
"Set header data",
|
|
||||||
self.set_header,
|
|
||||||
table_menu=False,
|
|
||||||
index_menu=False,
|
|
||||||
empty_space_menu=False,
|
|
||||||
)
|
|
||||||
# set the index
|
|
||||||
self.sheet.popup_menu_add_command(
|
|
||||||
"Set index data",
|
|
||||||
self.set_index,
|
|
||||||
table_menu=False,
|
|
||||||
header_menu=False,
|
|
||||||
empty_space_menu=False,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.frame.grid(row=0, column=0, sticky="nswe")
|
|
||||||
self.sheet.grid(row=0, column=0, sticky="nswe")
|
|
||||||
|
|
||||||
def validate_edits(self, event):
|
|
||||||
# print (event)
|
|
||||||
if event.eventname.endswith("header"):
|
|
||||||
return event.value + " edited header"
|
|
||||||
elif event.eventname.endswith("index"):
|
|
||||||
return event.value + " edited index"
|
|
||||||
else:
|
|
||||||
if not event.value:
|
|
||||||
return "EMPTY"
|
|
||||||
return event.value[:3]
|
|
||||||
|
|
||||||
def say_hello(self):
|
|
||||||
current_selection = self.sheet.get_currently_selected()
|
|
||||||
if current_selection:
|
|
||||||
box = (current_selection.row, current_selection.column)
|
|
||||||
# set cell data, end user Undo enabled
|
|
||||||
# more information at:
|
|
||||||
# #setting-sheet-data
|
|
||||||
self.sheet[box].options(undo=True).data = "Hello World!"
|
|
||||||
# highlight the cell for 2 seconds
|
|
||||||
self.highlight_area(box)
|
|
||||||
|
|
||||||
def print_data(self):
|
|
||||||
for box in self.sheet.get_all_selection_boxes():
|
|
||||||
# get user selected area sheet data
|
|
||||||
# more information at:
|
|
||||||
# #getting-sheet-data
|
|
||||||
data = self.sheet[box].data
|
|
||||||
for row in data:
|
|
||||||
print(row)
|
|
||||||
|
|
||||||
def reset(self):
|
|
||||||
# overwrites sheet data, more information at:
|
|
||||||
# #setting-sheet-data
|
|
||||||
self.sheet.set_sheet_data([[f"Row {r}, Column {c}\nnewline1\nnewline2" for c in range(20)] for r in range(100)])
|
|
||||||
# reset header and index
|
|
||||||
self.sheet.headers([])
|
|
||||||
self.sheet.index([])
|
|
||||||
|
|
||||||
def set_header(self):
|
|
||||||
self.sheet.headers(
|
|
||||||
[f"Header {(letter := num2alpha(i))} - {i + 1}\nHeader {letter} 2nd line!" for i in range(20)]
|
|
||||||
)
|
|
||||||
|
|
||||||
def set_index(self):
|
|
||||||
self.sheet.set_index_width()
|
|
||||||
self.sheet.row_index(
|
|
||||||
[f"Index {(letter := num2alpha(i))} - {i + 1}\nIndex {letter} 2nd line!" for i in range(100)]
|
|
||||||
)
|
|
||||||
|
|
||||||
def sheet_modified(self, event):
|
|
||||||
# uncomment below if you want to take a look at the event object
|
|
||||||
# print ("The sheet was modified! Event object:")
|
|
||||||
# for k, v in event.items():
|
|
||||||
# print (k, ":", v)
|
|
||||||
# print ("\n")
|
|
||||||
|
|
||||||
# otherwise more information at:
|
|
||||||
# #event-data
|
|
||||||
|
|
||||||
# highlight the modified cells briefly
|
|
||||||
if event.eventname.startswith("move"):
|
|
||||||
for box in self.sheet.get_all_selection_boxes():
|
|
||||||
self.highlight_area(box)
|
|
||||||
else:
|
|
||||||
for box in event.selection_boxes:
|
|
||||||
self.highlight_area(box)
|
|
||||||
|
|
||||||
def highlight_area(self, box, time=800):
|
|
||||||
# highlighting an area of the sheet
|
|
||||||
# more information at:
|
|
||||||
# #highlighting-cells
|
|
||||||
self.sheet[box].bg = "indianred1"
|
|
||||||
self.after(time, lambda: self.clear_highlight(box))
|
|
||||||
|
|
||||||
def clear_highlight(self, box):
|
|
||||||
self.sheet[box].dehighlight()
|
|
||||||
|
|
||||||
|
|
||||||
app = demo()
|
|
||||||
app.mainloop()
|
|
||||||
Reference in New Issue
Block a user