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/other_classes.py
CHANGED
@@ -17,10 +17,8 @@ Box_t = namedtuple(
|
|
17
17
|
"Box_t",
|
18
18
|
"from_r from_c upto_r upto_c type_",
|
19
19
|
)
|
20
|
-
Box_st = namedtuple(
|
21
|
-
|
22
|
-
"coords type_"
|
23
|
-
)
|
20
|
+
Box_st = namedtuple("Box_st", "coords type_")
|
21
|
+
Loc = namedtuple("Loc", "row column")
|
24
22
|
|
25
23
|
Highlight = namedtuple(
|
26
24
|
"Highlight",
|
@@ -472,4 +470,3 @@ Selected = namedtuple(
|
|
472
470
|
None,
|
473
471
|
),
|
474
472
|
)
|
475
|
-
|
tksheet/row_index.py
CHANGED
@@ -31,10 +31,10 @@ from .functions import (
|
|
31
31
|
consecutive_chunks,
|
32
32
|
ev_stack_dict,
|
33
33
|
event_dict,
|
34
|
-
rounded_box_coords,
|
35
34
|
get_n2a,
|
36
35
|
is_contiguous,
|
37
36
|
num2alpha,
|
37
|
+
rounded_box_coords,
|
38
38
|
try_binding,
|
39
39
|
)
|
40
40
|
from .other_classes import (
|
@@ -51,6 +51,7 @@ from .vars import (
|
|
51
51
|
USER_OS,
|
52
52
|
rc_binding,
|
53
53
|
symbols_set,
|
54
|
+
text_editor_to_unbind,
|
54
55
|
)
|
55
56
|
|
56
57
|
|
@@ -965,7 +966,7 @@ class RowIndex(tk.Canvas):
|
|
965
966
|
y1,
|
966
967
|
x2,
|
967
968
|
y2,
|
968
|
-
radius=
|
969
|
+
radius=8 if self.PAR.ops.rounded_boxes else 0,
|
969
970
|
)
|
970
971
|
if isinstance(iid, int):
|
971
972
|
self.coords(iid, coords)
|
@@ -1755,6 +1756,7 @@ class RowIndex(tk.Canvas):
|
|
1755
1756
|
key=extra_func_key,
|
1756
1757
|
value=text,
|
1757
1758
|
loc=r,
|
1759
|
+
row=r,
|
1758
1760
|
boxes=self.MT.get_boxes(),
|
1759
1761
|
selected=self.MT.selected,
|
1760
1762
|
)
|
@@ -1816,12 +1818,14 @@ class RowIndex(tk.Canvas):
|
|
1816
1818
|
self.text_editor.tktext.focus_set()
|
1817
1819
|
self.text_editor.window.scroll_to_bottom()
|
1818
1820
|
self.text_editor.tktext.bind("<Alt-Return>", lambda _x: self.text_editor_newline_binding(r=r))
|
1821
|
+
self.text_editor.tktext.bind("<Alt-KP_Enter>", lambda _x: self.text_editor_newline_binding(r=r))
|
1819
1822
|
if USER_OS == "darwin":
|
1820
1823
|
self.text_editor.tktext.bind("<Option-Return>", lambda _x: self.text_editor_newline_binding(r=r))
|
1821
1824
|
for key, func in self.MT.text_editor_user_bound_keys.items():
|
1822
1825
|
self.text_editor.tktext.bind(key, func)
|
1823
1826
|
self.text_editor.tktext.bind("<Tab>", lambda _x: self.close_text_editor((r, "Tab")))
|
1824
1827
|
self.text_editor.tktext.bind("<Return>", lambda _x: self.close_text_editor((r, "Return")))
|
1828
|
+
self.text_editor.tktext.bind("<KP_Enter>", lambda _x: self.close_text_editor((r, "Return")))
|
1825
1829
|
if not dropdown:
|
1826
1830
|
self.text_editor.tktext.bind("<FocusOut>", lambda _x: self.close_text_editor((r, "FocusOut")))
|
1827
1831
|
self.text_editor.tktext.bind("<Escape>", lambda _x: self.close_text_editor((r, "Escape")))
|
@@ -1909,8 +1913,8 @@ class RowIndex(tk.Canvas):
|
|
1909
1913
|
|
1910
1914
|
def hide_text_editor(self, reason: None | str = None) -> None:
|
1911
1915
|
if self.text_editor.open:
|
1912
|
-
for
|
1913
|
-
self.text_editor.tktext.unbind(
|
1916
|
+
for binding in text_editor_to_unbind:
|
1917
|
+
self.text_editor.tktext.unbind(binding)
|
1914
1918
|
self.itemconfig(self.text_editor.canvas_id, state="hidden")
|
1915
1919
|
self.text_editor.open = False
|
1916
1920
|
if reason == "Escape":
|
@@ -1942,6 +1946,7 @@ class RowIndex(tk.Canvas):
|
|
1942
1946
|
key=editor_info[1] if len(editor_info) >= 2 else "FocusOut",
|
1943
1947
|
value=text_editor_value,
|
1944
1948
|
loc=r,
|
1949
|
+
row=r,
|
1945
1950
|
boxes=self.MT.get_boxes(),
|
1946
1951
|
selected=self.MT.selected,
|
1947
1952
|
)
|
@@ -2064,6 +2069,7 @@ class RowIndex(tk.Canvas):
|
|
2064
2069
|
sheet=self.PAR.name,
|
2065
2070
|
value=self.text_editor.get(),
|
2066
2071
|
loc=r,
|
2072
|
+
row=r,
|
2067
2073
|
boxes=self.MT.get_boxes(),
|
2068
2074
|
selected=self.MT.selected,
|
2069
2075
|
),
|
@@ -2100,6 +2106,7 @@ class RowIndex(tk.Canvas):
|
|
2100
2106
|
key="??",
|
2101
2107
|
value=selection,
|
2102
2108
|
loc=r,
|
2109
|
+
row=r,
|
2103
2110
|
boxes=self.MT.get_boxes(),
|
2104
2111
|
selected=self.MT.selected,
|
2105
2112
|
)
|
@@ -2322,6 +2329,7 @@ class RowIndex(tk.Canvas):
|
|
2322
2329
|
key="??",
|
2323
2330
|
value=value,
|
2324
2331
|
loc=r,
|
2332
|
+
row=r,
|
2325
2333
|
boxes=self.MT.get_boxes(),
|
2326
2334
|
selected=self.MT.selected,
|
2327
2335
|
)
|
tksheet/sheet.py
CHANGED
@@ -8,7 +8,6 @@ from itertools import accumulate, chain, islice, product
|
|
8
8
|
from timeit import default_timer
|
9
9
|
from tkinter import ttk
|
10
10
|
from typing import Literal
|
11
|
-
from warnings import warn as WARNING
|
12
11
|
|
13
12
|
from .column_headers import ColumnHeaders
|
14
13
|
from .functions import (
|
@@ -46,8 +45,9 @@ from .other_classes import (
|
|
46
45
|
FontTuple,
|
47
46
|
GeneratedMouseEvent,
|
48
47
|
Node,
|
49
|
-
Span,
|
50
48
|
Selected,
|
49
|
+
SelectionBox,
|
50
|
+
Span,
|
51
51
|
)
|
52
52
|
from .row_index import RowIndex
|
53
53
|
from .sheet_options import (
|
@@ -272,9 +272,6 @@ class Sheet(tk.Frame):
|
|
272
272
|
highlightbackground=outline_color,
|
273
273
|
highlightcolor=outline_color,
|
274
274
|
)
|
275
|
-
WARNING(
|
276
|
-
"There have been many changes from tksheet version 6.x.x to version 7.x.x. Please see the changelog for more information."
|
277
|
-
)
|
278
275
|
self.ops = new_sheet_options()
|
279
276
|
if column_width is not None:
|
280
277
|
default_column_width = column_width
|
@@ -614,7 +611,7 @@ class Sheet(tk.Frame):
|
|
614
611
|
for b, f in iterable:
|
615
612
|
b = b.lower()
|
616
613
|
|
617
|
-
if
|
614
|
+
if f is not None and b in emitted_events:
|
618
615
|
self.bind(b, f)
|
619
616
|
|
620
617
|
if b in (
|
@@ -1074,6 +1071,17 @@ class Sheet(tk.Frame):
|
|
1074
1071
|
self.MT.redo(event)
|
1075
1072
|
return self
|
1076
1073
|
|
1074
|
+
def has_focus(
|
1075
|
+
self,
|
1076
|
+
) -> bool:
|
1077
|
+
"""
|
1078
|
+
Check if any Sheet widgets have focus
|
1079
|
+
Includes child widgets such as scroll bars
|
1080
|
+
Returns bool
|
1081
|
+
"""
|
1082
|
+
widget = self.focus_get()
|
1083
|
+
return widget == self or any(widget == c for c in self.children.values())
|
1084
|
+
|
1077
1085
|
def focus_set(
|
1078
1086
|
self,
|
1079
1087
|
canvas: Literal[
|
@@ -1357,16 +1365,14 @@ class Sheet(tk.Frame):
|
|
1357
1365
|
if header:
|
1358
1366
|
if table:
|
1359
1367
|
res.extend(
|
1360
|
-
[
|
1361
|
-
|
1362
|
-
|
1363
|
-
for c in cols
|
1364
|
-
]
|
1368
|
+
[quick_hdata(c, get_displayed=hdisp)]
|
1369
|
+
+ [quick_tdata(r, c, get_displayed=tdisp, fmt_kw=fmt_kw) for r in rows]
|
1370
|
+
for c in cols
|
1365
1371
|
)
|
1366
1372
|
else:
|
1367
|
-
res.extend([
|
1373
|
+
res.extend([quick_hdata(c, get_displayed=hdisp)] for c in cols)
|
1368
1374
|
elif table:
|
1369
|
-
res.extend([
|
1375
|
+
res.extend([quick_tdata(r, c, get_displayed=tdisp, fmt_kw=fmt_kw) for r in rows] for c in cols)
|
1370
1376
|
elif not span.transposed:
|
1371
1377
|
if header:
|
1372
1378
|
if header and index:
|
@@ -1379,16 +1385,14 @@ class Sheet(tk.Frame):
|
|
1379
1385
|
if index:
|
1380
1386
|
if table:
|
1381
1387
|
res.extend(
|
1382
|
-
[
|
1383
|
-
|
1384
|
-
|
1385
|
-
for r in rows
|
1386
|
-
]
|
1388
|
+
[quick_idata(r, get_displayed=idisp)]
|
1389
|
+
+ [quick_tdata(r, c, get_displayed=tdisp, fmt_kw=fmt_kw) for c in cols]
|
1390
|
+
for r in rows
|
1387
1391
|
)
|
1388
1392
|
else:
|
1389
|
-
res.extend([
|
1393
|
+
res.extend([quick_idata(r, get_displayed=idisp)] for r in rows)
|
1390
1394
|
elif table:
|
1391
|
-
res.extend([
|
1395
|
+
res.extend([quick_tdata(r, c, get_displayed=tdisp, fmt_kw=fmt_kw) for c in cols] for r in rows)
|
1392
1396
|
if not span.ndim:
|
1393
1397
|
# it's a cell
|
1394
1398
|
if len(res) == 1 and len(res[0]) == 1:
|
@@ -1399,11 +1403,7 @@ class Sheet(tk.Frame):
|
|
1399
1403
|
# retrieving a list of index cells or
|
1400
1404
|
elif (index and not span.transposed and not table and not header) or (
|
1401
1405
|
# it's a column that's spread across sublists
|
1402
|
-
table
|
1403
|
-
and res
|
1404
|
-
and not span.transposed
|
1405
|
-
and len(res[0]) == 1
|
1406
|
-
and len(res[-1]) == 1
|
1406
|
+
table and res and not span.transposed and len(res[0]) == 1 and len(res[-1]) == 1
|
1407
1407
|
):
|
1408
1408
|
res = list(chain.from_iterable(res))
|
1409
1409
|
elif span.ndim == 1:
|
@@ -1521,7 +1521,7 @@ class Sheet(tk.Frame):
|
|
1521
1521
|
)
|
1522
1522
|
|
1523
1523
|
@data.setter
|
1524
|
-
def data(self, value):
|
1524
|
+
def data(self, value: list[list[object]]) -> None:
|
1525
1525
|
self.data_reference(value)
|
1526
1526
|
|
1527
1527
|
def set_data(
|
@@ -2397,8 +2397,31 @@ class Sheet(tk.Frame):
|
|
2397
2397
|
self.set_refresh_timer(redraw)
|
2398
2398
|
return data_idxs, disp_idxs, event_data
|
2399
2399
|
|
2400
|
-
def equalize_data_row_lengths(
|
2401
|
-
|
2400
|
+
def equalize_data_row_lengths(
|
2401
|
+
self,
|
2402
|
+
include_header: bool = True,
|
2403
|
+
) -> int:
|
2404
|
+
return self.MT.equalize_data_row_lengths(
|
2405
|
+
include_header=include_header,
|
2406
|
+
)
|
2407
|
+
|
2408
|
+
def full_move_rows_idxs(self, data_idxs: dict[int, int]) -> dict[int, int]:
|
2409
|
+
"""
|
2410
|
+
Converts the dict provided by moving rows event data
|
2411
|
+
Under the keys ['moved']['rows']['data']
|
2412
|
+
Into a dict of {old index: new index} for every row
|
2413
|
+
Includes row numbers in cell options, spans, etc.
|
2414
|
+
"""
|
2415
|
+
return self.MT.get_full_new_idxs(self.MT.get_max_row_idx(), data_idxs)
|
2416
|
+
|
2417
|
+
def full_move_columns_idxs(self, data_idxs: dict[int, int]) -> dict[int, int]:
|
2418
|
+
"""
|
2419
|
+
Converts the dict provided by moving columns event data
|
2420
|
+
Under the keys ['moved']['columns']['data']
|
2421
|
+
Into a dict of {old index: new index} for every column
|
2422
|
+
Includes column numbers in cell options, spans, etc.
|
2423
|
+
"""
|
2424
|
+
return self.MT.get_full_new_idxs(self.MT.get_max_column_idx(), data_idxs)
|
2402
2425
|
|
2403
2426
|
# Highlighting Cells
|
2404
2427
|
|
@@ -2850,12 +2873,7 @@ class Sheet(tk.Frame):
|
|
2850
2873
|
self.set_refresh_timer(redraw)
|
2851
2874
|
return self
|
2852
2875
|
|
2853
|
-
|
2854
|
-
self,
|
2855
|
-
align: str = None,
|
2856
|
-
redraw: bool = True,
|
2857
|
-
) -> str | Sheet:
|
2858
|
-
return self.row_index_align(align, redraw)
|
2876
|
+
index_align = row_index_align
|
2859
2877
|
|
2860
2878
|
def align(
|
2861
2879
|
self,
|
@@ -2913,12 +2931,25 @@ class Sheet(tk.Frame):
|
|
2913
2931
|
def selected(self) -> tuple[()] | Selected:
|
2914
2932
|
return self.MT.selected
|
2915
2933
|
|
2934
|
+
@selected.setter
|
2935
|
+
def selected(self, selected: tuple[()] | Selected) -> Sheet:
|
2936
|
+
if selected:
|
2937
|
+
self.MT.set_currently_selected(
|
2938
|
+
r=selected[0],
|
2939
|
+
c=selected[1],
|
2940
|
+
item=selected[4],
|
2941
|
+
box=selected[3],
|
2942
|
+
)
|
2943
|
+
else:
|
2944
|
+
self.MT.deselect()
|
2945
|
+
return self
|
2946
|
+
|
2916
2947
|
def get_selected_rows(
|
2917
2948
|
self,
|
2918
2949
|
get_cells: bool = False,
|
2919
2950
|
get_cells_as_rows: bool = False,
|
2920
2951
|
return_tuple: bool = False,
|
2921
|
-
) -> tuple | set:
|
2952
|
+
) -> tuple[int] | tuple[tuple[int, int]] | set[int] | set[tuple[int, int]]:
|
2922
2953
|
if return_tuple:
|
2923
2954
|
return tuple(self.MT.get_selected_rows(get_cells=get_cells, get_cells_as_rows=get_cells_as_rows))
|
2924
2955
|
return self.MT.get_selected_rows(get_cells=get_cells, get_cells_as_rows=get_cells_as_rows)
|
@@ -2928,7 +2959,7 @@ class Sheet(tk.Frame):
|
|
2928
2959
|
get_cells: bool = False,
|
2929
2960
|
get_cells_as_columns: bool = False,
|
2930
2961
|
return_tuple: bool = False,
|
2931
|
-
) -> tuple | set:
|
2962
|
+
) -> tuple[int] | tuple[tuple[int, int]] | set[int] | set[tuple[int, int]]:
|
2932
2963
|
if return_tuple:
|
2933
2964
|
return tuple(self.MT.get_selected_cols(get_cells=get_cells, get_cells_as_cols=get_cells_as_columns))
|
2934
2965
|
return self.MT.get_selected_cols(get_cells=get_cells, get_cells_as_cols=get_cells_as_columns)
|
@@ -2939,7 +2970,7 @@ class Sheet(tk.Frame):
|
|
2939
2970
|
get_columns: bool = False,
|
2940
2971
|
sort_by_row: bool = False,
|
2941
2972
|
sort_by_column: bool = False,
|
2942
|
-
) -> list | set:
|
2973
|
+
) -> list[tuple[int, int]] | set[tuple[int, int]]:
|
2943
2974
|
if sort_by_row and sort_by_column:
|
2944
2975
|
sels = sorted(
|
2945
2976
|
self.MT.get_selected_cells(get_rows=get_rows, get_cols=get_columns),
|
@@ -2968,6 +2999,18 @@ class Sheet(tk.Frame):
|
|
2968
2999
|
def boxes(self) -> list[tuple[tuple[int, int, int, int], str]]:
|
2969
3000
|
return self.MT.get_all_selection_boxes_with_types()
|
2970
3001
|
|
3002
|
+
@boxes.setter
|
3003
|
+
def boxes(self, boxes: Sequence[tuple[tuple[int, int, int, int], str]]) -> Sheet:
|
3004
|
+
self.MT.deselect()
|
3005
|
+
self.MT.reselect_from_get_boxes(
|
3006
|
+
boxes={box[0] if isinstance(box[0], tuple) else tuple(box[0]): box[1] for box in boxes}
|
3007
|
+
)
|
3008
|
+
return self
|
3009
|
+
|
3010
|
+
@property
|
3011
|
+
def canvas_boxes(self) -> dict[int, SelectionBox]:
|
3012
|
+
return self.MT.selection_boxes
|
3013
|
+
|
2971
3014
|
def cell_selected(
|
2972
3015
|
self,
|
2973
3016
|
r: int,
|
@@ -3000,8 +3043,17 @@ class Sheet(tk.Frame):
|
|
3000
3043
|
def all_selected(self) -> bool:
|
3001
3044
|
return self.MT.all_selected()
|
3002
3045
|
|
3003
|
-
def get_ctrl_x_c_boxes(
|
3004
|
-
|
3046
|
+
def get_ctrl_x_c_boxes(
|
3047
|
+
self,
|
3048
|
+
nrows: bool = True,
|
3049
|
+
) -> tuple[dict[tuple[int, int, int, int], str], int] | dict[tuple[int, int, int, int], str]:
|
3050
|
+
if nrows:
|
3051
|
+
return self.MT.get_ctrl_x_c_boxes()
|
3052
|
+
return self.MT.get_ctrl_x_c_boxes()[0]
|
3053
|
+
|
3054
|
+
@property
|
3055
|
+
def ctrl_boxes(self) -> dict[tuple[int, int, int, int], str]:
|
3056
|
+
return self.MT.get_ctrl_x_c_boxes()[0]
|
3005
3057
|
|
3006
3058
|
def get_selected_min_max(
|
3007
3059
|
self,
|
@@ -3023,7 +3075,7 @@ class Sheet(tk.Frame):
|
|
3023
3075
|
|
3024
3076
|
def select_row(self, row: int, redraw: bool = True, run_binding_func: bool = True) -> Sheet:
|
3025
3077
|
self.RI.select_row(
|
3026
|
-
|
3078
|
+
row if isinstance(row, int) else int(row),
|
3027
3079
|
redraw=False,
|
3028
3080
|
run_binding_func=run_binding_func,
|
3029
3081
|
)
|
@@ -3032,7 +3084,7 @@ class Sheet(tk.Frame):
|
|
3032
3084
|
|
3033
3085
|
def select_column(self, column: int, redraw: bool = True, run_binding_func: bool = True) -> Sheet:
|
3034
3086
|
self.CH.select_col(
|
3035
|
-
|
3087
|
+
column if isinstance(column, int) else int(column),
|
3036
3088
|
redraw=False,
|
3037
3089
|
run_binding_func=run_binding_func,
|
3038
3090
|
)
|
@@ -3041,8 +3093,8 @@ class Sheet(tk.Frame):
|
|
3041
3093
|
|
3042
3094
|
def select_cell(self, row: int, column: int, redraw: bool = True, run_binding_func: bool = True) -> Sheet:
|
3043
3095
|
self.MT.select_cell(
|
3044
|
-
|
3045
|
-
|
3096
|
+
row if isinstance(row, int) else int(row),
|
3097
|
+
column if isinstance(column, int) else int(column),
|
3046
3098
|
redraw=False,
|
3047
3099
|
run_binding_func=run_binding_func,
|
3048
3100
|
)
|
@@ -3722,10 +3774,24 @@ class Sheet(tk.Frame):
|
|
3722
3774
|
self.MT.all_columns_displayed = a
|
3723
3775
|
return v
|
3724
3776
|
|
3777
|
+
@property
|
3778
|
+
def all_columns(self) -> bool:
|
3779
|
+
return self.MT.all_columns_displayed
|
3780
|
+
|
3781
|
+
@all_columns.setter
|
3782
|
+
def all_columns(self, a: bool) -> Sheet:
|
3783
|
+
self.MT.all_columns_displayed = a
|
3784
|
+
return self
|
3785
|
+
|
3725
3786
|
@property
|
3726
3787
|
def displayed_columns(self) -> list[int]:
|
3727
3788
|
return self.MT.displayed_columns
|
3728
3789
|
|
3790
|
+
@displayed_columns.setter
|
3791
|
+
def displayed_columns(self, columns: list[int]) -> Sheet:
|
3792
|
+
self.display_columns(columns=columns, reset_col_positions=False, redraw=True)
|
3793
|
+
return self
|
3794
|
+
|
3729
3795
|
# Hiding Rows
|
3730
3796
|
|
3731
3797
|
def displayed_row_to_data(self, r: int) -> int:
|
@@ -3828,10 +3894,24 @@ class Sheet(tk.Frame):
|
|
3828
3894
|
self.MT.all_rows_displayed = a
|
3829
3895
|
return v
|
3830
3896
|
|
3897
|
+
@property
|
3898
|
+
def all_rows(self) -> bool:
|
3899
|
+
return self.MT.all_rows_displayed
|
3900
|
+
|
3901
|
+
@all_rows.setter
|
3902
|
+
def all_rows(self, a: bool) -> Sheet:
|
3903
|
+
self.MT.all_rows_displayed = a
|
3904
|
+
return self
|
3905
|
+
|
3831
3906
|
@property
|
3832
3907
|
def displayed_rows(self) -> list[int]:
|
3833
3908
|
return self.MT.displayed_rows
|
3834
3909
|
|
3910
|
+
@displayed_rows.setter
|
3911
|
+
def displayed_rows(self, rows: list[int]) -> Sheet:
|
3912
|
+
self.display_rows(rows=rows, reset_row_positions=False, redraw=True)
|
3913
|
+
return self
|
3914
|
+
|
3835
3915
|
# Hiding Sheet Elements
|
3836
3916
|
|
3837
3917
|
def hide(
|
@@ -4242,9 +4322,7 @@ class Sheet(tk.Frame):
|
|
4242
4322
|
self.MT.main_table_redraw_grid_and_text(redraw_header=redraw_header, redraw_row_index=redraw_row_index)
|
4243
4323
|
return self
|
4244
4324
|
|
4245
|
-
|
4246
|
-
self.MT.main_table_redraw_grid_and_text(redraw_header=redraw_header, redraw_row_index=redraw_row_index)
|
4247
|
-
return self
|
4325
|
+
refresh = redraw
|
4248
4326
|
|
4249
4327
|
# Tags
|
4250
4328
|
|
@@ -4381,7 +4459,10 @@ class Sheet(tk.Frame):
|
|
4381
4459
|
data: list[list[object]],
|
4382
4460
|
iid_column: int,
|
4383
4461
|
parent_column: int,
|
4462
|
+
text_column: None | int = None,
|
4384
4463
|
) -> Sheet:
|
4464
|
+
if text_column is None:
|
4465
|
+
text_column = iid_column
|
4385
4466
|
tally_of_ids = defaultdict(lambda: -1)
|
4386
4467
|
ncols = max(map(len, data), default=0)
|
4387
4468
|
for rn, row in enumerate(data):
|
@@ -4400,13 +4481,13 @@ class Sheet(tk.Frame):
|
|
4400
4481
|
tally_of_ids[iid] += 1
|
4401
4482
|
row[iid_column] = new
|
4402
4483
|
if iid not in self.RI.tree:
|
4403
|
-
self.RI.tree[iid] = Node(row[
|
4484
|
+
self.RI.tree[iid] = Node(row[text_column], iid, "")
|
4404
4485
|
if iid == pid or self.RI.pid_causes_recursive_loop(iid, pid):
|
4405
4486
|
row[parent_column] = ""
|
4406
4487
|
pid = ""
|
4407
4488
|
if pid:
|
4408
4489
|
if pid not in self.RI.tree:
|
4409
|
-
self.RI.tree[pid] = Node(row[
|
4490
|
+
self.RI.tree[pid] = Node(row[text_column], pid)
|
4410
4491
|
self.RI.tree[iid].parent = self.RI.tree[pid]
|
4411
4492
|
self.RI.tree[pid].children.append(self.RI.tree[iid])
|
4412
4493
|
else:
|
@@ -4416,7 +4497,7 @@ class Sheet(tk.Frame):
|
|
4416
4497
|
if n.parent is None:
|
4417
4498
|
n.parent = ""
|
4418
4499
|
newrow = self.MT.get_empty_row_seq(len(data), ncols)
|
4419
|
-
newrow[iid_column] = n.
|
4500
|
+
newrow[iid_column] = n.iid
|
4420
4501
|
self.RI.tree_rns[n.iid] = len(data)
|
4421
4502
|
data.append(newrow)
|
4422
4503
|
self.insert_rows(
|
@@ -4429,7 +4510,7 @@ class Sheet(tk.Frame):
|
|
4429
4510
|
self.RI.tree_rns = {n.iid: i for i, n in enumerate(self.MT._row_index)}
|
4430
4511
|
self.hide_rows(
|
4431
4512
|
set(self.RI.tree_rns[iid] for iid in self.get_children() if self.RI.tree[iid].parent),
|
4432
|
-
deselect_all=
|
4513
|
+
deselect_all=False,
|
4433
4514
|
data_indexes=True,
|
4434
4515
|
)
|
4435
4516
|
return self
|
@@ -4450,7 +4531,7 @@ class Sheet(tk.Frame):
|
|
4450
4531
|
Accepts set[str] of iids that are open in the treeview
|
4451
4532
|
Closes everything else
|
4452
4533
|
"""
|
4453
|
-
self.RI.tree_open_ids = open_ids
|
4534
|
+
self.RI.tree_open_ids = open_ids if isinstance(open_ids, set) else set(open_ids)
|
4454
4535
|
self.hide_rows(
|
4455
4536
|
set(self.MT.displayed_rows),
|
4456
4537
|
redraw=False,
|
@@ -4756,7 +4837,7 @@ class Sheet(tk.Frame):
|
|
4756
4837
|
reattach = move
|
4757
4838
|
|
4758
4839
|
def exists(self, item: str) -> bool:
|
4759
|
-
return item in self.RI.tree
|
4840
|
+
return item.lower() in self.RI.tree
|
4760
4841
|
|
4761
4842
|
def parent(self, item: str) -> str:
|
4762
4843
|
if (item := item.lower()) not in self.RI.tree:
|
@@ -4811,8 +4892,9 @@ class Sheet(tk.Frame):
|
|
4811
4892
|
]
|
4812
4893
|
|
4813
4894
|
def selection_set(self, *items) -> Sheet:
|
4814
|
-
self.
|
4815
|
-
|
4895
|
+
if any(item.lower() in self.RI.tree for item in unpack(items)):
|
4896
|
+
self.deselect()
|
4897
|
+
self.selection_add(*items)
|
4816
4898
|
return self
|
4817
4899
|
|
4818
4900
|
def selection_add(self, *items) -> Sheet:
|
@@ -4868,12 +4950,8 @@ class Sheet(tk.Frame):
|
|
4868
4950
|
if redraw and self.after_redraw_id is None:
|
4869
4951
|
self.after_redraw_id = self.after(self.after_redraw_time_ms, self.after_redraw)
|
4870
4952
|
|
4871
|
-
def after_redraw(
|
4872
|
-
self,
|
4873
|
-
redraw_header: bool = True,
|
4874
|
-
redraw_row_index: bool = True,
|
4875
|
-
) -> None:
|
4876
|
-
self.MT.main_table_redraw_grid_and_text(redraw_header=redraw_header, redraw_row_index=redraw_row_index)
|
4953
|
+
def after_redraw(self) -> None:
|
4954
|
+
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
4877
4955
|
self.after_redraw_id = None
|
4878
4956
|
|
4879
4957
|
def del_options_using_span(
|
@@ -5385,7 +5463,7 @@ class Sheet(tk.Frame):
|
|
5385
5463
|
row: int = 0,
|
5386
5464
|
column: int = 0,
|
5387
5465
|
cells: list = [],
|
5388
|
-
canvas:
|
5466
|
+
canvas: Literal["table", "index", "header"] = "table",
|
5389
5467
|
bg: bool | None | str = False,
|
5390
5468
|
fg: bool | None | str = False,
|
5391
5469
|
redraw: bool = True,
|
tksheet/vars.py
CHANGED
@@ -26,6 +26,16 @@ emitted_events: set[str] = {
|
|
26
26
|
backwards_compatibility_keys: dict[str, str] = {
|
27
27
|
"font": "table_font",
|
28
28
|
}
|
29
|
+
text_editor_to_unbind: tuple[str] = (
|
30
|
+
"<Alt-Return>",
|
31
|
+
"<Alt-KP_Enter>",
|
32
|
+
"<Option-Return>",
|
33
|
+
"<Tab>",
|
34
|
+
"<Return>",
|
35
|
+
"<KP_Enter>",
|
36
|
+
"<FocusOut>",
|
37
|
+
"<Escape>",
|
38
|
+
)
|
29
39
|
scrollbar_options_keys: set[str] = {
|
30
40
|
"vertical_scroll_background",
|
31
41
|
"horizontal_scroll_background",
|
@@ -0,0 +1,20 @@
|
|
1
|
+
tksheet/__init__.py,sha256=9Wvm_zS75-z0FFGXl9Vz1cGsXbUBi983lVC3VmLnmhM,1994
|
2
|
+
tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
|
3
|
+
tksheet/column_headers.py,sha256=u5SRsI3VAoqxpUpPQZfu2Zimmf2OmZUBD_hMJKso-pw,100204
|
4
|
+
tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
|
5
|
+
tksheet/functions.py,sha256=ytmHQtSa8cN6dKYLFra5G0393-4sU7bivvT_U4wxksI,39697
|
6
|
+
tksheet/main_table.py,sha256=YKlcqiSj089i0-HXGtPBTLGW28Y7d_lv6hFFF6S_pQM,318310
|
7
|
+
tksheet/other_classes.py,sha256=P3FYUYreLhstATvHCNow8sDQoCsD_02KB6oXcca3ahE,13628
|
8
|
+
tksheet/row_index.py,sha256=wfOPHitGfipTysCMfQA-Nl4mJawmkv9gm5CAtIlKgxo,105673
|
9
|
+
tksheet/sheet.py,sha256=n_LrHnd4Xim2TzgJ1DY8Z1n2aaUdtwWiRukvxFMTOws,258919
|
10
|
+
tksheet/sheet_options.py,sha256=mh0rTvWrFvIKaiv88jtMZy0TSA8zTS1GXSe88u8_rzk,11978
|
11
|
+
tksheet/text_editor.py,sha256=81_IZKrTVa2KIx2cJ4n3cFvFMAwvbHIQYgqtyat-97I,6681
|
12
|
+
tksheet/themes.py,sha256=OwUe31NRbosjw3ZoZsMyB8lNVyYin9YcKLhCturi5q8,13398
|
13
|
+
tksheet/top_left_rectangle.py,sha256=-2u9GfOvcqhkKwHEtbqdFvXCY3RbvL5k2Sh9l3r_k04,8275
|
14
|
+
tksheet/types.py,sha256=IgoEHMbceKpakcZtanxKaKJ4RdCq7UW6EoEIIz5O59k,340
|
15
|
+
tksheet/vars.py,sha256=8Qxas-m5nU-yMaeAweO4Z30FM9cOQoRTiOsH4kgZp5s,2288
|
16
|
+
tksheet-7.1.9.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
17
|
+
tksheet-7.1.9.dist-info/METADATA,sha256=Nyratgt4E9d83xYtfOpdQh4nd8o4HzTiV7-Mz61RPZw,6013
|
18
|
+
tksheet-7.1.9.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
19
|
+
tksheet-7.1.9.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
20
|
+
tksheet-7.1.9.dist-info/RECORD,,
|
tksheet/listbox.py
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
import tkinter as tk
|
3
|
-
# from collections.abc import Callable, Generator, Iterator, Sequence
|
4
|
-
|
5
|
-
from .sheet import (
|
6
|
-
Sheet,
|
7
|
-
)
|
8
|
-
|
9
|
-
|
10
|
-
class ListBox(Sheet):
|
11
|
-
def __init__(
|
12
|
-
self,
|
13
|
-
parent: tk.Misc,
|
14
|
-
) -> None:
|
15
|
-
Sheet.__init__(
|
16
|
-
self,
|
17
|
-
parent=parent,
|
18
|
-
)
|
19
|
-
self.parent = parent
|
tksheet-7.1.7.dist-info/RECORD
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
tksheet/__init__.py,sha256=UgweIADXnlw1-KpD4Xr0sA_l6qAWTP3yzQ1Bo716Fkg,2010
|
2
|
-
tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
|
3
|
-
tksheet/column_headers.py,sha256=dBEnPjbI6nqcS0OISWJ0tXBBxtGjB67OE8z2-Bx8X1U,99870
|
4
|
-
tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
|
5
|
-
tksheet/functions.py,sha256=dMJwG27Qo5WsfwzkL7A9X-PERGuGFhpQvP95BnlohJ8,39612
|
6
|
-
tksheet/listbox.py,sha256=BUHx-PsZL6yGMewxAaEZV_8mOXCVWenWqzHp3tasGvo,384
|
7
|
-
tksheet/main_table.py,sha256=ngwXVNqrtOZPtR-BqCuh7UVAubfB8v_JfdI2peJAzPM,323154
|
8
|
-
tksheet/other_classes.py,sha256=Hjr7c0kD2_880xjtGuFn9gQ-7ED5kSiNahniBeXcf84,13604
|
9
|
-
tksheet/row_index.py,sha256=NHFu5a35nPMuxajHhpS2RH8sOTYKKKb6WGO8zWofxqs,105354
|
10
|
-
tksheet/sheet.py,sha256=PbCa8RCiBYg3Zl_26j1aIKphGst84S2lGHKodnZ6Kk0,256166
|
11
|
-
tksheet/sheet_options.py,sha256=mh0rTvWrFvIKaiv88jtMZy0TSA8zTS1GXSe88u8_rzk,11978
|
12
|
-
tksheet/text_editor.py,sha256=81_IZKrTVa2KIx2cJ4n3cFvFMAwvbHIQYgqtyat-97I,6681
|
13
|
-
tksheet/themes.py,sha256=OwUe31NRbosjw3ZoZsMyB8lNVyYin9YcKLhCturi5q8,13398
|
14
|
-
tksheet/top_left_rectangle.py,sha256=-2u9GfOvcqhkKwHEtbqdFvXCY3RbvL5k2Sh9l3r_k04,8275
|
15
|
-
tksheet/types.py,sha256=IgoEHMbceKpakcZtanxKaKJ4RdCq7UW6EoEIIz5O59k,340
|
16
|
-
tksheet/vars.py,sha256=Iukk7-MMT9X7vv0m3nQPKzbp2Iw2Pg1wJEW7js919Mo,2092
|
17
|
-
tksheet-7.1.7.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
18
|
-
tksheet-7.1.7.dist-info/METADATA,sha256=w5PeLRxO5tOgSz577YZLks3-OtluVDYw6Kw--fixI8w,6013
|
19
|
-
tksheet-7.1.7.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
20
|
-
tksheet-7.1.7.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
21
|
-
tksheet-7.1.7.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|