tksheet 7.2.19__py3-none-any.whl → 7.2.20__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.20"
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
@@ -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,
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/main_table.py CHANGED
@@ -115,8 +115,7 @@ from .vars import (
115
115
 
116
116
  class MainTable(tk.Canvas):
117
117
  def __init__(self, *args, **kwargs):
118
- tk.Canvas.__init__(
119
- self,
118
+ super().__init__(
120
119
  kwargs["parent"],
121
120
  background=kwargs["parent"].ops.table_bg,
122
121
  highlightthickness=0,
@@ -671,8 +670,6 @@ class MainTable(tk.Canvas):
671
670
  event_data,
672
671
  )
673
672
  writer.writerow(row)
674
- if event_data["cells"]["table"]:
675
- self.undo_stack.append(pickled_event_dict(event_data))
676
673
  self.clipboard_clear()
677
674
  if len(event_data["cells"]["table"]) == 1 and self.PAR.ops.to_clipboard_lineterminator not in next(
678
675
  iter(event_data["cells"]["table"].values())
@@ -685,9 +682,10 @@ class MainTable(tk.Canvas):
685
682
  for r1, c1, r2, c2 in boxes:
686
683
  self.show_ctrl_outline(canvas="table", start_cell=(c1, r1), end_cell=(c2, r2))
687
684
  if event_data["cells"]["table"]:
685
+ self.undo_stack.append(pickled_event_dict(event_data))
688
686
  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)
687
+ self.sheet_modified(event_data)
688
+ self.PAR.emit_event("<<Cut>>", event_data)
691
689
  return event_data
692
690
 
693
691
  def ctrl_v(self, event: object = None, validation: bool = True) -> None | EventDataDict:
@@ -937,8 +935,6 @@ class MainTable(tk.Canvas):
937
935
  )
938
936
  event_data["selection_boxes"] = self.get_boxes()
939
937
  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
938
  self.see(
943
939
  r=selected_r,
944
940
  c=selected_c,
@@ -950,9 +946,10 @@ class MainTable(tk.Canvas):
950
946
  )
951
947
  self.refresh()
952
948
  if event_data["cells"]["table"] or event_data["added"]["rows"] or event_data["added"]["columns"]:
949
+ self.undo_stack.append(pickled_event_dict(event_data))
953
950
  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)
951
+ self.sheet_modified(event_data)
952
+ self.PAR.emit_event("<<Paste>>", event_data)
956
953
  return event_data
957
954
 
958
955
  def delete_key(self, event: object = None, validation: bool = True) -> None | EventDataDict:
@@ -988,11 +985,11 @@ class MainTable(tk.Canvas):
988
985
  event_data,
989
986
  )
990
987
  if event_data["cells"]["table"]:
988
+ self.refresh()
991
989
  self.undo_stack.append(pickled_event_dict(event_data))
992
990
  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)
991
+ self.sheet_modified(event_data)
992
+ self.PAR.emit_event("<<Delete>>", event_data)
996
993
  return event_data
997
994
 
998
995
  def event_data_set_cell(self, datarn: int, datacn: int, value: object, event_data: dict) -> EventDataDict:
tksheet/row_index.py CHANGED
@@ -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,
tksheet/sheet.py CHANGED
@@ -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,
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.20
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=LFB6RLXByzaiFRyaeQYjbIcN5EE9e-vzpjzqMGJi6FA,2237
2
+ tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
3
+ tksheet/column_headers.py,sha256=LtWvogLqd76JpkG_Vp2XQKoyxqkDjfcx2w-hzVVWPi8,102187
4
+ tksheet/formatters.py,sha256=_exO2KnjtcnE_MVWLG1ngOZ-wmrXZhuh7uEi2iPs1Tk,10546
5
+ tksheet/functions.py,sha256=P7nyiL5Q4nGmWo6CgPz0g2Vn56QclmOkniPDRFUNfTI,42768
6
+ tksheet/main_table.py,sha256=x-3gKhAB-aZXSSmlu5cy2_FiUkNAQcWB40s3-41xRiU,332289
7
+ tksheet/other_classes.py,sha256=eB-kDTJjYOe5QcSA25Bg9JS2JimZau2fAvyz8rcBT0Q,15631
8
+ tksheet/row_index.py,sha256=5biQK0Rv3tq5nI98htOeiyEXYpuhiz_gQIWTYfrAJkM,111174
9
+ tksheet/sheet.py,sha256=Wd2PjnMh-NQl-8hkEbwLLrmHhLdz1lSJAznyyXRECiM,283226
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.20.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
17
+ tksheet-7.2.20.dist-info/METADATA,sha256=YGaZ0fM_GcLhPCZ_KWkL8JNGdEwYWcGx74ar1MUbJZI,6476
18
+ tksheet-7.2.20.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
19
+ tksheet-7.2.20.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
20
+ tksheet-7.2.20.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,,