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 CHANGED
@@ -4,7 +4,7 @@
4
4
  tksheet - A Python tkinter table widget
5
5
  """
6
6
 
7
- __version__ = "7.2.19"
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
- pickled_event_dict,
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
- tk.Canvas.__init__(
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(pickled_event_dict(event_data))
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(pickled_event_dict(event_data))
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 to_bool(val: object, **kwargs):
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 = to_float,
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 pickled_event_dict(d: DotDict) -> DotDict:
214
- return DotDict(name=d["eventname"], data=pickle_compress(DotDict({k: v for k, v in d.items() if k != "widget"})))
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
- pickle_obj,
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
- tk.Canvas.__init__(
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
- self.sheet_modified(event_data)
690
- self.PAR.emit_event("<<Cut>>", event_data)
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
- self.sheet_modified(event_data)
955
- self.PAR.emit_event("<<Paste>>", event_data)
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.undo_stack.append(pickled_event_dict(event_data))
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
- self.refresh()
994
- self.sheet_modified(event_data)
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.pickle_options()
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.pickle_options()
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 = decompress_load(self.undo_stack[-1]["data"])
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(pickled_event_dict(event_data))
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 = decompress_load(self.redo_stack[-1]["data"])
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(pickled_event_dict(event_data))
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
- if self.ctrl_selection_binding_func:
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
- if self.shift_selection_binding_func:
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
- if self.shift_selection_binding_func:
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
- if self.drag_selection_binding_func:
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
- if self.drag_selection_binding_func:
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
- if self.drag_selection_binding_func:
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(pickled_event_dict(event_data))
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(pickled_event_dict(event_data))
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 pickle_options(self) -> bytes:
4782
- return pickle_obj(
4783
- {
4784
- "cell_options": self.cell_options,
4785
- "column_options": self.col_options,
4786
- "row_options": self.row_options,
4787
- "CH_cell_options": self.CH.cell_options,
4788
- "RI_cell_options": self.RI.cell_options,
4789
- "tagged_cells": self.tagged_cells,
4790
- "tagged_rows": self.tagged_rows,
4791
- "tagged_columns": self.tagged_columns,
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.pickle_options()
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(pickled_event_dict(event_data))
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.pickle_options()
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(pickled_event_dict(event_data))
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 (self.hidd_text, self.hidd_high, self.hidd_grid, self.hidd_dropdown, self.hidd_checkbox):
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(pickled_event_dict(event_data))
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
- pickled_event_dict,
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
- tk.Canvas.__init__(
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(pickled_event_dict(event_data))
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(pickled_event_dict(event_data))
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
- pickled_event_dict,
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
- tk.Frame.__init__(
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(pickled_event_dict(event_data))
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(pickled_event_dict(event_data))
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(pickled_event_dict(event_data))
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(pickled_event_dict(event_data))
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(pickled_event_dict(event_data))
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(pickled_event_dict(event_data))
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(pickled_event_dict(event_data))
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(pickled_event_dict(event_data))
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(pickled_event_dict(event_data))
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(pickled_event_dict(event_data))
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
- tk.Text.__init__(
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
- tk.Frame.__init__(
174
- self,
172
+ super().__init__(
175
173
  parent,
176
174
  width=0,
177
175
  height=0,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tksheet
3
- Version: 7.2.19
3
+ Version: 7.2.21
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
@@ -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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.2.0)
2
+ Generator: setuptools (75.3.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -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,,