tksheet 7.2.13__py3-none-any.whl → 7.2.15__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tksheet/__init__.py +1 -1
- tksheet/column_headers.py +0 -1
- tksheet/functions.py +52 -0
- tksheet/main_table.py +49 -59
- tksheet/row_index.py +0 -1
- tksheet/sheet.py +3 -0
- tksheet/sheet_options.py +3 -1
- tksheet/text_editor.py +15 -0
- {tksheet-7.2.13.dist-info → tksheet-7.2.15.dist-info}/METADATA +4 -4
- tksheet-7.2.15.dist-info/RECORD +20 -0
- {tksheet-7.2.13.dist-info → tksheet-7.2.15.dist-info}/WHEEL +1 -1
- tksheet-7.2.13.dist-info/RECORD +0 -20
- {tksheet-7.2.13.dist-info → tksheet-7.2.15.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.2.13.dist-info → tksheet-7.2.15.dist-info}/top_level.txt +0 -0
tksheet/__init__.py
CHANGED
tksheet/column_headers.py
CHANGED
@@ -1437,7 +1437,6 @@ class ColumnHeaders(tk.Canvas):
|
|
1437
1437
|
x_stop,
|
1438
1438
|
self.current_height,
|
1439
1439
|
)
|
1440
|
-
draw_x = self.MT.col_positions[grid_start_col]
|
1441
1440
|
yend = self.current_height - 5
|
1442
1441
|
if (self.PAR.ops.show_vertical_grid or self.width_resizing_enabled) and col_pos_exists:
|
1443
1442
|
points = [
|
tksheet/functions.py
CHANGED
@@ -439,6 +439,58 @@ def is_contiguous(iterable: Iterator[int]) -> bool:
|
|
439
439
|
return all(i == (prev := prev + 1) for i in itr)
|
440
440
|
|
441
441
|
|
442
|
+
def down_cell_within_box(
|
443
|
+
r: int,
|
444
|
+
c: int,
|
445
|
+
r1: int,
|
446
|
+
c1: int,
|
447
|
+
r2: int,
|
448
|
+
c2: int,
|
449
|
+
numrows: int,
|
450
|
+
numcols: int,
|
451
|
+
) -> tuple[int, int]:
|
452
|
+
moved = False
|
453
|
+
new_r = r
|
454
|
+
new_c = c
|
455
|
+
if r + 1 == r2:
|
456
|
+
new_r = r1
|
457
|
+
elif numrows > 1:
|
458
|
+
new_r = r + 1
|
459
|
+
moved = True
|
460
|
+
if not moved:
|
461
|
+
if c + 1 == c2:
|
462
|
+
new_c = c1
|
463
|
+
elif numcols > 1:
|
464
|
+
new_c = c + 1
|
465
|
+
return new_r, new_c
|
466
|
+
|
467
|
+
|
468
|
+
def cell_right_within_box(
|
469
|
+
r: int,
|
470
|
+
c: int,
|
471
|
+
r1: int,
|
472
|
+
c1: int,
|
473
|
+
r2: int,
|
474
|
+
c2: int,
|
475
|
+
numrows: int,
|
476
|
+
numcols: int,
|
477
|
+
) -> tuple[int, int]:
|
478
|
+
moved = False
|
479
|
+
new_r = r
|
480
|
+
new_c = c
|
481
|
+
if c + 1 == c2:
|
482
|
+
new_c = c1
|
483
|
+
elif numcols > 1:
|
484
|
+
new_c = c + 1
|
485
|
+
moved = True
|
486
|
+
if not moved:
|
487
|
+
if r + 1 == r2:
|
488
|
+
new_r = r1
|
489
|
+
elif numrows > 1:
|
490
|
+
new_r = r + 1
|
491
|
+
return new_r, new_c
|
492
|
+
|
493
|
+
|
442
494
|
def get_last(
|
443
495
|
it: Iterator,
|
444
496
|
) -> object:
|
tksheet/main_table.py
CHANGED
@@ -54,6 +54,7 @@ from .functions import (
|
|
54
54
|
decompress_load,
|
55
55
|
diff_gen,
|
56
56
|
diff_list,
|
57
|
+
down_cell_within_box,
|
57
58
|
event_dict,
|
58
59
|
gen_formatted,
|
59
60
|
get_data_from_clipboard,
|
@@ -72,6 +73,7 @@ from .functions import (
|
|
72
73
|
new_tk_event,
|
73
74
|
pickle_obj,
|
74
75
|
pickled_event_dict,
|
76
|
+
cell_right_within_box,
|
75
77
|
rounded_box_coords,
|
76
78
|
span_idxs_post_move,
|
77
79
|
try_binding,
|
@@ -6782,63 +6784,63 @@ class MainTable(tk.Canvas):
|
|
6782
6784
|
numrows = r2 - r1
|
6783
6785
|
if numcols == 1 and numrows == 1:
|
6784
6786
|
if event.keysym == "Return":
|
6785
|
-
|
6786
|
-
|
6787
|
-
|
6788
|
-
c
|
6789
|
-
|
6790
|
-
|
6791
|
-
|
6792
|
-
|
6787
|
+
if self.PAR.ops.edit_cell_return == "right":
|
6788
|
+
self.select_right(r, c)
|
6789
|
+
if self.PAR.ops.edit_cell_return == "down":
|
6790
|
+
self.select_down(r, c)
|
6791
|
+
elif event.keysym == "Tab":
|
6792
|
+
if self.PAR.ops.edit_cell_tab == "right":
|
6793
|
+
self.select_right(r, c)
|
6794
|
+
if self.PAR.ops.edit_cell_tab == "down":
|
6795
|
+
self.select_down(r, c)
|
6796
|
+
else:
|
6797
|
+
if event.keysym == "Return":
|
6798
|
+
if self.PAR.ops.edit_cell_return == "right":
|
6799
|
+
new_r, new_c = cell_right_within_box(r, c, r1, c1, r2, c2, numrows, numcols)
|
6800
|
+
elif self.PAR.ops.edit_cell_return == "down":
|
6801
|
+
new_r, new_c = down_cell_within_box(r, c, r1, c1, r2, c2, numrows, numcols)
|
6802
|
+
else:
|
6803
|
+
new_r, new_c = None, None
|
6793
6804
|
elif event.keysym == "Tab":
|
6794
|
-
|
6805
|
+
if self.PAR.ops.edit_cell_tab == "right":
|
6806
|
+
new_r, new_c = cell_right_within_box(r, c, r1, c1, r2, c2, numrows, numcols)
|
6807
|
+
elif self.PAR.ops.edit_cell_tab == "down":
|
6808
|
+
new_r, new_c = down_cell_within_box(r, c, r1, c1, r2, c2, numrows, numcols)
|
6809
|
+
else:
|
6810
|
+
new_r, new_c = None, None
|
6811
|
+
if isinstance(new_r, int):
|
6812
|
+
self.set_currently_selected(new_r, new_c, item=self.selected.fill_iid)
|
6795
6813
|
self.see(
|
6796
|
-
|
6797
|
-
|
6798
|
-
keep_xscroll=
|
6814
|
+
new_r,
|
6815
|
+
new_c,
|
6816
|
+
keep_xscroll=False,
|
6799
6817
|
bottom_right_corner=True,
|
6800
6818
|
check_cell_visibility=True,
|
6801
6819
|
)
|
6802
|
-
else:
|
6803
|
-
moved = False
|
6804
|
-
new_r = r
|
6805
|
-
new_c = c
|
6806
|
-
if event.keysym == "Return":
|
6807
|
-
if r + 1 == r2:
|
6808
|
-
new_r = r1
|
6809
|
-
elif numrows > 1:
|
6810
|
-
new_r = r + 1
|
6811
|
-
moved = True
|
6812
|
-
if not moved:
|
6813
|
-
if c + 1 == c2:
|
6814
|
-
new_c = c1
|
6815
|
-
elif numcols > 1:
|
6816
|
-
new_c = c + 1
|
6817
|
-
elif event.keysym == "Tab":
|
6818
|
-
if c + 1 == c2:
|
6819
|
-
new_c = c1
|
6820
|
-
elif numcols > 1:
|
6821
|
-
new_c = c + 1
|
6822
|
-
moved = True
|
6823
|
-
if not moved:
|
6824
|
-
if r + 1 == r2:
|
6825
|
-
new_r = r1
|
6826
|
-
elif numrows > 1:
|
6827
|
-
new_r = r + 1
|
6828
|
-
self.set_currently_selected(new_r, new_c, item=self.selected.fill_iid)
|
6829
|
-
self.see(
|
6830
|
-
new_r,
|
6831
|
-
new_c,
|
6832
|
-
keep_xscroll=False,
|
6833
|
-
bottom_right_corner=True,
|
6834
|
-
check_cell_visibility=True,
|
6835
|
-
)
|
6836
6820
|
self.recreate_all_selection_boxes()
|
6837
6821
|
self.hide_text_editor_and_dropdown()
|
6838
6822
|
if event.keysym != "FocusOut":
|
6839
6823
|
self.focus_set()
|
6840
6824
|
return "break"
|
6841
6825
|
|
6826
|
+
def select_right(self, r: int, c: int) -> None:
|
6827
|
+
self.select_cell(r, c + 1 if c < len(self.col_positions) - 2 else c)
|
6828
|
+
self.see(
|
6829
|
+
r,
|
6830
|
+
c + 1 if c < len(self.col_positions) - 2 else c,
|
6831
|
+
bottom_right_corner=True,
|
6832
|
+
check_cell_visibility=True,
|
6833
|
+
)
|
6834
|
+
|
6835
|
+
def select_down(self, r: int, c: int) -> None:
|
6836
|
+
self.select_cell(r + 1 if r < len(self.row_positions) - 2 else r, c)
|
6837
|
+
self.see(
|
6838
|
+
r + 1 if r < len(self.row_positions) - 2 else r,
|
6839
|
+
c,
|
6840
|
+
bottom_right_corner=True,
|
6841
|
+
check_cell_visibility=True,
|
6842
|
+
)
|
6843
|
+
|
6842
6844
|
def tab_key(self, event: object = None) -> str:
|
6843
6845
|
if not self.selected:
|
6844
6846
|
return
|
@@ -6851,19 +6853,7 @@ class MainTable(tk.Canvas):
|
|
6851
6853
|
new_c = c + 1 if c < len(self.col_positions) - 2 else c
|
6852
6854
|
self.select_cell(new_r, new_c)
|
6853
6855
|
else:
|
6854
|
-
|
6855
|
-
new_r = r
|
6856
|
-
new_c = c
|
6857
|
-
if c + 1 == c2:
|
6858
|
-
new_c = c1
|
6859
|
-
elif numcols > 1:
|
6860
|
-
new_c = c + 1
|
6861
|
-
moved = True
|
6862
|
-
if not moved:
|
6863
|
-
if r + 1 == r2:
|
6864
|
-
new_r = r1
|
6865
|
-
elif numrows > 1:
|
6866
|
-
new_r = r + 1
|
6856
|
+
new_r, new_c = cell_right_within_box(r, c, r1, c1, r2, c2, numrows, numcols)
|
6867
6857
|
self.set_currently_selected(new_r, new_c, item=self.selected.fill_iid)
|
6868
6858
|
self.see(
|
6869
6859
|
new_r,
|
tksheet/row_index.py
CHANGED
@@ -1535,7 +1535,6 @@ class RowIndex(tk.Canvas):
|
|
1535
1535
|
self.hidd_tree_arrow.update(self.disp_tree_arrow)
|
1536
1536
|
self.disp_tree_arrow = {}
|
1537
1537
|
self.visible_row_dividers = {}
|
1538
|
-
draw_y = self.MT.row_positions[grid_start_row]
|
1539
1538
|
xend = self.current_width - 6
|
1540
1539
|
self.row_width_resize_bbox = (
|
1541
1540
|
self.current_width - 2,
|
tksheet/sheet.py
CHANGED
@@ -188,6 +188,9 @@ class Sheet(tk.Frame):
|
|
188
188
|
show_horizontal_grid: bool = True,
|
189
189
|
display_selected_fg_over_highlights: bool = False,
|
190
190
|
show_selected_cells_border: bool = True,
|
191
|
+
edit_cell_tab: Literal["right", "down", ""] = "right",
|
192
|
+
edit_cell_return: Literal["right", "down", ""] = "down",
|
193
|
+
editor_del_key: Literal["forward", "backward", ""] = "forward",
|
191
194
|
treeview: bool = False,
|
192
195
|
treeview_indent: str | int = "6",
|
193
196
|
rounded_boxes: bool = True,
|
tksheet/sheet_options.py
CHANGED
@@ -98,7 +98,6 @@ def new_sheet_options() -> DotDict:
|
|
98
98
|
],
|
99
99
|
"delete_bindings": [
|
100
100
|
"<Delete>",
|
101
|
-
"<Delete>",
|
102
101
|
],
|
103
102
|
"select_all_bindings": [
|
104
103
|
f"<{ctrl_key}-a>",
|
@@ -239,6 +238,9 @@ def new_sheet_options() -> DotDict:
|
|
239
238
|
"show_horizontal_grid": True,
|
240
239
|
"display_selected_fg_over_highlights": False,
|
241
240
|
"show_selected_cells_border": True,
|
241
|
+
"edit_cell_tab": "right",
|
242
|
+
"edit_cell_return": "down",
|
243
|
+
"editor_del_key": "forward",
|
242
244
|
"treeview": False,
|
243
245
|
"treeview_indent": "6",
|
244
246
|
"rounded_boxes": True,
|
tksheet/text_editor.py
CHANGED
@@ -40,6 +40,7 @@ class TextEditorTkText(tk.Text):
|
|
40
40
|
self.bind(rc_binding, self.rc)
|
41
41
|
self.bind(f"<{ctrl_key}-a>", self.select_all)
|
42
42
|
self.bind(f"<{ctrl_key}-A>", self.select_all)
|
43
|
+
self.bind("<Delete>", self.delete_key)
|
43
44
|
self._orig = self._w + "_orig"
|
44
45
|
self.tk.call("rename", self._w, self._orig)
|
45
46
|
self.tk.createcommand(self._w, self._proxy)
|
@@ -62,6 +63,7 @@ class TextEditorTkText(tk.Text):
|
|
62
63
|
insertbackground=fg,
|
63
64
|
state=state,
|
64
65
|
)
|
66
|
+
self.editor_del_key = sheet_ops.editor_del_key
|
65
67
|
self.align = align
|
66
68
|
self.rc_popup_menu.delete(0, "end")
|
67
69
|
self.rc_popup_menu.add_command(
|
@@ -126,6 +128,19 @@ class TextEditorTkText(tk.Text):
|
|
126
128
|
self.focus_set()
|
127
129
|
self.rc_popup_menu.tk_popup(event.x_root, event.y_root)
|
128
130
|
|
131
|
+
def delete_key(self, event: object = None) -> None:
|
132
|
+
if self.editor_del_key == "forward":
|
133
|
+
return
|
134
|
+
elif not self.editor_del_key:
|
135
|
+
return "break"
|
136
|
+
elif self.editor_del_key == "backward":
|
137
|
+
if self.tag_ranges("sel"):
|
138
|
+
return
|
139
|
+
if self.index("insert") == "1.0":
|
140
|
+
return "break"
|
141
|
+
self.delete("insert-1c")
|
142
|
+
return "break"
|
143
|
+
|
129
144
|
def select_all(self, event: object = None) -> Literal["break"]:
|
130
145
|
self.tag_add(tk.SEL, "1.0", tk.END)
|
131
146
|
self.mark_set(tk.INSERT, tk.END)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: tksheet
|
3
|
-
Version: 7.2.
|
3
|
+
Version: 7.2.15
|
4
4
|
Summary: Tkinter table / sheet widget
|
5
5
|
Author-email: ragardner <github@ragardner.simplelogin.com>
|
6
6
|
License: Copyright (c) 2019 ragardner and open source contributors
|
@@ -103,10 +103,10 @@ sheet.insert_columns(columns=2, idx=4, undo=True)
|
|
103
103
|
sheet.delete_columns(columns=[0, 3], undo=True)
|
104
104
|
```
|
105
105
|
|
106
|
-
### **light
|
106
|
+
### **light blue theme**
|
107
107
|
|
108
|
-

|
109
109
|
|
110
110
|
### **dark theme**
|
111
111
|
|
112
|
-

|
@@ -0,0 +1,20 @@
|
|
1
|
+
tksheet/__init__.py,sha256=7DsA4dnRJU4f9UyzWDd0-lHkvu9HCT28y5A2n7g4z3g,2165
|
2
|
+
tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
|
3
|
+
tksheet/column_headers.py,sha256=bHv67vRhRYxw_qyrw5akJo-b77vtN4y-mEO617FEqxE,102222
|
4
|
+
tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
|
5
|
+
tksheet/functions.py,sha256=wTWsTFZkTMJH-2qz--9qNaprWqhA7sYVzCEhuw_PRhs,42369
|
6
|
+
tksheet/main_table.py,sha256=WeSemTwFb8zEu0v2QabPNGZqM06kkCs-IvP1HLSR1oM,328843
|
7
|
+
tksheet/other_classes.py,sha256=HIKIDNXJRv0H5qbftcCtLVWW8NKSBAwyNXQOlmPWTDQ,15633
|
8
|
+
tksheet/row_index.py,sha256=docjegBsQIO0qfPE7_zgTPkdTOHBMRJBpA9t6wqslj0,109630
|
9
|
+
tksheet/sheet.py,sha256=ffaVQmjBEFtDiDDif7L1ze7XIT2jMmFHhPerC4AqubU,275549
|
10
|
+
tksheet/sheet_options.py,sha256=d6o2TxGrHEJbdeFYfD67QPXM9irKSnLyNIiJI46gaw0,12442
|
11
|
+
tksheet/text_editor.py,sha256=lmmHOPb11S8tlNtC10vijF1QqVB5Ts2hUKnGJd_JkWA,7103
|
12
|
+
tksheet/themes.py,sha256=ZO4RqnAhEpApsoA5ZGUkYvb7huaNHSmrV_ug2TWWzOE,14474
|
13
|
+
tksheet/top_left_rectangle.py,sha256=ri7hb9CC5l37ynmxceprq11UuWWRpWEI_0AI42wzv0A,8444
|
14
|
+
tksheet/types.py,sha256=IgoEHMbceKpakcZtanxKaKJ4RdCq7UW6EoEIIz5O59k,340
|
15
|
+
tksheet/vars.py,sha256=86ubZZElsnQuC6Lv6bW2lt2NhD9wAp6PxtkK7ufKqq0,3452
|
16
|
+
tksheet-7.2.15.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
17
|
+
tksheet-7.2.15.dist-info/METADATA,sha256=LvqFaxqVU3rN2hYis6Ur4XO_AehkY4bBjuhbkb5rvt8,6263
|
18
|
+
tksheet-7.2.15.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
|
19
|
+
tksheet-7.2.15.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
20
|
+
tksheet-7.2.15.dist-info/RECORD,,
|
tksheet-7.2.13.dist-info/RECORD
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
tksheet/__init__.py,sha256=hncZ8UDCiHAX84BygwoCRGInI--ZROe-b2PfOOUMRSo,2165
|
2
|
-
tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
|
3
|
-
tksheet/column_headers.py,sha256=6PuhA2jHt3IT71syjEx986LsVJIQ65V3Qx0RLDjH1wI,102278
|
4
|
-
tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
|
5
|
-
tksheet/functions.py,sha256=lAl7KnYn5d8hTT_RgU7TDX8FwFaZOUsbn-i9K3O6hqk,41410
|
6
|
-
tksheet/main_table.py,sha256=PBf-rjjgz1CvFZM5KVDTvbzneEtCgMty3R5e30IQYjQ,328748
|
7
|
-
tksheet/other_classes.py,sha256=HIKIDNXJRv0H5qbftcCtLVWW8NKSBAwyNXQOlmPWTDQ,15633
|
8
|
-
tksheet/row_index.py,sha256=4QyaQHr3ux8apWUfotZD2Vr8yidKdiD4DjRp8syHTTY,109686
|
9
|
-
tksheet/sheet.py,sha256=oRKPn92IclzngpvH9w1UhkPT2ZMNWXQziZAQRZduIu0,275346
|
10
|
-
tksheet/sheet_options.py,sha256=AJB7twce1DBteP7jk3GOpY1SetW-djgj2WP517FHZ9o,12349
|
11
|
-
tksheet/text_editor.py,sha256=-QOO3belB0nGH3_XkO3aJ-SR-RRPZDMApyKUa7DWwAw,6549
|
12
|
-
tksheet/themes.py,sha256=ZO4RqnAhEpApsoA5ZGUkYvb7huaNHSmrV_ug2TWWzOE,14474
|
13
|
-
tksheet/top_left_rectangle.py,sha256=ri7hb9CC5l37ynmxceprq11UuWWRpWEI_0AI42wzv0A,8444
|
14
|
-
tksheet/types.py,sha256=IgoEHMbceKpakcZtanxKaKJ4RdCq7UW6EoEIIz5O59k,340
|
15
|
-
tksheet/vars.py,sha256=86ubZZElsnQuC6Lv6bW2lt2NhD9wAp6PxtkK7ufKqq0,3452
|
16
|
-
tksheet-7.2.13.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
17
|
-
tksheet-7.2.13.dist-info/METADATA,sha256=0vIzO__DtHFM6Jg93nr-CS0VgTuhNHopzpCvSwab3Jk,6285
|
18
|
-
tksheet-7.2.13.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
19
|
-
tksheet-7.2.13.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
20
|
-
tksheet-7.2.13.dist-info/RECORD,,
|
File without changes
|
File without changes
|