tksheet 7.2.19__py3-none-any.whl → 7.2.21__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 +4 -1
- tksheet/column_headers.py +4 -5
- tksheet/formatters.py +25 -7
- tksheet/functions.py +2 -14
- tksheet/main_table.py +56 -58
- tksheet/row_index.py +4 -5
- tksheet/sheet.py +12 -13
- tksheet/text_editor.py +2 -4
- {tksheet-7.2.19.dist-info → tksheet-7.2.21.dist-info}/METADATA +1 -1
- tksheet-7.2.21.dist-info/RECORD +20 -0
- {tksheet-7.2.19.dist-info → tksheet-7.2.21.dist-info}/WHEEL +1 -1
- tksheet-7.2.19.dist-info/RECORD +0 -20
- {tksheet-7.2.19.dist-info → tksheet-7.2.21.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.2.19.dist-info → tksheet-7.2.21.dist-info}/top_level.txt +0 -0
tksheet/__init__.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
tksheet - A Python tkinter table widget
|
5
5
|
"""
|
6
6
|
|
7
|
-
__version__ = "7.2.
|
7
|
+
__version__ = "7.2.21"
|
8
8
|
|
9
9
|
from .colors import (
|
10
10
|
color_map,
|
@@ -12,6 +12,8 @@ from .colors import (
|
|
12
12
|
from .column_headers import ColumnHeaders
|
13
13
|
from .formatters import (
|
14
14
|
Formatter,
|
15
|
+
alt_percentage_to_str,
|
16
|
+
alt_to_percentage,
|
15
17
|
bool_formatter,
|
16
18
|
data_to_str,
|
17
19
|
float_formatter,
|
@@ -28,6 +30,7 @@ from .formatters import (
|
|
28
30
|
to_bool,
|
29
31
|
to_float,
|
30
32
|
to_int,
|
33
|
+
to_percentage,
|
31
34
|
to_str,
|
32
35
|
try_to_bool,
|
33
36
|
)
|
tksheet/column_headers.py
CHANGED
@@ -31,7 +31,7 @@ from .functions import (
|
|
31
31
|
get_n2a,
|
32
32
|
is_contiguous,
|
33
33
|
new_tk_event,
|
34
|
-
|
34
|
+
stored_event_dict,
|
35
35
|
rounded_box_coords,
|
36
36
|
try_binding,
|
37
37
|
)
|
@@ -56,8 +56,7 @@ from .vars import (
|
|
56
56
|
|
57
57
|
class ColumnHeaders(tk.Canvas):
|
58
58
|
def __init__(self, *args, **kwargs):
|
59
|
-
|
60
|
-
self,
|
59
|
+
super().__init__(
|
61
60
|
kwargs["parent"],
|
62
61
|
background=kwargs["parent"].ops.header_bg,
|
63
62
|
highlightthickness=0,
|
@@ -875,7 +874,7 @@ class ColumnHeaders(tk.Canvas):
|
|
875
874
|
"displayed": disp_new_idxs,
|
876
875
|
}
|
877
876
|
if self.MT.undo_enabled:
|
878
|
-
self.MT.undo_stack.append(
|
877
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
879
878
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
880
879
|
try_binding(self.ch_extra_end_drag_drop_func, event_data, "end_move_columns")
|
881
880
|
self.MT.sheet_modified(event_data)
|
@@ -2187,7 +2186,7 @@ class ColumnHeaders(tk.Canvas):
|
|
2187
2186
|
self.fix_header(datacn)
|
2188
2187
|
if not check_input_valid or self.input_valid_for_cell(datacn, value):
|
2189
2188
|
if self.MT.undo_enabled and undo:
|
2190
|
-
self.MT.undo_stack.append(
|
2189
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
2191
2190
|
self.set_cell_data(datacn=datacn, value=value)
|
2192
2191
|
edited = True
|
2193
2192
|
if edited and cell_resize and self.PAR.ops.cell_auto_resize_enabled:
|
tksheet/formatters.py
CHANGED
@@ -5,19 +5,25 @@ from collections.abc import Callable
|
|
5
5
|
from .vars import falsy, nonelike, truthy
|
6
6
|
|
7
7
|
|
8
|
-
def is_none_like(o: object):
|
8
|
+
def is_none_like(o: object) -> bool:
|
9
9
|
if (isinstance(o, str) and o.lower().replace(" ", "") in nonelike) or o in nonelike:
|
10
10
|
return True
|
11
11
|
return False
|
12
12
|
|
13
13
|
|
14
|
-
def to_int(o: object, **kwargs):
|
14
|
+
def to_int(o: object, **kwargs) -> int:
|
15
15
|
if isinstance(o, int):
|
16
16
|
return o
|
17
17
|
return int(float(o))
|
18
18
|
|
19
19
|
|
20
|
-
def to_float(o: object, **kwargs):
|
20
|
+
def to_float(o: object, **kwargs) -> float:
|
21
|
+
if isinstance(o, float):
|
22
|
+
return o
|
23
|
+
return float(o)
|
24
|
+
|
25
|
+
|
26
|
+
def to_percentage(o: object, **kwargs) -> float:
|
21
27
|
if isinstance(o, float):
|
22
28
|
return o
|
23
29
|
if isinstance(o, str) and o.endswith("%"):
|
@@ -25,7 +31,15 @@ def to_float(o: object, **kwargs):
|
|
25
31
|
return float(o)
|
26
32
|
|
27
33
|
|
28
|
-
def
|
34
|
+
def alt_to_percentage(o: object, **kwargs) -> float:
|
35
|
+
if isinstance(o, float):
|
36
|
+
return o
|
37
|
+
if isinstance(o, str) and o.endswith("%"):
|
38
|
+
return float(o.replace("%", ""))
|
39
|
+
return float(o)
|
40
|
+
|
41
|
+
|
42
|
+
def to_bool(val: object, **kwargs) -> bool:
|
29
43
|
if isinstance(val, bool):
|
30
44
|
return val
|
31
45
|
if isinstance(val, str):
|
@@ -47,14 +61,14 @@ def to_bool(val: object, **kwargs):
|
|
47
61
|
raise ValueError(f'Cannot map "{val}" to bool.')
|
48
62
|
|
49
63
|
|
50
|
-
def try_to_bool(o: object, **kwargs):
|
64
|
+
def try_to_bool(o: object, **kwargs) -> object:
|
51
65
|
try:
|
52
66
|
return to_bool(o)
|
53
67
|
except Exception:
|
54
68
|
return o
|
55
69
|
|
56
70
|
|
57
|
-
def is_bool_like(o: object, **kwargs):
|
71
|
+
def is_bool_like(o: object, **kwargs) -> bool:
|
58
72
|
try:
|
59
73
|
to_bool(o)
|
60
74
|
return True
|
@@ -91,6 +105,10 @@ def percentage_to_str(v: object, **kwargs: dict) -> str:
|
|
91
105
|
return f"{v}%"
|
92
106
|
|
93
107
|
|
108
|
+
def alt_percentage_to_str(v: object, **kwargs: dict) -> str:
|
109
|
+
return f"{float_to_str(v)}%"
|
110
|
+
|
111
|
+
|
94
112
|
def bool_to_str(v: object, **kwargs: dict) -> str:
|
95
113
|
return f"{v}"
|
96
114
|
|
@@ -127,7 +145,7 @@ def float_formatter(
|
|
127
145
|
|
128
146
|
def percentage_formatter(
|
129
147
|
datatypes: tuple[object] | object = float,
|
130
|
-
format_function: Callable =
|
148
|
+
format_function: Callable = to_percentage,
|
131
149
|
to_str_function: Callable = percentage_to_str,
|
132
150
|
decimals: int = 2,
|
133
151
|
**kwargs,
|
tksheet/functions.py
CHANGED
@@ -5,7 +5,6 @@ import io
|
|
5
5
|
import pickle
|
6
6
|
import re
|
7
7
|
import tkinter as tk
|
8
|
-
import zlib
|
9
8
|
from bisect import (
|
10
9
|
bisect_left,
|
11
10
|
)
|
@@ -16,7 +15,6 @@ from collections.abc import (
|
|
16
15
|
Iterator,
|
17
16
|
Sequence,
|
18
17
|
)
|
19
|
-
from functools import partial
|
20
18
|
from itertools import islice, repeat
|
21
19
|
from typing import Literal
|
22
20
|
|
@@ -32,8 +30,6 @@ from .other_classes import (
|
|
32
30
|
Span,
|
33
31
|
)
|
34
32
|
|
35
|
-
compress = partial(zlib.compress, level=1)
|
36
|
-
pickle_obj = partial(pickle.dumps, protocol=pickle.HIGHEST_PROTOCOL)
|
37
33
|
unpickle_obj = pickle.loads
|
38
34
|
|
39
35
|
|
@@ -65,14 +61,6 @@ def get_data_from_clipboard(
|
|
65
61
|
return [[data]]
|
66
62
|
|
67
63
|
|
68
|
-
def pickle_compress(obj: object) -> bytes:
|
69
|
-
return compress(pickle_obj(obj))
|
70
|
-
|
71
|
-
|
72
|
-
def decompress_load(b: bytes) -> object:
|
73
|
-
return pickle.loads(zlib.decompress(b))
|
74
|
-
|
75
|
-
|
76
64
|
def tksheet_type_error(kwarg: str, valid_types: list[str], not_type: object) -> str:
|
77
65
|
valid_types = ", ".join(f"{type_}" for type_ in valid_types)
|
78
66
|
return f"Argument '{kwarg}' must be one of the following types: {valid_types}, " f"not {type(not_type)}."
|
@@ -210,8 +198,8 @@ def change_eventname(event_dict: EventDataDict, newname: str) -> EventDataDict:
|
|
210
198
|
return EventDataDict({**event_dict, **{"eventname": newname}})
|
211
199
|
|
212
200
|
|
213
|
-
def
|
214
|
-
return DotDict(name=d["eventname"], data=
|
201
|
+
def stored_event_dict(d: DotDict) -> DotDict:
|
202
|
+
return DotDict(name=d["eventname"], data=DotDict(kv for kv in d.items() if kv[0] != "widget"))
|
215
203
|
|
216
204
|
|
217
205
|
def len_to_idx(n: int) -> int:
|
tksheet/main_table.py
CHANGED
@@ -53,7 +53,6 @@ from .functions import (
|
|
53
53
|
b_index,
|
54
54
|
cell_right_within_box,
|
55
55
|
consecutive_ranges,
|
56
|
-
decompress_load,
|
57
56
|
diff_gen,
|
58
57
|
diff_list,
|
59
58
|
down_cell_within_box,
|
@@ -73,8 +72,7 @@ from .functions import (
|
|
73
72
|
mod_span_widget,
|
74
73
|
move_elements_by_mapping,
|
75
74
|
new_tk_event,
|
76
|
-
|
77
|
-
pickled_event_dict,
|
75
|
+
stored_event_dict,
|
78
76
|
rounded_box_coords,
|
79
77
|
span_idxs_post_move,
|
80
78
|
try_binding,
|
@@ -88,6 +86,7 @@ from .other_classes import (
|
|
88
86
|
DropdownStorage,
|
89
87
|
EventDataDict,
|
90
88
|
FontTuple,
|
89
|
+
Highlight,
|
91
90
|
Loc,
|
92
91
|
ProgressBar,
|
93
92
|
Selected,
|
@@ -115,8 +114,7 @@ from .vars import (
|
|
115
114
|
|
116
115
|
class MainTable(tk.Canvas):
|
117
116
|
def __init__(self, *args, **kwargs):
|
118
|
-
|
119
|
-
self,
|
117
|
+
super().__init__(
|
120
118
|
kwargs["parent"],
|
121
119
|
background=kwargs["parent"].ops.table_bg,
|
122
120
|
highlightthickness=0,
|
@@ -671,8 +669,6 @@ class MainTable(tk.Canvas):
|
|
671
669
|
event_data,
|
672
670
|
)
|
673
671
|
writer.writerow(row)
|
674
|
-
if event_data["cells"]["table"]:
|
675
|
-
self.undo_stack.append(pickled_event_dict(event_data))
|
676
672
|
self.clipboard_clear()
|
677
673
|
if len(event_data["cells"]["table"]) == 1 and self.PAR.ops.to_clipboard_lineterminator not in next(
|
678
674
|
iter(event_data["cells"]["table"].values())
|
@@ -685,9 +681,10 @@ class MainTable(tk.Canvas):
|
|
685
681
|
for r1, c1, r2, c2 in boxes:
|
686
682
|
self.show_ctrl_outline(canvas="table", start_cell=(c1, r1), end_cell=(c2, r2))
|
687
683
|
if event_data["cells"]["table"]:
|
684
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
688
685
|
try_binding(self.extra_end_ctrl_x_func, event_data, "end_ctrl_x")
|
689
|
-
|
690
|
-
|
686
|
+
self.sheet_modified(event_data)
|
687
|
+
self.PAR.emit_event("<<Cut>>", event_data)
|
691
688
|
return event_data
|
692
689
|
|
693
690
|
def ctrl_v(self, event: object = None, validation: bool = True) -> None | EventDataDict:
|
@@ -937,8 +934,6 @@ class MainTable(tk.Canvas):
|
|
937
934
|
)
|
938
935
|
event_data["selection_boxes"] = self.get_boxes()
|
939
936
|
event_data["selected"] = self.selected
|
940
|
-
if event_data["cells"]["table"] or event_data["added"]["rows"] or event_data["added"]["columns"]:
|
941
|
-
self.undo_stack.append(pickled_event_dict(event_data))
|
942
937
|
self.see(
|
943
938
|
r=selected_r,
|
944
939
|
c=selected_c,
|
@@ -950,9 +945,10 @@ class MainTable(tk.Canvas):
|
|
950
945
|
)
|
951
946
|
self.refresh()
|
952
947
|
if event_data["cells"]["table"] or event_data["added"]["rows"] or event_data["added"]["columns"]:
|
948
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
953
949
|
try_binding(self.extra_end_ctrl_v_func, event_data, "end_ctrl_v")
|
954
|
-
|
955
|
-
|
950
|
+
self.sheet_modified(event_data)
|
951
|
+
self.PAR.emit_event("<<Paste>>", event_data)
|
956
952
|
return event_data
|
957
953
|
|
958
954
|
def delete_key(self, event: object = None, validation: bool = True) -> None | EventDataDict:
|
@@ -988,11 +984,11 @@ class MainTable(tk.Canvas):
|
|
988
984
|
event_data,
|
989
985
|
)
|
990
986
|
if event_data["cells"]["table"]:
|
991
|
-
self.
|
987
|
+
self.refresh()
|
988
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
992
989
|
try_binding(self.extra_end_delete_key_func, event_data, "end_delete")
|
993
|
-
|
994
|
-
|
995
|
-
self.PAR.emit_event("<<Delete>>", event_data)
|
990
|
+
self.sheet_modified(event_data)
|
991
|
+
self.PAR.emit_event("<<Delete>>", event_data)
|
996
992
|
return event_data
|
997
993
|
|
998
994
|
def event_data_set_cell(self, datarn: int, datacn: int, value: object, event_data: dict) -> EventDataDict:
|
@@ -1060,7 +1056,7 @@ class MainTable(tk.Canvas):
|
|
1060
1056
|
"data": data_new_idxs,
|
1061
1057
|
"displayed": {} if disp_new_idxs is None else disp_new_idxs,
|
1062
1058
|
}
|
1063
|
-
event_data["options"] = self.
|
1059
|
+
event_data["options"] = self.copy_options()
|
1064
1060
|
event_data["named_spans"] = {k: span.pickle_self() for k, span in self.named_spans.items()}
|
1065
1061
|
if move_widths and disp_new_idxs and (not data_indexes or self.all_columns_displayed):
|
1066
1062
|
self.deselect("all", run_binding=False, redraw=False)
|
@@ -1294,7 +1290,7 @@ class MainTable(tk.Canvas):
|
|
1294
1290
|
"data": data_new_idxs,
|
1295
1291
|
"displayed": {} if disp_new_idxs is None else disp_new_idxs,
|
1296
1292
|
}
|
1297
|
-
event_data["options"] = self.
|
1293
|
+
event_data["options"] = self.copy_options()
|
1298
1294
|
event_data["named_spans"] = {k: span.pickle_self() for k, span in self.named_spans.items()}
|
1299
1295
|
if move_heights and disp_new_idxs and (not data_indexes or self.all_rows_displayed):
|
1300
1296
|
self.deselect("all", run_binding=False, redraw=False)
|
@@ -1485,11 +1481,11 @@ class MainTable(tk.Canvas):
|
|
1485
1481
|
def undo(self, event: object = None) -> None | EventDataDict:
|
1486
1482
|
if not self.undo_stack:
|
1487
1483
|
return
|
1488
|
-
modification =
|
1484
|
+
modification = self.undo_stack[-1]["data"]
|
1489
1485
|
if not try_binding(self.extra_begin_ctrl_z_func, modification, "begin_undo"):
|
1490
1486
|
return
|
1491
1487
|
event_data = self.undo_modification_invert_event(modification)
|
1492
|
-
self.redo_stack.append(
|
1488
|
+
self.redo_stack.append(stored_event_dict(event_data))
|
1493
1489
|
self.undo_stack.pop()
|
1494
1490
|
self.sheet_modified(event_data, purge_redo=False)
|
1495
1491
|
try_binding(self.extra_end_ctrl_z_func, event_data, "end_undo")
|
@@ -1499,11 +1495,11 @@ class MainTable(tk.Canvas):
|
|
1499
1495
|
def redo(self, event: object = None) -> None | EventDataDict:
|
1500
1496
|
if not self.redo_stack:
|
1501
1497
|
return
|
1502
|
-
modification =
|
1498
|
+
modification = self.redo_stack[-1]["data"]
|
1503
1499
|
if not try_binding(self.extra_begin_ctrl_z_func, modification, "begin_redo"):
|
1504
1500
|
return
|
1505
1501
|
event_data = self.undo_modification_invert_event(modification, name="redo")
|
1506
|
-
self.undo_stack.append(
|
1502
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
1507
1503
|
self.redo_stack.pop()
|
1508
1504
|
self.sheet_modified(event_data, purge_redo=False)
|
1509
1505
|
try_binding(self.extra_end_ctrl_z_func, event_data, "end_redo")
|
@@ -1538,8 +1534,6 @@ class MainTable(tk.Canvas):
|
|
1538
1534
|
return event_data
|
1539
1535
|
|
1540
1536
|
def restore_options_named_spans(self, modification: EventDataDict) -> None:
|
1541
|
-
if not isinstance(modification["options"], dict):
|
1542
|
-
modification["options"] = unpickle_obj(modification["options"])
|
1543
1537
|
if "cell_options" in modification["options"]:
|
1544
1538
|
self.cell_options = modification["options"]["cell_options"]
|
1545
1539
|
if "column_options" in modification["options"]:
|
@@ -2996,8 +2990,7 @@ class MainTable(tk.Canvas):
|
|
2996
2990
|
self.being_drawn_item = True
|
2997
2991
|
self.being_drawn_item = self.add_selection(rowsel, colsel, set_as_current=True, run_binding_func=False)
|
2998
2992
|
sel_event = self.get_select_event(being_drawn_item=self.being_drawn_item)
|
2999
|
-
|
3000
|
-
self.ctrl_selection_binding_func(sel_event)
|
2993
|
+
try_binding(self.ctrl_selection_binding_func, sel_event)
|
3001
2994
|
self.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True, redraw_table=True)
|
3002
2995
|
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
3003
2996
|
elif not self.ctrl_select_enabled:
|
@@ -3026,8 +3019,7 @@ class MainTable(tk.Canvas):
|
|
3026
3019
|
)
|
3027
3020
|
self.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True, redraw_table=True)
|
3028
3021
|
sel_event = self.get_select_event(being_drawn_item=self.being_drawn_item)
|
3029
|
-
|
3030
|
-
self.shift_selection_binding_func(sel_event)
|
3022
|
+
try_binding(self.shift_selection_binding_func, sel_event)
|
3031
3023
|
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
3032
3024
|
elif not self.ctrl_select_enabled:
|
3033
3025
|
self.shift_b1_press(event)
|
@@ -3056,8 +3048,7 @@ class MainTable(tk.Canvas):
|
|
3056
3048
|
)
|
3057
3049
|
self.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True, redraw_table=True)
|
3058
3050
|
sel_event = self.get_select_event(being_drawn_item=self.being_drawn_item)
|
3059
|
-
|
3060
|
-
self.shift_selection_binding_func(sel_event)
|
3051
|
+
try_binding(self.shift_selection_binding_func, sel_event)
|
3061
3052
|
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
3062
3053
|
|
3063
3054
|
def get_shift_select_box(self, min_r: int, rowsel: int, min_c: int, colsel: int):
|
@@ -3122,8 +3113,7 @@ class MainTable(tk.Canvas):
|
|
3122
3113
|
)
|
3123
3114
|
need_redraw = True
|
3124
3115
|
sel_event = self.get_select_event(being_drawn_item=self.being_drawn_item)
|
3125
|
-
|
3126
|
-
self.drag_selection_binding_func(sel_event)
|
3116
|
+
try_binding(self.drag_selection_binding_func, sel_event)
|
3127
3117
|
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
3128
3118
|
if self.scroll_if_event_offscreen(event):
|
3129
3119
|
need_redraw = True
|
@@ -3165,8 +3155,7 @@ class MainTable(tk.Canvas):
|
|
3165
3155
|
)
|
3166
3156
|
need_redraw = True
|
3167
3157
|
sel_event = self.get_select_event(being_drawn_item=self.being_drawn_item)
|
3168
|
-
|
3169
|
-
self.drag_selection_binding_func(sel_event)
|
3158
|
+
try_binding(self.drag_selection_binding_func, sel_event)
|
3170
3159
|
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
3171
3160
|
if self.scroll_if_event_offscreen(event):
|
3172
3161
|
need_redraw = True
|
@@ -3193,8 +3182,7 @@ class MainTable(tk.Canvas):
|
|
3193
3182
|
),
|
3194
3183
|
)
|
3195
3184
|
sel_event = self.get_select_event(being_drawn_item=self.being_drawn_item)
|
3196
|
-
|
3197
|
-
self.drag_selection_binding_func(sel_event)
|
3185
|
+
try_binding(self.drag_selection_binding_func, sel_event)
|
3198
3186
|
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
3199
3187
|
else:
|
3200
3188
|
self.being_drawn_item = None
|
@@ -4539,7 +4527,7 @@ class MainTable(tk.Canvas):
|
|
4539
4527
|
event_data=event_data,
|
4540
4528
|
)
|
4541
4529
|
if self.undo_enabled:
|
4542
|
-
self.undo_stack.append(
|
4530
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
4543
4531
|
self.refresh()
|
4544
4532
|
try_binding(self.extra_end_insert_cols_rc_func, event_data, "end_add_columns")
|
4545
4533
|
self.sheet_modified(event_data)
|
@@ -4674,7 +4662,7 @@ class MainTable(tk.Canvas):
|
|
4674
4662
|
event_data=event_data,
|
4675
4663
|
)
|
4676
4664
|
if self.undo_enabled:
|
4677
|
-
self.undo_stack.append(
|
4665
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
4678
4666
|
self.refresh()
|
4679
4667
|
try_binding(self.extra_end_insert_rows_rc_func, event_data, "end_add_rows")
|
4680
4668
|
self.sheet_modified(event_data)
|
@@ -4778,26 +4766,24 @@ class MainTable(tk.Canvas):
|
|
4778
4766
|
}
|
4779
4767
|
return rows, index_data, heights
|
4780
4768
|
|
4781
|
-
def
|
4782
|
-
return
|
4783
|
-
|
4784
|
-
|
4785
|
-
|
4786
|
-
|
4787
|
-
|
4788
|
-
|
4789
|
-
|
4790
|
-
|
4791
|
-
|
4792
|
-
}
|
4793
|
-
)
|
4769
|
+
def copy_options(self) -> dict:
|
4770
|
+
return {
|
4771
|
+
"cell_options": dict(self.cell_options),
|
4772
|
+
"column_options": dict(self.col_options),
|
4773
|
+
"row_options": dict(self.row_options),
|
4774
|
+
"CH_cell_options": dict(self.CH.cell_options),
|
4775
|
+
"RI_cell_options": dict(self.RI.cell_options),
|
4776
|
+
"tagged_cells": {f"{tag}": set(s) for tag, s in self.tagged_cells.items()},
|
4777
|
+
"tagged_rows": {f"{tag}": set(s) for tag, s in self.tagged_rows.items()},
|
4778
|
+
"tagged_columns": {f"{tag}": set(s) for tag, s in self.tagged_columns.items()},
|
4779
|
+
}
|
4794
4780
|
|
4795
4781
|
def delete_columns_data(self, cols: list, event_data: dict) -> EventDataDict:
|
4796
4782
|
self.mouseclick_outside_editor_or_dropdown_all_canvases()
|
4797
4783
|
event_data["deleted"]["displayed_columns"] = (
|
4798
4784
|
list(self.displayed_columns) if not isinstance(self.displayed_columns, int) else int(self.displayed_columns)
|
4799
4785
|
)
|
4800
|
-
event_data["options"] = self.
|
4786
|
+
event_data["options"] = self.copy_options()
|
4801
4787
|
event_data["named_spans"] = {k: span.pickle_self() for k, span in self.named_spans.items()}
|
4802
4788
|
for datacn in reversed(cols):
|
4803
4789
|
for rn in range(len(self.data)):
|
@@ -4849,7 +4835,7 @@ class MainTable(tk.Canvas):
|
|
4849
4835
|
data_cols = selected if self.all_columns_displayed else [self.displayed_columns[c] for c in selected]
|
4850
4836
|
event_data = self.delete_columns_data(data_cols, event_data)
|
4851
4837
|
if self.undo_enabled:
|
4852
|
-
self.undo_stack.append(
|
4838
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
4853
4839
|
self.deselect("all")
|
4854
4840
|
try_binding(self.extra_end_del_cols_rc_func, event_data, "end_delete_columns")
|
4855
4841
|
self.sheet_modified(event_data)
|
@@ -4859,7 +4845,7 @@ class MainTable(tk.Canvas):
|
|
4859
4845
|
event_data["deleted"]["displayed_rows"] = (
|
4860
4846
|
list(self.displayed_rows) if not isinstance(self.displayed_rows, int) else int(self.displayed_rows)
|
4861
4847
|
)
|
4862
|
-
event_data["options"] = self.
|
4848
|
+
event_data["options"] = self.copy_options()
|
4863
4849
|
event_data["named_spans"] = {k: span.pickle_self() for k, span in self.named_spans.items()}
|
4864
4850
|
for datarn in reversed(rows):
|
4865
4851
|
event_data["deleted"]["rows"][datarn] = self.data.pop(datarn)
|
@@ -4905,7 +4891,7 @@ class MainTable(tk.Canvas):
|
|
4905
4891
|
data_rows = selected if self.all_rows_displayed else [self.displayed_rows[r] for r in selected]
|
4906
4892
|
event_data = self.delete_rows_data(data_rows, event_data)
|
4907
4893
|
if self.undo_enabled:
|
4908
|
-
self.undo_stack.append(
|
4894
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
4909
4895
|
self.deselect("all")
|
4910
4896
|
try_binding(self.extra_end_del_rows_rc_func, event_data, "end_delete_rows")
|
4911
4897
|
self.sheet_modified(event_data)
|
@@ -5184,6 +5170,12 @@ class MainTable(tk.Canvas):
|
|
5184
5170
|
kwargs = self.progress_bars[(datarn, datacn)]
|
5185
5171
|
else:
|
5186
5172
|
kwargs = self.get_cell_kwargs(datarn, datacn, key="highlight")
|
5173
|
+
if not kwargs and (self.PAR.ops.alternate_color and r % 2):
|
5174
|
+
kwargs = Highlight(
|
5175
|
+
bg=self.PAR.ops.alternate_color,
|
5176
|
+
fg=None,
|
5177
|
+
end=False,
|
5178
|
+
)
|
5187
5179
|
if kwargs:
|
5188
5180
|
if kwargs[0] is not None:
|
5189
5181
|
c_1 = kwargs[0] if kwargs[0].startswith("#") else color_map[kwargs[0]]
|
@@ -5862,7 +5854,13 @@ class MainTable(tk.Canvas):
|
|
5862
5854
|
if draw_y + self.table_half_txt_height - 1 > rbotgridln:
|
5863
5855
|
break
|
5864
5856
|
if redraw_table:
|
5865
|
-
for dct in (
|
5857
|
+
for dct in (
|
5858
|
+
self.hidd_text,
|
5859
|
+
self.hidd_high,
|
5860
|
+
self.hidd_grid,
|
5861
|
+
self.hidd_dropdown,
|
5862
|
+
self.hidd_checkbox,
|
5863
|
+
):
|
5866
5864
|
for iid, showing in dct.items():
|
5867
5865
|
if showing:
|
5868
5866
|
self.itemconfig(iid, state="hidden")
|
@@ -7271,7 +7269,7 @@ class MainTable(tk.Canvas):
|
|
7271
7269
|
)
|
7272
7270
|
if not check_input_valid or self.input_valid_for_cell(datarn, datacn, value):
|
7273
7271
|
if self.undo_enabled and undo:
|
7274
|
-
self.undo_stack.append(
|
7272
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
7275
7273
|
self.set_cell_data(datarn, datacn, value)
|
7276
7274
|
if cell_resize and self.PAR.ops.cell_auto_resize_enabled:
|
7277
7275
|
self.set_cell_size_to_text(r, c, only_if_too_small=True, redraw=redraw, run_binding=True)
|
tksheet/row_index.py
CHANGED
@@ -41,7 +41,7 @@ from .functions import (
|
|
41
41
|
is_contiguous,
|
42
42
|
new_tk_event,
|
43
43
|
num2alpha,
|
44
|
-
|
44
|
+
stored_event_dict,
|
45
45
|
rounded_box_coords,
|
46
46
|
try_binding,
|
47
47
|
)
|
@@ -66,8 +66,7 @@ from .vars import (
|
|
66
66
|
|
67
67
|
class RowIndex(tk.Canvas):
|
68
68
|
def __init__(self, *args, **kwargs):
|
69
|
-
|
70
|
-
self,
|
69
|
+
super().__init__(
|
71
70
|
kwargs["parent"],
|
72
71
|
background=kwargs["parent"].ops.index_bg,
|
73
72
|
highlightthickness=0,
|
@@ -879,7 +878,7 @@ class RowIndex(tk.Canvas):
|
|
879
878
|
"displayed": disp_new_idxs,
|
880
879
|
}
|
881
880
|
if self.MT.undo_enabled:
|
882
|
-
self.MT.undo_stack.append(
|
881
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
883
882
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
884
883
|
try_binding(self.ri_extra_end_drag_drop_func, event_data, "end_move_rows")
|
885
884
|
self.MT.sheet_modified(event_data)
|
@@ -2345,7 +2344,7 @@ class RowIndex(tk.Canvas):
|
|
2345
2344
|
self.fix_index(datarn)
|
2346
2345
|
if not check_input_valid or self.input_valid_for_cell(datarn, value):
|
2347
2346
|
if self.MT.undo_enabled and undo:
|
2348
|
-
self.MT.undo_stack.append(
|
2347
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
2349
2348
|
self.set_cell_data(datarn=datarn, value=value)
|
2350
2349
|
edited = True
|
2351
2350
|
if edited and cell_resize and self.PAR.ops.cell_auto_resize_enabled:
|
tksheet/sheet.py
CHANGED
@@ -48,7 +48,7 @@ from .functions import (
|
|
48
48
|
key_to_span,
|
49
49
|
new_tk_event,
|
50
50
|
num2alpha,
|
51
|
-
|
51
|
+
stored_event_dict,
|
52
52
|
pop_positions,
|
53
53
|
set_align,
|
54
54
|
set_readonly,
|
@@ -289,8 +289,7 @@ class Sheet(tk.Frame):
|
|
289
289
|
row_index_width: int | None = None,
|
290
290
|
expand_sheet_if_paste_too_big: bool | None = None,
|
291
291
|
) -> None:
|
292
|
-
|
293
|
-
self,
|
292
|
+
super().__init__(
|
294
293
|
parent,
|
295
294
|
background=frame_bg,
|
296
295
|
highlightthickness=outline_thickness,
|
@@ -1843,7 +1842,7 @@ class Sheet(tk.Frame):
|
|
1843
1842
|
or event_data["added"]["rows"]
|
1844
1843
|
):
|
1845
1844
|
if undo is True or (undo is None and span.undo):
|
1846
|
-
self.MT.undo_stack.append(
|
1845
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
1847
1846
|
if emit_event is True or (emit_event is None and span.emit_event):
|
1848
1847
|
self.emit_event("<<SheetModified>>", event_data)
|
1849
1848
|
self.set_refresh_timer(redraw)
|
@@ -1883,7 +1882,7 @@ class Sheet(tk.Frame):
|
|
1883
1882
|
event_data = clear_t(r, c, quick_tval(r, c), event_data)
|
1884
1883
|
if event_data["cells"]["table"] or event_data["cells"]["header"] or event_data["cells"]["index"]:
|
1885
1884
|
if undo is True or (undo is None and span.undo):
|
1886
|
-
self.MT.undo_stack.append(
|
1885
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
1887
1886
|
if emit_event is True or (emit_event is None and span.emit_event):
|
1888
1887
|
self.emit_event("<<SheetModified>>", event_data)
|
1889
1888
|
self.set_refresh_timer(redraw)
|
@@ -2052,7 +2051,7 @@ class Sheet(tk.Frame):
|
|
2052
2051
|
push_ops=push_ops,
|
2053
2052
|
)
|
2054
2053
|
if undo:
|
2055
|
-
self.MT.undo_stack.append(
|
2054
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
2056
2055
|
if emit_event:
|
2057
2056
|
self.emit_event("<<SheetModified>>", event_data)
|
2058
2057
|
self.set_refresh_timer(redraw)
|
@@ -2147,7 +2146,7 @@ class Sheet(tk.Frame):
|
|
2147
2146
|
push_ops=push_ops,
|
2148
2147
|
)
|
2149
2148
|
if undo:
|
2150
|
-
self.MT.undo_stack.append(
|
2149
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
2151
2150
|
if emit_event:
|
2152
2151
|
self.emit_event("<<SheetModified>>", event_data)
|
2153
2152
|
self.set_refresh_timer(redraw)
|
@@ -2223,7 +2222,7 @@ class Sheet(tk.Frame):
|
|
2223
2222
|
event_data,
|
2224
2223
|
)
|
2225
2224
|
if undo:
|
2226
|
-
self.MT.undo_stack.append(
|
2225
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
2227
2226
|
if emit_event:
|
2228
2227
|
self.emit_event("<<SheetModified>>", event_data)
|
2229
2228
|
self.set_refresh_timer(redraw)
|
@@ -2265,7 +2264,7 @@ class Sheet(tk.Frame):
|
|
2265
2264
|
event_data,
|
2266
2265
|
)
|
2267
2266
|
if undo:
|
2268
|
-
self.MT.undo_stack.append(
|
2267
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
2269
2268
|
if emit_event:
|
2270
2269
|
self.emit_event("<<SheetModified>>", event_data)
|
2271
2270
|
self.set_refresh_timer(redraw)
|
@@ -2362,7 +2361,7 @@ class Sheet(tk.Frame):
|
|
2362
2361
|
data_indexes=data_indexes,
|
2363
2362
|
)
|
2364
2363
|
if undo:
|
2365
|
-
self.MT.undo_stack.append(
|
2364
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
2366
2365
|
if emit_event:
|
2367
2366
|
self.emit_event("<<SheetModified>>", event_data)
|
2368
2367
|
self.set_refresh_timer(redraw)
|
@@ -2392,7 +2391,7 @@ class Sheet(tk.Frame):
|
|
2392
2391
|
data_indexes=data_indexes,
|
2393
2392
|
)
|
2394
2393
|
if undo:
|
2395
|
-
self.MT.undo_stack.append(
|
2394
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
2396
2395
|
if emit_event:
|
2397
2396
|
self.emit_event("<<SheetModified>>", event_data)
|
2398
2397
|
self.set_refresh_timer(redraw)
|
@@ -2419,7 +2418,7 @@ class Sheet(tk.Frame):
|
|
2419
2418
|
data_indexes=data_indexes,
|
2420
2419
|
)
|
2421
2420
|
if undo:
|
2422
|
-
self.MT.undo_stack.append(
|
2421
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
2423
2422
|
if emit_event:
|
2424
2423
|
self.emit_event("<<SheetModified>>", event_data)
|
2425
2424
|
self.set_refresh_timer(redraw)
|
@@ -2446,7 +2445,7 @@ class Sheet(tk.Frame):
|
|
2446
2445
|
data_indexes=data_indexes,
|
2447
2446
|
)
|
2448
2447
|
if undo:
|
2449
|
-
self.MT.undo_stack.append(
|
2448
|
+
self.MT.undo_stack.append(stored_event_dict(event_data))
|
2450
2449
|
if emit_event:
|
2451
2450
|
self.emit_event("<<SheetModified>>", event_data)
|
2452
2451
|
self.set_refresh_timer(redraw)
|
tksheet/text_editor.py
CHANGED
@@ -22,8 +22,7 @@ class TextEditorTkText(tk.Text):
|
|
22
22
|
parent: tk.Misc,
|
23
23
|
newline_binding: None | Callable = None,
|
24
24
|
) -> None:
|
25
|
-
|
26
|
-
self,
|
25
|
+
super().__init__(
|
27
26
|
parent,
|
28
27
|
spacing1=0,
|
29
28
|
spacing2=1,
|
@@ -170,8 +169,7 @@ class TextEditor(tk.Frame):
|
|
170
169
|
parent: tk.Misc,
|
171
170
|
newline_binding: None | Callable = None,
|
172
171
|
) -> None:
|
173
|
-
|
174
|
-
self,
|
172
|
+
super().__init__(
|
175
173
|
parent,
|
176
174
|
width=0,
|
177
175
|
height=0,
|
@@ -0,0 +1,20 @@
|
|
1
|
+
tksheet/__init__.py,sha256=1KjTw8xxFD3fY1W7O-p1bo6i-ZvwEUmORhaIS3kSJlI,2237
|
2
|
+
tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
|
3
|
+
tksheet/column_headers.py,sha256=ekuZjXjTHuyRsog5rNMBCJU3Fmj6OgeRVgKEDysjEaw,102184
|
4
|
+
tksheet/formatters.py,sha256=_exO2KnjtcnE_MVWLG1ngOZ-wmrXZhuh7uEi2iPs1Tk,10546
|
5
|
+
tksheet/functions.py,sha256=1lVrGCnNUUorh68bcFJMqSn3C4_OFH7Y-c4fEalDKc4,42413
|
6
|
+
tksheet/main_table.py,sha256=7I0qPQbeWpEzY8LCaZrUvAygdDWkqFEF8a0jX-CgWCc,332201
|
7
|
+
tksheet/other_classes.py,sha256=eB-kDTJjYOe5QcSA25Bg9JS2JimZau2fAvyz8rcBT0Q,15631
|
8
|
+
tksheet/row_index.py,sha256=5auK_MfMnT-tEO8QwHTa74WT48nXvj9bqVmgtnn8QjQ,111171
|
9
|
+
tksheet/sheet.py,sha256=RgP2MhOaxNPwIAa2cXwHNUGbJZJRib6hkvMfoph0nWA,283215
|
10
|
+
tksheet/sheet_options.py,sha256=XM3XSWWVnAOctP2z2_WkkXonoIT8_brXwJaSO0sFZbE,12788
|
11
|
+
tksheet/text_editor.py,sha256=pf9o3JuRI6cbr7ZoVfaookCBJsmRBgGDubdtShLZXBA,7064
|
12
|
+
tksheet/themes.py,sha256=OhUzZL4JH0YPhb2f1F62CcJFzhVsEvNxF-ObC9zVb44,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.21.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
17
|
+
tksheet-7.2.21.dist-info/METADATA,sha256=8O8nElk2NXgmuIFPftStjlzYkjSk4Kz-7VLqkbCf6Ls,6476
|
18
|
+
tksheet-7.2.21.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
19
|
+
tksheet-7.2.21.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
20
|
+
tksheet-7.2.21.dist-info/RECORD,,
|
tksheet-7.2.19.dist-info/RECORD
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
tksheet/__init__.py,sha256=UsF3O0h1sHVKInJEx2LacaojWXG47p8uUduX7lWjt7o,2165
|
2
|
-
tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
|
3
|
-
tksheet/column_headers.py,sha256=9ub7pF0F3HJppOaJ1y1_Ri6F4l7YYO9eo6XeQCbgP00,102208
|
4
|
-
tksheet/formatters.py,sha256=DfsekFfOiNKZuIqk1xD7IUiO8W9HIeCSaB6zMwsDv40,10051
|
5
|
-
tksheet/functions.py,sha256=P7nyiL5Q4nGmWo6CgPz0g2Vn56QclmOkniPDRFUNfTI,42768
|
6
|
-
tksheet/main_table.py,sha256=me7dkHYma49b16e4ygc_jBum3JfGG-j4oK1dbNQb9xo,332431
|
7
|
-
tksheet/other_classes.py,sha256=eB-kDTJjYOe5QcSA25Bg9JS2JimZau2fAvyz8rcBT0Q,15631
|
8
|
-
tksheet/row_index.py,sha256=Hcgqi04YFNx_0S4pMko8Jf7idIFRqJdlEEy_WCX0DvI,111195
|
9
|
-
tksheet/sheet.py,sha256=XuFqVOljwrdM5IYpm5NwT_oyVn9iOkPKABtQ2GQ8ziM,283246
|
10
|
-
tksheet/sheet_options.py,sha256=XM3XSWWVnAOctP2z2_WkkXonoIT8_brXwJaSO0sFZbE,12788
|
11
|
-
tksheet/text_editor.py,sha256=lmmHOPb11S8tlNtC10vijF1QqVB5Ts2hUKnGJd_JkWA,7103
|
12
|
-
tksheet/themes.py,sha256=OhUzZL4JH0YPhb2f1F62CcJFzhVsEvNxF-ObC9zVb44,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.19.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
17
|
-
tksheet-7.2.19.dist-info/METADATA,sha256=Df7jqZRsrUMBTHgI-1_fIncmszk1asde1sohy3z8YXw,6476
|
18
|
-
tksheet-7.2.19.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
|
19
|
-
tksheet-7.2.19.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
20
|
-
tksheet-7.2.19.dist-info/RECORD,,
|
File without changes
|
File without changes
|