tksheet 7.1.7__py3-none-any.whl → 7.1.9__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 +3 -5
- tksheet/column_headers.py +12 -4
- tksheet/functions.py +8 -5
- tksheet/main_table.py +131 -229
- tksheet/other_classes.py +2 -5
- tksheet/row_index.py +12 -4
- tksheet/sheet.py +139 -61
- tksheet/vars.py +10 -0
- {tksheet-7.1.7.dist-info → tksheet-7.1.9.dist-info}/METADATA +1 -1
- tksheet-7.1.9.dist-info/RECORD +20 -0
- tksheet/listbox.py +0 -19
- tksheet-7.1.7.dist-info/RECORD +0 -21
- {tksheet-7.1.7.dist-info → tksheet-7.1.9.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.1.7.dist-info → tksheet-7.1.9.dist-info}/WHEEL +0 -0
- {tksheet-7.1.7.dist-info → tksheet-7.1.9.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.1.
|
7
|
+
__version__ = "7.1.9"
|
8
8
|
|
9
9
|
from .colors import (
|
10
10
|
color_map,
|
@@ -35,13 +35,13 @@ from .functions import (
|
|
35
35
|
alpha2idx,
|
36
36
|
alpha2num,
|
37
37
|
consecutive_chunks,
|
38
|
+
consecutive_ranges,
|
38
39
|
data_to_displayed_idxs,
|
39
40
|
displayed_to_data_idxs,
|
40
41
|
dropdown_search_function,
|
41
42
|
event_dict,
|
42
43
|
get_checkbox_dict,
|
43
44
|
get_checkbox_kwargs,
|
44
|
-
rounded_box_coords,
|
45
45
|
get_dropdown_dict,
|
46
46
|
get_dropdown_kwargs,
|
47
47
|
get_index_of_gap_in_sorted_integer_seq_forward,
|
@@ -53,12 +53,10 @@ from .functions import (
|
|
53
53
|
move_elements_by_mapping,
|
54
54
|
move_elements_to,
|
55
55
|
num2alpha,
|
56
|
+
rounded_box_coords,
|
56
57
|
span_dict,
|
57
58
|
tksheet_type_error,
|
58
59
|
)
|
59
|
-
from .listbox import (
|
60
|
-
ListBox,
|
61
|
-
)
|
62
60
|
from .main_table import MainTable
|
63
61
|
from .other_classes import (
|
64
62
|
DotDict,
|
tksheet/column_headers.py
CHANGED
@@ -23,9 +23,9 @@ from .functions import (
|
|
23
23
|
consecutive_ranges,
|
24
24
|
ev_stack_dict,
|
25
25
|
event_dict,
|
26
|
-
rounded_box_coords,
|
27
26
|
get_n2a,
|
28
27
|
is_contiguous,
|
28
|
+
rounded_box_coords,
|
29
29
|
try_binding,
|
30
30
|
)
|
31
31
|
from .other_classes import (
|
@@ -41,6 +41,7 @@ from .vars import (
|
|
41
41
|
USER_OS,
|
42
42
|
rc_binding,
|
43
43
|
symbols_set,
|
44
|
+
text_editor_to_unbind,
|
44
45
|
)
|
45
46
|
|
46
47
|
|
@@ -942,7 +943,7 @@ class ColumnHeaders(tk.Canvas):
|
|
942
943
|
y1,
|
943
944
|
x2,
|
944
945
|
y2,
|
945
|
-
radius=
|
946
|
+
radius=8 if self.PAR.ops.rounded_boxes else 0,
|
946
947
|
)
|
947
948
|
if isinstance(iid, int):
|
948
949
|
self.coords(iid, coords)
|
@@ -1663,6 +1664,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1663
1664
|
key=extra_func_key,
|
1664
1665
|
value=text,
|
1665
1666
|
loc=c,
|
1667
|
+
column=c,
|
1666
1668
|
boxes=self.MT.get_boxes(),
|
1667
1669
|
selected=self.MT.selected,
|
1668
1670
|
)
|
@@ -1726,12 +1728,14 @@ class ColumnHeaders(tk.Canvas):
|
|
1726
1728
|
self.text_editor.tktext.focus_set()
|
1727
1729
|
self.text_editor.window.scroll_to_bottom()
|
1728
1730
|
self.text_editor.tktext.bind("<Alt-Return>", lambda _x: self.text_editor_newline_binding(c=c))
|
1731
|
+
self.text_editor.tktext.bind("<Alt-KP_Enter>", lambda _x: self.text_editor_newline_binding(c=c))
|
1729
1732
|
if USER_OS == "darwin":
|
1730
1733
|
self.text_editor.tktext.bind("<Option-Return>", lambda _x: self.text_editor_newline_binding(c=c))
|
1731
1734
|
for key, func in self.MT.text_editor_user_bound_keys.items():
|
1732
1735
|
self.text_editor.tktext.bind(key, func)
|
1733
1736
|
self.text_editor.tktext.bind("<Tab>", lambda _x: self.close_text_editor((c, "Tab")))
|
1734
1737
|
self.text_editor.tktext.bind("<Return>", lambda _x: self.close_text_editor((c, "Return")))
|
1738
|
+
self.text_editor.tktext.bind("<KP_Enter>", lambda _x: self.close_text_editor((c, "Return")))
|
1735
1739
|
if not dropdown:
|
1736
1740
|
self.text_editor.tktext.bind("<FocusOut>", lambda _x: self.close_text_editor((c, "FocusOut")))
|
1737
1741
|
self.text_editor.tktext.bind("<Escape>", lambda _x: self.close_text_editor((c, "Escape")))
|
@@ -1827,8 +1831,8 @@ class ColumnHeaders(tk.Canvas):
|
|
1827
1831
|
|
1828
1832
|
def hide_text_editor(self, reason: None | str = None) -> None:
|
1829
1833
|
if self.text_editor.open:
|
1830
|
-
for
|
1831
|
-
self.text_editor.tktext.unbind(
|
1834
|
+
for binding in text_editor_to_unbind:
|
1835
|
+
self.text_editor.tktext.unbind(binding)
|
1832
1836
|
self.itemconfig(self.text_editor.canvas_id, state="hidden")
|
1833
1837
|
self.text_editor.open = False
|
1834
1838
|
if reason == "Escape":
|
@@ -1862,6 +1866,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1862
1866
|
key=editor_info[1] if len(editor_info) >= 2 else "FocusOut",
|
1863
1867
|
value=text_editor_value,
|
1864
1868
|
loc=c,
|
1869
|
+
column=c,
|
1865
1870
|
boxes=self.MT.get_boxes(),
|
1866
1871
|
selected=self.MT.selected,
|
1867
1872
|
)
|
@@ -1970,6 +1975,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1970
1975
|
sheet=self.PAR.name,
|
1971
1976
|
value=self.text_editor.get(),
|
1972
1977
|
loc=c,
|
1978
|
+
column=c,
|
1973
1979
|
boxes=self.MT.get_boxes(),
|
1974
1980
|
selected=self.MT.selected,
|
1975
1981
|
),
|
@@ -2005,6 +2011,7 @@ class ColumnHeaders(tk.Canvas):
|
|
2005
2011
|
key="??",
|
2006
2012
|
value=selection,
|
2007
2013
|
loc=c,
|
2014
|
+
column=c,
|
2008
2015
|
boxes=self.MT.get_boxes(),
|
2009
2016
|
selected=self.MT.selected,
|
2010
2017
|
)
|
@@ -2230,6 +2237,7 @@ class ColumnHeaders(tk.Canvas):
|
|
2230
2237
|
key="??",
|
2231
2238
|
value=value,
|
2232
2239
|
loc=c,
|
2240
|
+
column=c,
|
2233
2241
|
boxes=self.MT.get_boxes(),
|
2234
2242
|
selected=self.MT.selected,
|
2235
2243
|
)
|
tksheet/functions.py
CHANGED
@@ -102,6 +102,8 @@ def event_dict(
|
|
102
102
|
key: None | str = None,
|
103
103
|
value: object = None,
|
104
104
|
loc: None | int | tuple[int] = None,
|
105
|
+
row: None | int = None,
|
106
|
+
column: None | int = None,
|
105
107
|
resized_rows: None | dict = None,
|
106
108
|
resized_columns: None | dict = None,
|
107
109
|
# resized_index: None, dict] = None,
|
@@ -147,6 +149,8 @@ def event_dict(
|
|
147
149
|
key="" if key is None else key,
|
148
150
|
value=None if value is None else value,
|
149
151
|
loc=tuple() if loc is None else loc,
|
152
|
+
row=row,
|
153
|
+
column=column,
|
150
154
|
resized=DotDict(
|
151
155
|
rows=DotDict() if resized_rows is None else resized_rows,
|
152
156
|
columns=DotDict() if resized_columns is None else resized_columns,
|
@@ -403,8 +407,8 @@ def index_exists(seq: Sequence[object], index: int) -> bool:
|
|
403
407
|
|
404
408
|
def move_elements_by_mapping(
|
405
409
|
seq: list[object],
|
406
|
-
new_idxs: dict,
|
407
|
-
old_idxs: dict,
|
410
|
+
new_idxs: dict[int, int],
|
411
|
+
old_idxs: dict[int, int],
|
408
412
|
) -> list[object]:
|
409
413
|
# move elements of a list around, displacing
|
410
414
|
# other elements based on mapping
|
@@ -472,8 +476,7 @@ def get_new_indexes(
|
|
472
476
|
|
473
477
|
|
474
478
|
def insert_items(seq: list | tuple, to_insert: dict, seq_len_func: Callable | None = None) -> list:
|
475
|
-
#
|
476
|
-
# using a dict of reverse sorted order of
|
479
|
+
# inserts many items into a list using a dict of reverse sorted order of
|
477
480
|
# {index: value, index: value, ...}
|
478
481
|
res = []
|
479
482
|
extended = 0
|
@@ -611,7 +614,7 @@ def try_binding(
|
|
611
614
|
event: dict,
|
612
615
|
new_name: None | str = None,
|
613
616
|
) -> bool:
|
614
|
-
if binding
|
617
|
+
if binding:
|
615
618
|
try:
|
616
619
|
if new_name is None:
|
617
620
|
binding(event)
|