tksheet 7.1.21__py3-none-any.whl → 7.1.23__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 +5 -1
- tksheet/column_headers.py +35 -22
- tksheet/functions.py +27 -5
- tksheet/main_table.py +126 -64
- tksheet/row_index.py +56 -44
- tksheet/sheet.py +358 -272
- tksheet/sheet_options.py +1 -1
- tksheet/text_editor.py +1 -5
- tksheet/themes.py +41 -32
- tksheet/vars.py +22 -9
- {tksheet-7.1.21.dist-info → tksheet-7.1.23.dist-info}/METADATA +5 -5
- tksheet-7.1.23.dist-info/RECORD +20 -0
- tksheet-7.1.21.dist-info/RECORD +0 -20
- {tksheet-7.1.21.dist-info → tksheet-7.1.23.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.1.21.dist-info → tksheet-7.1.23.dist-info}/WHEEL +0 -0
- {tksheet-7.1.21.dist-info → tksheet-7.1.23.dist-info}/top_level.txt +0 -0
tksheet/sheet.py
CHANGED
@@ -21,6 +21,8 @@ from .functions import (
|
|
21
21
|
dropdown_search_function,
|
22
22
|
event_dict,
|
23
23
|
fix_format_kwargs,
|
24
|
+
new_tk_event,
|
25
|
+
force_bool,
|
24
26
|
get_checkbox_dict,
|
25
27
|
get_checkbox_kwargs,
|
26
28
|
get_dropdown_dict,
|
@@ -171,7 +173,7 @@ class Sheet(tk.Frame):
|
|
171
173
|
display_selected_fg_over_highlights: bool = False,
|
172
174
|
show_selected_cells_border: bool = True,
|
173
175
|
treeview: bool = False,
|
174
|
-
treeview_indent: str | int = "
|
176
|
+
treeview_indent: str | int = "6",
|
175
177
|
rounded_boxes: bool = True,
|
176
178
|
alternate_color: str = "",
|
177
179
|
# colors
|
@@ -524,8 +526,7 @@ class Sheet(tk.Frame):
|
|
524
526
|
elif is_iterable(value) and is_iterable(c):
|
525
527
|
for c_, v in zip(c, value):
|
526
528
|
self.CH.set_cell_data(c_, v)
|
527
|
-
self.set_refresh_timer(redraw)
|
528
|
-
return self
|
529
|
+
return self.set_refresh_timer(redraw)
|
529
530
|
|
530
531
|
def headers(
|
531
532
|
self,
|
@@ -561,8 +562,7 @@ class Sheet(tk.Frame):
|
|
561
562
|
elif is_iterable(value) and is_iterable(r):
|
562
563
|
for r_, v in zip(r, value):
|
563
564
|
self.RI.set_cell_data(r_, v)
|
564
|
-
self.set_refresh_timer(redraw)
|
565
|
-
return self
|
565
|
+
return self.set_refresh_timer(redraw)
|
566
566
|
|
567
567
|
def row_index(
|
568
568
|
self,
|
@@ -583,7 +583,7 @@ class Sheet(tk.Frame):
|
|
583
583
|
|
584
584
|
# Bindings and Functionality
|
585
585
|
|
586
|
-
def enable_bindings(self, *bindings) -> Sheet:
|
586
|
+
def enable_bindings(self, *bindings: str) -> Sheet:
|
587
587
|
self.MT.enable_bindings(bindings)
|
588
588
|
return self
|
589
589
|
|
@@ -921,12 +921,7 @@ class Sheet(tk.Frame):
|
|
921
921
|
func: Callable,
|
922
922
|
add: str | None = None,
|
923
923
|
) -> Sheet:
|
924
|
-
if binding
|
925
|
-
if add:
|
926
|
-
self.bound_events[binding].append(func)
|
927
|
-
else:
|
928
|
-
self.bound_events[binding] = [func]
|
929
|
-
elif binding == "<ButtonPress-1>":
|
924
|
+
if binding == "<ButtonPress-1>":
|
930
925
|
self.MT.extra_b1_press_func = func
|
931
926
|
self.CH.extra_b1_press_func = func
|
932
927
|
self.RI.extra_b1_press_func = func
|
@@ -956,6 +951,11 @@ class Sheet(tk.Frame):
|
|
956
951
|
self.CH.extra_rc_func = func
|
957
952
|
self.RI.extra_rc_func = func
|
958
953
|
self.TL.extra_rc_func = func
|
954
|
+
elif binding in emitted_events:
|
955
|
+
if add:
|
956
|
+
self.bound_events[binding].append(func)
|
957
|
+
else:
|
958
|
+
self.bound_events[binding] = [func]
|
959
959
|
else:
|
960
960
|
self.MT.bind(binding, func, add=add)
|
961
961
|
self.CH.bind(binding, func, add=add)
|
@@ -1463,10 +1463,13 @@ class Sheet(tk.Frame):
|
|
1463
1463
|
redraw: bool = True,
|
1464
1464
|
) -> Sheet:
|
1465
1465
|
if table:
|
1466
|
+
self.MT.hide_text_editor_and_dropdown(redraw=False)
|
1466
1467
|
self.MT.data = []
|
1467
1468
|
if header:
|
1469
|
+
self.CH.hide_text_editor_and_dropdown(redraw=False)
|
1468
1470
|
self.MT._headers = []
|
1469
1471
|
if index:
|
1472
|
+
self.RI.hide_text_editor_and_dropdown(redraw=False)
|
1470
1473
|
self.MT._row_index = []
|
1471
1474
|
if row_heights:
|
1472
1475
|
self.MT.saved_row_heights = {}
|
@@ -1486,8 +1489,9 @@ class Sheet(tk.Frame):
|
|
1486
1489
|
self.ops = new_sheet_options()
|
1487
1490
|
if tree:
|
1488
1491
|
self.RI.tree_reset()
|
1489
|
-
|
1490
|
-
|
1492
|
+
if tree or row_heights or column_widths:
|
1493
|
+
self.MT.hide_dropdown_editor_all_canvases()
|
1494
|
+
return self.set_refresh_timer(redraw)
|
1491
1495
|
|
1492
1496
|
def set_sheet_data(
|
1493
1497
|
self,
|
@@ -1590,6 +1594,7 @@ class Sheet(tk.Frame):
|
|
1590
1594
|
event_data = event_dict(
|
1591
1595
|
name="edit_table",
|
1592
1596
|
sheet=self.name,
|
1597
|
+
widget=self,
|
1593
1598
|
selected=self.MT.selected,
|
1594
1599
|
)
|
1595
1600
|
set_t = self.event_data_set_table_cell
|
@@ -1820,6 +1825,7 @@ class Sheet(tk.Frame):
|
|
1820
1825
|
event_data = event_dict(
|
1821
1826
|
name="edit_table",
|
1822
1827
|
sheet=self.name,
|
1828
|
+
widget=self,
|
1823
1829
|
selected=self.MT.selected,
|
1824
1830
|
)
|
1825
1831
|
if index:
|
@@ -2152,6 +2158,7 @@ class Sheet(tk.Frame):
|
|
2152
2158
|
event_data = event_dict(
|
2153
2159
|
name="delete_rows",
|
2154
2160
|
sheet=self.name,
|
2161
|
+
widget=self,
|
2155
2162
|
boxes=self.MT.get_boxes(),
|
2156
2163
|
selected=self.MT.selected,
|
2157
2164
|
)
|
@@ -2193,6 +2200,7 @@ class Sheet(tk.Frame):
|
|
2193
2200
|
event_data = event_dict(
|
2194
2201
|
name="delete_columns",
|
2195
2202
|
sheet=self.name,
|
2203
|
+
widget=self,
|
2196
2204
|
boxes=self.MT.get_boxes(),
|
2197
2205
|
selected=self.MT.selected,
|
2198
2206
|
)
|
@@ -2301,6 +2309,7 @@ class Sheet(tk.Frame):
|
|
2301
2309
|
create_selections: bool = True,
|
2302
2310
|
undo: bool = False,
|
2303
2311
|
emit_event: bool = False,
|
2312
|
+
move_heights: bool = True,
|
2304
2313
|
redraw: bool = True,
|
2305
2314
|
) -> tuple[dict, dict, dict]:
|
2306
2315
|
data_idxs, disp_idxs, event_data = self.MT.move_rows_adjust_options_dict(
|
@@ -2310,6 +2319,7 @@ class Sheet(tk.Frame):
|
|
2310
2319
|
data_indexes=data_indexes,
|
2311
2320
|
),
|
2312
2321
|
move_data=move_data,
|
2322
|
+
move_heights=move_heights,
|
2313
2323
|
create_selections=create_selections,
|
2314
2324
|
data_indexes=data_indexes,
|
2315
2325
|
)
|
@@ -2329,6 +2339,7 @@ class Sheet(tk.Frame):
|
|
2329
2339
|
create_selections: bool = True,
|
2330
2340
|
undo: bool = False,
|
2331
2341
|
emit_event: bool = False,
|
2342
|
+
move_widths: bool = True,
|
2332
2343
|
redraw: bool = True,
|
2333
2344
|
) -> tuple[dict, dict, dict]:
|
2334
2345
|
data_idxs, disp_idxs, event_data = self.MT.move_columns_adjust_options_dict(
|
@@ -2338,6 +2349,7 @@ class Sheet(tk.Frame):
|
|
2338
2349
|
data_indexes=data_indexes,
|
2339
2350
|
),
|
2340
2351
|
move_data=move_data,
|
2352
|
+
move_widths=move_widths,
|
2341
2353
|
create_selections=create_selections,
|
2342
2354
|
data_indexes=data_indexes,
|
2343
2355
|
)
|
@@ -2498,18 +2510,35 @@ class Sheet(tk.Frame):
|
|
2498
2510
|
del_from_options(self.RI.cell_options, "highlight")
|
2499
2511
|
if header:
|
2500
2512
|
del_from_options(self.CH.cell_options, "highlight")
|
2501
|
-
self.set_refresh_timer(redraw)
|
2502
|
-
return self
|
2513
|
+
return self.set_refresh_timer(redraw)
|
2503
2514
|
|
2504
2515
|
# Dropdown Boxes
|
2505
2516
|
|
2506
2517
|
def dropdown(
|
2507
2518
|
self,
|
2508
2519
|
*key: CreateSpanTypes,
|
2509
|
-
|
2520
|
+
values: list = [],
|
2521
|
+
edit_data: bool = True,
|
2522
|
+
set_values: dict[tuple[int, int], object] = {},
|
2523
|
+
set_value: object = None,
|
2524
|
+
state: str = "normal",
|
2525
|
+
redraw: bool = True,
|
2526
|
+
selection_function: Callable | None = None,
|
2527
|
+
modified_function: Callable | None = None,
|
2528
|
+
search_function: Callable = dropdown_search_function,
|
2529
|
+
validate_input: bool = True,
|
2530
|
+
text: None | str = None,
|
2510
2531
|
) -> Span:
|
2511
|
-
|
2512
|
-
|
2532
|
+
v = set_value if set_value is not None else values[0] if values else ""
|
2533
|
+
kwargs = {
|
2534
|
+
"values": values,
|
2535
|
+
"state": state,
|
2536
|
+
"selection_function": selection_function,
|
2537
|
+
"modified_function": modified_function,
|
2538
|
+
"search_function": search_function,
|
2539
|
+
"validate_input": validate_input,
|
2540
|
+
"text": text,
|
2541
|
+
}
|
2513
2542
|
d = get_dropdown_dict(**kwargs)
|
2514
2543
|
span = self.span_from_key(*key)
|
2515
2544
|
rows, cols = self.ranges_from_span(span)
|
@@ -2521,32 +2550,37 @@ class Sheet(tk.Frame):
|
|
2521
2550
|
for r in rows:
|
2522
2551
|
self.del_index_cell_options_dropdown_and_checkbox(r)
|
2523
2552
|
add_to_options(self.RI.cell_options, r, "dropdown", d)
|
2524
|
-
|
2553
|
+
if edit_data:
|
2554
|
+
set_idata(r, value=set_values[r] if r in set_values else v)
|
2525
2555
|
if header:
|
2526
2556
|
for c in cols:
|
2527
2557
|
self.del_header_cell_options_dropdown_and_checkbox(c)
|
2528
2558
|
add_to_options(self.CH.cell_options, c, "dropdown", d)
|
2529
|
-
|
2559
|
+
if edit_data:
|
2560
|
+
set_hdata(c, value=set_values[c] if c in set_values else v)
|
2530
2561
|
if table:
|
2531
2562
|
if span.kind == "cell":
|
2532
2563
|
for r in rows:
|
2533
2564
|
for c in cols:
|
2534
2565
|
self.del_cell_options_dropdown_and_checkbox(r, c)
|
2535
2566
|
add_to_options(self.MT.cell_options, (r, c), "dropdown", d)
|
2536
|
-
|
2567
|
+
if edit_data:
|
2568
|
+
set_tdata(r, c, value=set_values[(r, c)] if (r, c) in set_values else v)
|
2537
2569
|
elif span.kind == "row":
|
2538
2570
|
for r in rows:
|
2539
2571
|
self.del_row_options_dropdown_and_checkbox(r)
|
2540
2572
|
add_to_options(self.MT.row_options, r, "dropdown", d)
|
2541
|
-
|
2542
|
-
|
2573
|
+
if edit_data:
|
2574
|
+
for c in cols:
|
2575
|
+
set_tdata(r, c, value=set_values[(r, c)] if (r, c) in set_values else v)
|
2543
2576
|
elif span.kind == "column":
|
2544
2577
|
for c in cols:
|
2545
2578
|
self.del_column_options_dropdown_and_checkbox(c)
|
2546
2579
|
add_to_options(self.MT.col_options, c, "dropdown", d)
|
2547
|
-
|
2548
|
-
|
2549
|
-
|
2580
|
+
if edit_data:
|
2581
|
+
for r in rows:
|
2582
|
+
set_tdata(r, c, value=set_values[(r, c)] if (r, c) in set_values else v)
|
2583
|
+
self.set_refresh_timer(redraw)
|
2550
2584
|
return span
|
2551
2585
|
|
2552
2586
|
def del_dropdown(
|
@@ -2594,10 +2628,18 @@ class Sheet(tk.Frame):
|
|
2594
2628
|
def checkbox(
|
2595
2629
|
self,
|
2596
2630
|
*key: CreateSpanTypes,
|
2597
|
-
|
2631
|
+
edit_data: bool = True,
|
2632
|
+
checked: bool | None = None,
|
2633
|
+
state: str = "normal",
|
2634
|
+
redraw: bool = True,
|
2635
|
+
check_function: Callable | None = None,
|
2636
|
+
text: str = "",
|
2598
2637
|
) -> Span:
|
2599
|
-
kwargs =
|
2600
|
-
|
2638
|
+
kwargs = {
|
2639
|
+
"state": state,
|
2640
|
+
"check_function": check_function,
|
2641
|
+
"text": text,
|
2642
|
+
}
|
2601
2643
|
d = get_checkbox_dict(**kwargs)
|
2602
2644
|
span = self.span_from_key(*key)
|
2603
2645
|
rows, cols = self.ranges_from_span(span)
|
@@ -2605,48 +2647,50 @@ class Sheet(tk.Frame):
|
|
2605
2647
|
set_tdata = self.MT.set_cell_data
|
2606
2648
|
set_idata = self.RI.set_cell_data
|
2607
2649
|
set_hdata = self.CH.set_cell_data
|
2608
|
-
if
|
2609
|
-
if header:
|
2610
|
-
for c in cols:
|
2611
|
-
self.del_header_cell_options_dropdown_and_checkbox(c)
|
2612
|
-
add_to_options(self.CH.cell_options, c, "checkbox", d)
|
2613
|
-
set_hdata(c, v)
|
2650
|
+
if index:
|
2614
2651
|
for r in rows:
|
2615
|
-
|
2616
|
-
|
2617
|
-
|
2618
|
-
set_idata(r,
|
2619
|
-
|
2652
|
+
self.del_index_cell_options_dropdown_and_checkbox(r)
|
2653
|
+
add_to_options(self.RI.cell_options, r, "checkbox", d)
|
2654
|
+
if edit_data:
|
2655
|
+
set_idata(r, checked if isinstance(checked, bool) else force_bool(self.get_index_data(r)))
|
2656
|
+
if header:
|
2657
|
+
for c in cols:
|
2658
|
+
self.del_header_cell_options_dropdown_and_checkbox(c)
|
2659
|
+
add_to_options(self.CH.cell_options, c, "checkbox", d)
|
2660
|
+
if edit_data:
|
2661
|
+
set_hdata(c, checked if isinstance(checked, bool) else force_bool(self.get_header_data(c)))
|
2662
|
+
if table:
|
2663
|
+
if span.kind == "cell":
|
2664
|
+
for r in rows:
|
2620
2665
|
for c in cols:
|
2621
2666
|
self.MT.delete_cell_format(r, c, clear_values=False)
|
2622
2667
|
self.del_cell_options_dropdown_and_checkbox(r, c)
|
2623
2668
|
add_to_options(self.MT.cell_options, (r, c), "checkbox", d)
|
2624
|
-
|
2625
|
-
|
2626
|
-
|
2627
|
-
|
2628
|
-
|
2629
|
-
|
2630
|
-
set_idata(r, v)
|
2631
|
-
if table:
|
2669
|
+
if edit_data:
|
2670
|
+
set_tdata(
|
2671
|
+
r, c, checked if isinstance(checked, bool) else force_bool(self.get_cell_data(r, c))
|
2672
|
+
)
|
2673
|
+
elif span.kind == "row":
|
2674
|
+
for r in rows:
|
2632
2675
|
self.MT.delete_row_format(r, clear_values=False)
|
2633
2676
|
self.del_row_options_dropdown_and_checkbox(r)
|
2634
2677
|
add_to_options(self.MT.row_options, r, "checkbox", d)
|
2635
|
-
|
2636
|
-
|
2637
|
-
|
2638
|
-
|
2639
|
-
|
2640
|
-
|
2641
|
-
|
2642
|
-
set_hdata(c, v)
|
2643
|
-
if table:
|
2678
|
+
if edit_data:
|
2679
|
+
for c in cols:
|
2680
|
+
set_tdata(
|
2681
|
+
r, c, checked if isinstance(checked, bool) else force_bool(self.get_cell_data(r, c))
|
2682
|
+
)
|
2683
|
+
elif span.kind == "column":
|
2684
|
+
for c in cols:
|
2644
2685
|
self.MT.delete_column_format(c, clear_values=False)
|
2645
2686
|
self.del_column_options_dropdown_and_checkbox(c)
|
2646
2687
|
add_to_options(self.MT.col_options, c, "checkbox", d)
|
2647
|
-
|
2648
|
-
|
2649
|
-
|
2688
|
+
if edit_data:
|
2689
|
+
for r in rows:
|
2690
|
+
set_tdata(
|
2691
|
+
r, c, checked if isinstance(checked, bool) else force_bool(self.get_cell_data(r, c))
|
2692
|
+
)
|
2693
|
+
self.set_refresh_timer(redraw)
|
2650
2694
|
return span
|
2651
2695
|
|
2652
2696
|
def del_checkbox(
|
@@ -2847,8 +2891,7 @@ class Sheet(tk.Frame):
|
|
2847
2891
|
self.MT.align = convert_align(align)
|
2848
2892
|
else:
|
2849
2893
|
raise ValueError("Align must be one of the following values: c, center, w, west, e, east")
|
2850
|
-
self.set_refresh_timer(redraw)
|
2851
|
-
return self
|
2894
|
+
return self.set_refresh_timer(redraw)
|
2852
2895
|
|
2853
2896
|
def header_align(
|
2854
2897
|
self,
|
@@ -2861,8 +2904,7 @@ class Sheet(tk.Frame):
|
|
2861
2904
|
self.CH.align = convert_align(align)
|
2862
2905
|
else:
|
2863
2906
|
raise ValueError("Align must be one of the following values: c, center, w, west, e, east")
|
2864
|
-
self.set_refresh_timer(redraw)
|
2865
|
-
return self
|
2907
|
+
return self.set_refresh_timer(redraw)
|
2866
2908
|
|
2867
2909
|
def row_index_align(
|
2868
2910
|
self,
|
@@ -2875,8 +2917,7 @@ class Sheet(tk.Frame):
|
|
2875
2917
|
self.RI.align = convert_align(align)
|
2876
2918
|
else:
|
2877
2919
|
raise ValueError("Align must be one of the following values: c, center, w, west, e, east")
|
2878
|
-
self.set_refresh_timer(redraw)
|
2879
|
-
return self
|
2920
|
+
return self.set_refresh_timer(redraw)
|
2880
2921
|
|
2881
2922
|
index_align = row_index_align
|
2882
2923
|
|
@@ -3084,8 +3125,7 @@ class Sheet(tk.Frame):
|
|
3084
3125
|
redraw=False,
|
3085
3126
|
run_binding_func=run_binding_func,
|
3086
3127
|
)
|
3087
|
-
self.set_refresh_timer(redraw)
|
3088
|
-
return self
|
3128
|
+
return self.set_refresh_timer(redraw)
|
3089
3129
|
|
3090
3130
|
def select_column(self, column: int, redraw: bool = True, run_binding_func: bool = True) -> Sheet:
|
3091
3131
|
self.CH.select_col(
|
@@ -3093,8 +3133,7 @@ class Sheet(tk.Frame):
|
|
3093
3133
|
redraw=False,
|
3094
3134
|
run_binding_func=run_binding_func,
|
3095
3135
|
)
|
3096
|
-
self.set_refresh_timer(redraw)
|
3097
|
-
return self
|
3136
|
+
return self.set_refresh_timer(redraw)
|
3098
3137
|
|
3099
3138
|
def select_cell(self, row: int, column: int, redraw: bool = True, run_binding_func: bool = True) -> Sheet:
|
3100
3139
|
self.MT.select_cell(
|
@@ -3103,13 +3142,11 @@ class Sheet(tk.Frame):
|
|
3103
3142
|
redraw=False,
|
3104
3143
|
run_binding_func=run_binding_func,
|
3105
3144
|
)
|
3106
|
-
self.set_refresh_timer(redraw)
|
3107
|
-
return self
|
3145
|
+
return self.set_refresh_timer(redraw)
|
3108
3146
|
|
3109
3147
|
def select_all(self, redraw: bool = True, run_binding_func: bool = True) -> Sheet:
|
3110
3148
|
self.MT.select_all(redraw=False, run_binding_func=run_binding_func)
|
3111
|
-
self.set_refresh_timer(redraw)
|
3112
|
-
return self
|
3149
|
+
return self.set_refresh_timer(redraw)
|
3113
3150
|
|
3114
3151
|
def add_cell_selection(
|
3115
3152
|
self,
|
@@ -3126,8 +3163,7 @@ class Sheet(tk.Frame):
|
|
3126
3163
|
run_binding_func=run_binding_func,
|
3127
3164
|
set_as_current=set_as_current,
|
3128
3165
|
)
|
3129
|
-
self.set_refresh_timer(redraw)
|
3130
|
-
return self
|
3166
|
+
return self.set_refresh_timer(redraw)
|
3131
3167
|
|
3132
3168
|
def add_row_selection(
|
3133
3169
|
self,
|
@@ -3142,8 +3178,7 @@ class Sheet(tk.Frame):
|
|
3142
3178
|
run_binding_func=run_binding_func,
|
3143
3179
|
set_as_current=set_as_current,
|
3144
3180
|
)
|
3145
|
-
self.set_refresh_timer(redraw)
|
3146
|
-
return self
|
3181
|
+
return self.set_refresh_timer(redraw)
|
3147
3182
|
|
3148
3183
|
def add_column_selection(
|
3149
3184
|
self,
|
@@ -3158,8 +3193,7 @@ class Sheet(tk.Frame):
|
|
3158
3193
|
run_binding_func=run_binding_func,
|
3159
3194
|
set_as_current=set_as_current,
|
3160
3195
|
)
|
3161
|
-
self.set_refresh_timer(redraw)
|
3162
|
-
return self
|
3196
|
+
return self.set_refresh_timer(redraw)
|
3163
3197
|
|
3164
3198
|
def toggle_select_cell(
|
3165
3199
|
self,
|
@@ -3178,8 +3212,7 @@ class Sheet(tk.Frame):
|
|
3178
3212
|
run_binding_func=run_binding_func,
|
3179
3213
|
set_as_current=set_as_current,
|
3180
3214
|
)
|
3181
|
-
self.set_refresh_timer(redraw)
|
3182
|
-
return self
|
3215
|
+
return self.set_refresh_timer(redraw)
|
3183
3216
|
|
3184
3217
|
def toggle_select_row(
|
3185
3218
|
self,
|
@@ -3196,8 +3229,7 @@ class Sheet(tk.Frame):
|
|
3196
3229
|
run_binding_func=run_binding_func,
|
3197
3230
|
set_as_current=set_as_current,
|
3198
3231
|
)
|
3199
|
-
self.set_refresh_timer(redraw)
|
3200
|
-
return self
|
3232
|
+
return self.set_refresh_timer(redraw)
|
3201
3233
|
|
3202
3234
|
def toggle_select_column(
|
3203
3235
|
self,
|
@@ -3214,8 +3246,7 @@ class Sheet(tk.Frame):
|
|
3214
3246
|
run_binding_func=run_binding_func,
|
3215
3247
|
set_as_current=set_as_current,
|
3216
3248
|
)
|
3217
|
-
self.set_refresh_timer(redraw)
|
3218
|
-
return self
|
3249
|
+
return self.set_refresh_timer(redraw)
|
3219
3250
|
|
3220
3251
|
def create_selection_box(
|
3221
3252
|
self,
|
@@ -3239,8 +3270,7 @@ class Sheet(tk.Frame):
|
|
3239
3270
|
redraw: bool = True,
|
3240
3271
|
) -> Sheet:
|
3241
3272
|
self.MT.deselect(r=row, c=column, cell=cell, redraw=False)
|
3242
|
-
self.set_refresh_timer(redraw)
|
3243
|
-
return self
|
3273
|
+
return self.set_refresh_timer(redraw)
|
3244
3274
|
|
3245
3275
|
def deselect_any(
|
3246
3276
|
self,
|
@@ -3249,8 +3279,7 @@ class Sheet(tk.Frame):
|
|
3249
3279
|
redraw: bool = True,
|
3250
3280
|
) -> Sheet:
|
3251
3281
|
self.MT.deselect_any(rows=rows, columns=columns, redraw=False)
|
3252
|
-
self.set_refresh_timer(redraw)
|
3253
|
-
return self
|
3282
|
+
return self.set_refresh_timer(redraw)
|
3254
3283
|
|
3255
3284
|
# Row Heights and Column Widths
|
3256
3285
|
|
@@ -3277,15 +3306,15 @@ class Sheet(tk.Frame):
|
|
3277
3306
|
redraw: bool = True,
|
3278
3307
|
) -> Sheet:
|
3279
3308
|
self.MT.set_cell_size_to_text(r=row, c=column, only_set_if_too_small=only_set_if_too_small)
|
3280
|
-
self.set_refresh_timer(redraw)
|
3281
|
-
return self
|
3309
|
+
return self.set_refresh_timer(redraw)
|
3282
3310
|
|
3283
3311
|
def set_all_cell_sizes_to_text(
|
3284
3312
|
self,
|
3285
3313
|
redraw: bool = True,
|
3286
3314
|
width: int | None = None,
|
3315
|
+
slim: bool = False,
|
3287
3316
|
) -> tuple[list[float], list[float]]:
|
3288
|
-
self.MT.set_all_cell_sizes_to_text(w=width)
|
3317
|
+
self.MT.set_all_cell_sizes_to_text(w=width, slim=slim)
|
3289
3318
|
self.set_refresh_timer(redraw)
|
3290
3319
|
return self.MT.row_positions, self.MT.col_positions
|
3291
3320
|
|
@@ -3301,8 +3330,7 @@ class Sheet(tk.Frame):
|
|
3301
3330
|
only_set_if_too_small=only_set_if_too_small,
|
3302
3331
|
recreate=recreate_selection_boxes,
|
3303
3332
|
)
|
3304
|
-
self.set_refresh_timer(redraw)
|
3305
|
-
return self
|
3333
|
+
return self.set_refresh_timer(redraw)
|
3306
3334
|
|
3307
3335
|
def set_all_row_heights(
|
3308
3336
|
self,
|
@@ -3316,8 +3344,7 @@ class Sheet(tk.Frame):
|
|
3316
3344
|
only_set_if_too_small=only_set_if_too_small,
|
3317
3345
|
recreate=recreate_selection_boxes,
|
3318
3346
|
)
|
3319
|
-
self.set_refresh_timer(redraw)
|
3320
|
-
return self
|
3347
|
+
return self.set_refresh_timer(redraw)
|
3321
3348
|
|
3322
3349
|
def column_width(
|
3323
3350
|
self,
|
@@ -3338,8 +3365,7 @@ class Sheet(tk.Frame):
|
|
3338
3365
|
self.CH.set_col_width(col=column, width=width, only_set_if_too_small=only_set_if_too_small)
|
3339
3366
|
elif isinstance(column, int):
|
3340
3367
|
return int(self.MT.col_positions[column + 1] - self.MT.col_positions[column])
|
3341
|
-
self.set_refresh_timer(redraw)
|
3342
|
-
return self
|
3368
|
+
return self.set_refresh_timer(redraw)
|
3343
3369
|
|
3344
3370
|
def row_height(
|
3345
3371
|
self,
|
@@ -3360,8 +3386,7 @@ class Sheet(tk.Frame):
|
|
3360
3386
|
self.RI.set_row_height(row=row, height=height, only_set_if_too_small=only_set_if_too_small)
|
3361
3387
|
elif isinstance(row, int):
|
3362
3388
|
return int(self.MT.row_positions[row + 1] - self.MT.row_positions[row])
|
3363
|
-
self.set_refresh_timer(redraw)
|
3364
|
-
return self
|
3389
|
+
return self.set_refresh_timer(redraw)
|
3365
3390
|
|
3366
3391
|
def get_column_widths(self, canvas_positions: bool = False) -> list[float]:
|
3367
3392
|
if canvas_positions:
|
@@ -3411,8 +3436,7 @@ class Sheet(tk.Frame):
|
|
3411
3436
|
if self.ops.auto_resize_row_index:
|
3412
3437
|
self.ops.auto_resize_row_index = False
|
3413
3438
|
self.RI.set_width(pixels, set_TL=True)
|
3414
|
-
self.set_refresh_timer(redraw)
|
3415
|
-
return self
|
3439
|
+
return self.set_refresh_timer(redraw)
|
3416
3440
|
|
3417
3441
|
def set_height_of_header_to_text(self, text: None | str = None) -> Sheet:
|
3418
3442
|
self.CH.set_height_of_header_to_text(text=text)
|
@@ -3420,8 +3444,7 @@ class Sheet(tk.Frame):
|
|
3420
3444
|
|
3421
3445
|
def set_header_height_pixels(self, pixels: int, redraw: bool = True) -> Sheet:
|
3422
3446
|
self.CH.set_height(pixels, set_TL=True)
|
3423
|
-
self.set_refresh_timer(redraw)
|
3424
|
-
return self
|
3447
|
+
return self.set_refresh_timer(redraw)
|
3425
3448
|
|
3426
3449
|
def set_header_height_lines(self, nlines: int, redraw: bool = True) -> Sheet:
|
3427
3450
|
self.CH.set_height(
|
@@ -3431,8 +3454,7 @@ class Sheet(tk.Frame):
|
|
3431
3454
|
),
|
3432
3455
|
set_TL=True,
|
3433
3456
|
)
|
3434
|
-
self.set_refresh_timer(redraw)
|
3435
|
-
return self
|
3457
|
+
return self.set_refresh_timer(redraw)
|
3436
3458
|
|
3437
3459
|
def del_row_position(self, idx: int, deselect_all: bool = False) -> Sheet:
|
3438
3460
|
self.MT.del_row_position(idx=idx, deselect_all=deselect_all)
|
@@ -3464,8 +3486,7 @@ class Sheet(tk.Frame):
|
|
3464
3486
|
redraw: bool = False,
|
3465
3487
|
) -> Sheet:
|
3466
3488
|
self.MT.insert_col_position(idx=idx, width=width, deselect_all=deselect_all)
|
3467
|
-
self.set_refresh_timer(redraw)
|
3468
|
-
return self
|
3489
|
+
return self.set_refresh_timer(redraw)
|
3469
3490
|
|
3470
3491
|
def insert_row_position(
|
3471
3492
|
self,
|
@@ -3475,8 +3496,7 @@ class Sheet(tk.Frame):
|
|
3475
3496
|
redraw: bool = False,
|
3476
3497
|
) -> Sheet:
|
3477
3498
|
self.MT.insert_row_position(idx=idx, height=height, deselect_all=deselect_all)
|
3478
|
-
self.set_refresh_timer(redraw)
|
3479
|
-
return self
|
3499
|
+
return self.set_refresh_timer(redraw)
|
3480
3500
|
|
3481
3501
|
def insert_column_positions(
|
3482
3502
|
self,
|
@@ -3486,8 +3506,7 @@ class Sheet(tk.Frame):
|
|
3486
3506
|
redraw: bool = False,
|
3487
3507
|
) -> Sheet:
|
3488
3508
|
self.MT.insert_col_positions(idx=idx, widths=widths, deselect_all=deselect_all)
|
3489
|
-
self.set_refresh_timer(redraw)
|
3490
|
-
return self
|
3509
|
+
return self.set_refresh_timer(redraw)
|
3491
3510
|
|
3492
3511
|
def insert_row_positions(
|
3493
3512
|
self,
|
@@ -3497,8 +3516,7 @@ class Sheet(tk.Frame):
|
|
3497
3516
|
redraw: bool = False,
|
3498
3517
|
) -> Sheet:
|
3499
3518
|
self.MT.insert_row_positions(idx=idx, heights=heights, deselect_all=deselect_all)
|
3500
|
-
self.set_refresh_timer(redraw)
|
3501
|
-
return self
|
3519
|
+
return self.set_refresh_timer(redraw)
|
3502
3520
|
|
3503
3521
|
def sheet_display_dimensions(
|
3504
3522
|
self,
|
@@ -3648,8 +3666,7 @@ class Sheet(tk.Frame):
|
|
3648
3666
|
check_cell_visibility=check_cell_visibility,
|
3649
3667
|
redraw=False,
|
3650
3668
|
)
|
3651
|
-
self.set_refresh_timer(redraw)
|
3652
|
-
return self
|
3669
|
+
return self.set_refresh_timer(redraw)
|
3653
3670
|
|
3654
3671
|
def cell_visible(self, r: int, c: int) -> bool:
|
3655
3672
|
return self.MT.cell_visible(r, c)
|
@@ -3759,8 +3776,7 @@ class Sheet(tk.Frame):
|
|
3759
3776
|
)
|
3760
3777
|
if deselect_all:
|
3761
3778
|
self.MT.deselect(redraw=False)
|
3762
|
-
self.set_refresh_timer(redraw)
|
3763
|
-
return self
|
3779
|
+
return self.set_refresh_timer(redraw)
|
3764
3780
|
|
3765
3781
|
# uses data indexes
|
3766
3782
|
def show_columns(
|
@@ -3780,8 +3796,7 @@ class Sheet(tk.Frame):
|
|
3780
3796
|
self.MT.set_col_positions(cws)
|
3781
3797
|
if deselect_all:
|
3782
3798
|
self.MT.deselect(redraw=False)
|
3783
|
-
self.set_refresh_timer(redraw)
|
3784
|
-
return self
|
3799
|
+
return self.set_refresh_timer(redraw)
|
3785
3800
|
|
3786
3801
|
def all_columns_displayed(self, a: bool | None = None) -> bool:
|
3787
3802
|
v = bool(self.MT.all_columns_displayed)
|
@@ -3843,6 +3858,7 @@ class Sheet(tk.Frame):
|
|
3843
3858
|
redraw: bool = True,
|
3844
3859
|
deselect_all: bool = True,
|
3845
3860
|
data_indexes: bool = False,
|
3861
|
+
row_heights: bool = True,
|
3846
3862
|
) -> Sheet:
|
3847
3863
|
if isinstance(rows, int):
|
3848
3864
|
rows = {rows}
|
@@ -3870,17 +3886,17 @@ class Sheet(tk.Frame):
|
|
3870
3886
|
to_pop[i] = r
|
3871
3887
|
self.MT.displayed_rows = new_disp
|
3872
3888
|
self.MT.all_rows_displayed = False
|
3873
|
-
|
3874
|
-
|
3875
|
-
|
3876
|
-
|
3877
|
-
|
3878
|
-
|
3879
|
-
|
3889
|
+
if row_heights:
|
3890
|
+
self.MT.set_row_positions(
|
3891
|
+
pop_positions(
|
3892
|
+
itr=self.MT.gen_row_heights,
|
3893
|
+
to_pop=to_pop,
|
3894
|
+
save_to=self.MT.saved_row_heights,
|
3895
|
+
),
|
3896
|
+
)
|
3880
3897
|
if deselect_all:
|
3881
3898
|
self.MT.deselect(redraw=False)
|
3882
|
-
self.set_refresh_timer(redraw)
|
3883
|
-
return self
|
3899
|
+
return self.set_refresh_timer(redraw)
|
3884
3900
|
|
3885
3901
|
# uses data indexes
|
3886
3902
|
def show_rows(
|
@@ -3900,8 +3916,7 @@ class Sheet(tk.Frame):
|
|
3900
3916
|
self.MT.set_row_positions(rhs)
|
3901
3917
|
if deselect_all:
|
3902
3918
|
self.MT.deselect(redraw=False)
|
3903
|
-
self.set_refresh_timer(redraw)
|
3904
|
-
return self
|
3919
|
+
return self.set_refresh_timer(redraw)
|
3905
3920
|
|
3906
3921
|
def all_rows_displayed(self, a: bool | None = None) -> bool:
|
3907
3922
|
v = bool(self.MT.all_rows_displayed)
|
@@ -4088,7 +4103,9 @@ class Sheet(tk.Frame):
|
|
4088
4103
|
return self
|
4089
4104
|
|
4090
4105
|
def destroy_text_editor(self, event: object = None) -> Sheet:
|
4091
|
-
self.MT.hide_text_editor(
|
4106
|
+
self.MT.hide_text_editor(reason=event)
|
4107
|
+
self.RI.hide_text_editor(reason=event)
|
4108
|
+
self.CH.hide_text_editor(reason=event)
|
4092
4109
|
return self
|
4093
4110
|
|
4094
4111
|
def get_text_editor_widget(self, event: object = None) -> tk.Text | None:
|
@@ -4122,9 +4139,13 @@ class Sheet(tk.Frame):
|
|
4122
4139
|
return self.MT.text_editor.get()
|
4123
4140
|
|
4124
4141
|
def close_text_editor(self, set_data: bool = True) -> Sheet:
|
4142
|
+
event = new_tk_event("ButtonPress-1" if set_data else "Escape")
|
4125
4143
|
if self.MT.text_editor.open:
|
4126
|
-
event
|
4127
|
-
|
4144
|
+
self.MT.close_text_editor(event=event)
|
4145
|
+
if self.RI.text_editor.open:
|
4146
|
+
self.RI.close_text_editor(event=event)
|
4147
|
+
if self.CH.text_editor.open:
|
4148
|
+
self.CH.close_text_editor(event=event)
|
4128
4149
|
return self
|
4129
4150
|
|
4130
4151
|
# Sheet Options and Other Functions
|
@@ -4191,8 +4212,7 @@ class Sheet(tk.Frame):
|
|
4191
4212
|
if any(k in kwargs for k in scrollbar_options_keys):
|
4192
4213
|
self.set_scrollbar_options()
|
4193
4214
|
self.MT.create_rc_menus()
|
4194
|
-
self.set_refresh_timer(redraw)
|
4195
|
-
return self
|
4215
|
+
return self.set_refresh_timer(redraw)
|
4196
4216
|
|
4197
4217
|
def set_scrollbar_options(self) -> Sheet:
|
4198
4218
|
style = ttk.Style()
|
@@ -4479,31 +4499,37 @@ class Sheet(tk.Frame):
|
|
4479
4499
|
parent_column: int,
|
4480
4500
|
text_column: None | int = None,
|
4481
4501
|
push_ops: bool = False,
|
4502
|
+
row_heights: Sequence[int] | None | False = None,
|
4503
|
+
open_ids: Iterator[str] | None = None,
|
4504
|
+
safety: bool = True,
|
4505
|
+
ncols: int | None = None,
|
4482
4506
|
) -> Sheet:
|
4483
4507
|
if text_column is None:
|
4484
4508
|
text_column = iid_column
|
4485
4509
|
tally_of_ids = defaultdict(lambda: -1)
|
4486
|
-
|
4510
|
+
if not isinstance(ncols, int):
|
4511
|
+
ncols = max(map(len, data), default=0)
|
4487
4512
|
for rn, row in enumerate(data):
|
4488
|
-
if ncols > (lnr := len(row)):
|
4513
|
+
if safety and ncols > (lnr := len(row)):
|
4489
4514
|
row += self.MT.get_empty_row_seq(rn, end=ncols, start=lnr)
|
4490
4515
|
iid, pid = row[iid_column].lower(), row[parent_column].lower()
|
4491
|
-
if
|
4492
|
-
|
4493
|
-
|
4494
|
-
if tally_of_ids[iid] > 0:
|
4495
|
-
x = 1
|
4496
|
-
while iid in tally_of_ids:
|
4497
|
-
new = f"{row[iid_column]}_DUPLICATED_{x}"
|
4498
|
-
iid = new.lower()
|
4499
|
-
x += 1
|
4516
|
+
if safety:
|
4517
|
+
if not iid:
|
4518
|
+
continue
|
4500
4519
|
tally_of_ids[iid] += 1
|
4501
|
-
|
4520
|
+
if tally_of_ids[iid] > 0:
|
4521
|
+
x = 1
|
4522
|
+
while iid in tally_of_ids:
|
4523
|
+
new = f"{row[iid_column]}_DUPLICATED_{x}"
|
4524
|
+
iid = new.lower()
|
4525
|
+
x += 1
|
4526
|
+
tally_of_ids[iid] += 1
|
4527
|
+
row[iid_column] = new
|
4502
4528
|
if iid in self.RI.tree:
|
4503
4529
|
self.RI.tree[iid].text = row[text_column]
|
4504
4530
|
else:
|
4505
4531
|
self.RI.tree[iid] = Node(row[text_column], iid, "")
|
4506
|
-
if iid == pid or self.RI.pid_causes_recursive_loop(iid, pid):
|
4532
|
+
if safety and (iid == pid or self.RI.pid_causes_recursive_loop(iid, pid)):
|
4507
4533
|
row[parent_column] = ""
|
4508
4534
|
pid = ""
|
4509
4535
|
if pid:
|
@@ -4522,19 +4548,24 @@ class Sheet(tk.Frame):
|
|
4522
4548
|
self.RI.tree_rns[n.iid] = len(data)
|
4523
4549
|
data.append(newrow)
|
4524
4550
|
self.insert_rows(
|
4525
|
-
idx=0,
|
4526
4551
|
rows=[[self.RI.tree[iid]] + data[self.RI.tree_rns[iid]] for iid in self.get_children()],
|
4552
|
+
idx=0,
|
4553
|
+
heights={} if row_heights is False else row_heights,
|
4527
4554
|
row_index=True,
|
4528
4555
|
create_selections=False,
|
4529
4556
|
fill=False,
|
4530
4557
|
push_ops=push_ops,
|
4531
4558
|
)
|
4532
4559
|
self.RI.tree_rns = {n.iid: i for i, n in enumerate(self.MT._row_index)}
|
4533
|
-
|
4534
|
-
|
4535
|
-
|
4536
|
-
|
4537
|
-
|
4560
|
+
if open_ids:
|
4561
|
+
self.tree_set_open(open_ids=open_ids)
|
4562
|
+
else:
|
4563
|
+
self.hide_rows(
|
4564
|
+
{self.RI.tree_rns[iid] for iid in self.get_children() if self.RI.tree[iid].parent},
|
4565
|
+
deselect_all=False,
|
4566
|
+
data_indexes=True,
|
4567
|
+
row_heights=False if row_heights is False else True,
|
4568
|
+
)
|
4538
4569
|
return self
|
4539
4570
|
|
4540
4571
|
def tree_reset(self) -> Sheet:
|
@@ -4548,51 +4579,82 @@ class Sheet(tk.Frame):
|
|
4548
4579
|
"""
|
4549
4580
|
return self.RI.tree_open_ids
|
4550
4581
|
|
4551
|
-
def tree_set_open(self, open_ids:
|
4582
|
+
def tree_set_open(self, open_ids: Iterator[str]) -> Sheet:
|
4552
4583
|
"""
|
4553
4584
|
Accepts set[str] of iids that are open in the treeview
|
4554
4585
|
Closes everything else
|
4555
4586
|
"""
|
4556
4587
|
self.hide_rows(
|
4557
|
-
set(self.MT.displayed_rows),
|
4588
|
+
set(rn for rn in self.MT.displayed_rows if self.MT._row_index[rn].parent),
|
4558
4589
|
redraw=False,
|
4559
4590
|
deselect_all=False,
|
4560
4591
|
data_indexes=True,
|
4561
4592
|
)
|
4562
|
-
self.show_rows(
|
4563
|
-
(self.RI.tree_rns[iid] for iid in self.get_children("")),
|
4564
|
-
redraw=False,
|
4565
|
-
deselect_all=True,
|
4566
|
-
)
|
4567
4593
|
open_ids = set(filter(self.exists, map(str.lower, open_ids)))
|
4568
|
-
self.RI.tree_open_ids =
|
4594
|
+
self.RI.tree_open_ids = set()
|
4569
4595
|
if open_ids:
|
4570
|
-
self.
|
4571
|
-
|
4596
|
+
to_open = self._tree_open(open_ids)
|
4597
|
+
self.show_rows(
|
4598
|
+
rows=to_open,
|
4599
|
+
redraw=False,
|
4600
|
+
deselect_all=False,
|
4601
|
+
)
|
4602
|
+
return self.set_refresh_timer(True)
|
4603
|
+
|
4604
|
+
def _tree_open(self, items: set[str]) -> list[int]:
|
4605
|
+
"""
|
4606
|
+
Only meant for internal use
|
4607
|
+
"""
|
4608
|
+
to_open = []
|
4609
|
+
for item in filter(items.__contains__, self.get_children()):
|
4610
|
+
if self.RI.tree[item].children:
|
4611
|
+
self.RI.tree_open_ids.add(item)
|
4612
|
+
to_open.extend(self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item, check_open=True))
|
4613
|
+
return to_open
|
4572
4614
|
|
4573
|
-
def tree_open(self, *items) -> Sheet:
|
4615
|
+
def tree_open(self, *items, redraw: bool = True) -> Sheet:
|
4574
4616
|
"""
|
4575
4617
|
If used without args all items are opened
|
4576
4618
|
"""
|
4577
4619
|
if items := set(unpack(items)):
|
4578
|
-
|
4579
|
-
self.item(item, open_=True)
|
4620
|
+
to_open = self._tree_open(items)
|
4580
4621
|
else:
|
4622
|
+
to_open = []
|
4581
4623
|
for item in self.get_children():
|
4582
|
-
self.item
|
4583
|
-
|
4624
|
+
if self.RI.tree[item].children:
|
4625
|
+
self.RI.tree_open_ids.add(item)
|
4626
|
+
to_open.extend(self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item, check_open=True))
|
4627
|
+
return self.show_rows(
|
4628
|
+
rows=to_open,
|
4629
|
+
redraw=redraw,
|
4630
|
+
deselect_all=False,
|
4631
|
+
)
|
4584
4632
|
|
4585
|
-
def tree_close(self, *items) -> Sheet:
|
4633
|
+
def tree_close(self, *items, redraw: bool = True) -> Sheet:
|
4586
4634
|
"""
|
4587
4635
|
If used without args all items are closed
|
4588
4636
|
"""
|
4637
|
+
to_close = set()
|
4589
4638
|
if items:
|
4590
4639
|
for item in unpack(items):
|
4591
|
-
self.item
|
4640
|
+
if self.RI.tree[item].children:
|
4641
|
+
self.RI.tree_open_ids.discard(item)
|
4642
|
+
if self.RI.tree_rns[item] in self.MT.displayed_rows:
|
4643
|
+
for did in self.RI.get_iid_descendants(item, check_open=True):
|
4644
|
+
to_close.add(self.RI.tree_rns[did])
|
4592
4645
|
else:
|
4593
4646
|
for item in self.get_children():
|
4594
|
-
self.item
|
4595
|
-
|
4647
|
+
if self.RI.tree[item].children:
|
4648
|
+
self.RI.tree_open_ids.discard(item)
|
4649
|
+
if self.RI.tree_rns[item] in self.MT.displayed_rows:
|
4650
|
+
for did in self.RI.get_iid_descendants(item, check_open=True):
|
4651
|
+
to_close.add(self.RI.tree_rns[did])
|
4652
|
+
return self.hide_rows(
|
4653
|
+
rows=to_close,
|
4654
|
+
redraw=redraw,
|
4655
|
+
deselect_all=False,
|
4656
|
+
data_indexes=True,
|
4657
|
+
)
|
4596
4658
|
|
4597
4659
|
def insert(
|
4598
4660
|
self,
|
@@ -4720,12 +4782,12 @@ class Sheet(tk.Frame):
|
|
4720
4782
|
raise ValueError(f"item '{item.lower()}' does not exist.")
|
4721
4783
|
|
4722
4784
|
def rowitem(self, row: int, data_index: bool = False) -> str | None:
|
4723
|
-
|
4724
|
-
if
|
4725
|
-
row = self.data_r(row)
|
4726
|
-
if len(self.MT._row_index) > row:
|
4785
|
+
try:
|
4786
|
+
if data_index:
|
4727
4787
|
return self.MT._row_index[row].iid
|
4728
|
-
|
4788
|
+
return self.MT._row_index[self.MT.displayed_rows[row]].iid
|
4789
|
+
except Exception:
|
4790
|
+
return None
|
4729
4791
|
|
4730
4792
|
def get_children(self, item: None | str = None) -> Generator[str]:
|
4731
4793
|
if item is None:
|
@@ -4954,12 +5016,14 @@ class Sheet(tk.Frame):
|
|
4954
5016
|
|
4955
5017
|
# Functions not in docs
|
4956
5018
|
|
5019
|
+
def event_generate(self, *args, **kwargs):
|
5020
|
+
self.MT.event_generate(*args, **kwargs)
|
5021
|
+
|
4957
5022
|
def emit_event(
|
4958
5023
|
self,
|
4959
5024
|
event: str,
|
4960
|
-
data:
|
5025
|
+
data: EventDataDict | None = None,
|
4961
5026
|
) -> None:
|
4962
|
-
# data is a EventDataDict
|
4963
5027
|
if data is None:
|
4964
5028
|
data = EventDataDict()
|
4965
5029
|
data["sheetname"] = self.name
|
@@ -4967,9 +5031,10 @@ class Sheet(tk.Frame):
|
|
4967
5031
|
for func in self.bound_events[event]:
|
4968
5032
|
func(data)
|
4969
5033
|
|
4970
|
-
def set_refresh_timer(self, redraw: bool = True) ->
|
5034
|
+
def set_refresh_timer(self, redraw: bool = True) -> Sheet:
|
4971
5035
|
if redraw and self.after_redraw_id is None:
|
4972
5036
|
self.after_redraw_id = self.after(self.after_redraw_time_ms, self.after_redraw)
|
5037
|
+
return self
|
4973
5038
|
|
4974
5039
|
def after_redraw(self) -> None:
|
4975
5040
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
@@ -5218,7 +5283,7 @@ class Sheet(tk.Frame):
|
|
5218
5283
|
reset_col_positions: bool = True,
|
5219
5284
|
reset_row_positions: bool = True,
|
5220
5285
|
redraw: bool = True,
|
5221
|
-
):
|
5286
|
+
) -> object:
|
5222
5287
|
self.set_refresh_timer(redraw)
|
5223
5288
|
return self.MT.data_reference(newdataref, reset_col_positions, reset_row_positions)
|
5224
5289
|
|
@@ -5229,11 +5294,11 @@ class Sheet(tk.Frame):
|
|
5229
5294
|
value: object = "",
|
5230
5295
|
redraw: bool = True,
|
5231
5296
|
keep_formatting: bool = True,
|
5232
|
-
) ->
|
5297
|
+
) -> Sheet:
|
5233
5298
|
if not keep_formatting:
|
5234
5299
|
self.MT.delete_cell_format(r, c, clear_values=False)
|
5235
5300
|
self.MT.set_cell_data(r, c, value)
|
5236
|
-
self.set_refresh_timer(redraw)
|
5301
|
+
return self.set_refresh_timer(redraw)
|
5237
5302
|
|
5238
5303
|
def set_row_data(
|
5239
5304
|
self,
|
@@ -5242,7 +5307,7 @@ class Sheet(tk.Frame):
|
|
5242
5307
|
add_columns: bool = True,
|
5243
5308
|
redraw: bool = True,
|
5244
5309
|
keep_formatting: bool = True,
|
5245
|
-
) ->
|
5310
|
+
) -> Sheet:
|
5246
5311
|
if r >= len(self.MT.data):
|
5247
5312
|
raise Exception("Row number is out of range")
|
5248
5313
|
if not keep_formatting:
|
@@ -5265,7 +5330,7 @@ class Sheet(tk.Frame):
|
|
5265
5330
|
self.MT.data[r].append(v)
|
5266
5331
|
else:
|
5267
5332
|
self.set_cell_data(r=r, c=c, value=v, redraw=False, keep_formatting=keep_formatting)
|
5268
|
-
self.set_refresh_timer(redraw)
|
5333
|
+
return self.set_refresh_timer(redraw)
|
5269
5334
|
|
5270
5335
|
def set_column_data(
|
5271
5336
|
self,
|
@@ -5274,7 +5339,7 @@ class Sheet(tk.Frame):
|
|
5274
5339
|
add_rows: bool = True,
|
5275
5340
|
redraw: bool = True,
|
5276
5341
|
keep_formatting: bool = True,
|
5277
|
-
) ->
|
5342
|
+
) -> Sheet:
|
5278
5343
|
if not keep_formatting:
|
5279
5344
|
self.MT.delete_column_format(c, clear_values=False)
|
5280
5345
|
if add_rows:
|
@@ -5297,14 +5362,14 @@ class Sheet(tk.Frame):
|
|
5297
5362
|
if c >= len(self.MT.data[rn]):
|
5298
5363
|
self.MT.fix_row_len(rn, c)
|
5299
5364
|
self.set_cell_data(r=rn, c=c, value=v, redraw=False, keep_formatting=keep_formatting)
|
5300
|
-
self.set_refresh_timer(redraw)
|
5365
|
+
return self.set_refresh_timer(redraw)
|
5301
5366
|
|
5302
5367
|
def readonly_rows(
|
5303
5368
|
self,
|
5304
5369
|
rows: list | int = [],
|
5305
5370
|
readonly: bool = True,
|
5306
5371
|
redraw: bool = False,
|
5307
|
-
) ->
|
5372
|
+
) -> Sheet:
|
5308
5373
|
if isinstance(rows, int):
|
5309
5374
|
rows = [rows]
|
5310
5375
|
else:
|
@@ -5318,14 +5383,14 @@ class Sheet(tk.Frame):
|
|
5318
5383
|
if r not in self.MT.row_options:
|
5319
5384
|
self.MT.row_options[r] = {}
|
5320
5385
|
self.MT.row_options[r]["readonly"] = True
|
5321
|
-
self.set_refresh_timer(redraw)
|
5386
|
+
return self.set_refresh_timer(redraw)
|
5322
5387
|
|
5323
5388
|
def readonly_columns(
|
5324
5389
|
self,
|
5325
5390
|
columns: list | int = [],
|
5326
5391
|
readonly: bool = True,
|
5327
5392
|
redraw: bool = False,
|
5328
|
-
) ->
|
5393
|
+
) -> Sheet:
|
5329
5394
|
if isinstance(columns, int):
|
5330
5395
|
columns = [columns]
|
5331
5396
|
else:
|
@@ -5339,7 +5404,7 @@ class Sheet(tk.Frame):
|
|
5339
5404
|
if c not in self.MT.col_options:
|
5340
5405
|
self.MT.col_options[c] = {}
|
5341
5406
|
self.MT.col_options[c]["readonly"] = True
|
5342
|
-
self.set_refresh_timer(redraw)
|
5407
|
+
return self.set_refresh_timer(redraw)
|
5343
5408
|
|
5344
5409
|
def readonly_cells(
|
5345
5410
|
self,
|
@@ -5348,7 +5413,7 @@ class Sheet(tk.Frame):
|
|
5348
5413
|
cells: list = [],
|
5349
5414
|
readonly: bool = True,
|
5350
5415
|
redraw: bool = False,
|
5351
|
-
) ->
|
5416
|
+
) -> Sheet:
|
5352
5417
|
if not readonly:
|
5353
5418
|
if cells:
|
5354
5419
|
for r, c in cells:
|
@@ -5370,31 +5435,31 @@ class Sheet(tk.Frame):
|
|
5370
5435
|
if (row, column) not in self.MT.cell_options:
|
5371
5436
|
self.MT.cell_options[(row, column)] = {}
|
5372
5437
|
self.MT.cell_options[(row, column)]["readonly"] = True
|
5373
|
-
self.set_refresh_timer(redraw)
|
5438
|
+
return self.set_refresh_timer(redraw)
|
5374
5439
|
|
5375
5440
|
def readonly_header(
|
5376
5441
|
self,
|
5377
5442
|
columns: list = [],
|
5378
5443
|
readonly: bool = True,
|
5379
5444
|
redraw: bool = False,
|
5380
|
-
) ->
|
5445
|
+
) -> Sheet:
|
5381
5446
|
self.CH.readonly_header(columns=columns, readonly=readonly)
|
5382
|
-
self.set_refresh_timer(redraw)
|
5447
|
+
return self.set_refresh_timer(redraw)
|
5383
5448
|
|
5384
5449
|
def readonly_index(
|
5385
5450
|
self,
|
5386
5451
|
rows: list = [],
|
5387
5452
|
readonly: bool = True,
|
5388
5453
|
redraw: bool = False,
|
5389
|
-
) ->
|
5454
|
+
) -> Sheet:
|
5390
5455
|
self.RI.readonly_index(rows=rows, readonly=readonly)
|
5391
|
-
self.set_refresh_timer(redraw)
|
5456
|
+
return self.set_refresh_timer(redraw)
|
5392
5457
|
|
5393
5458
|
def dehighlight_rows(
|
5394
5459
|
self,
|
5395
5460
|
rows: list[int] | Literal["all"] = [],
|
5396
5461
|
redraw: bool = True,
|
5397
|
-
) ->
|
5462
|
+
) -> Sheet:
|
5398
5463
|
if isinstance(rows, int):
|
5399
5464
|
rows = [rows]
|
5400
5465
|
if not rows or rows == "all":
|
@@ -5415,13 +5480,13 @@ class Sheet(tk.Frame):
|
|
5415
5480
|
del self.RI.cell_options[r]["highlight"]
|
5416
5481
|
except Exception:
|
5417
5482
|
pass
|
5418
|
-
self.set_refresh_timer(redraw)
|
5483
|
+
return self.set_refresh_timer(redraw)
|
5419
5484
|
|
5420
5485
|
def dehighlight_columns(
|
5421
5486
|
self,
|
5422
5487
|
columns: list[int] | Literal["all"] = [],
|
5423
5488
|
redraw: bool = True,
|
5424
|
-
) ->
|
5489
|
+
) -> Sheet:
|
5425
5490
|
if isinstance(columns, int):
|
5426
5491
|
columns = [columns]
|
5427
5492
|
if not columns or columns == "all":
|
@@ -5442,7 +5507,7 @@ class Sheet(tk.Frame):
|
|
5442
5507
|
del self.CH.cell_options[c]["highlight"]
|
5443
5508
|
except Exception:
|
5444
5509
|
pass
|
5445
|
-
self.set_refresh_timer(redraw)
|
5510
|
+
return self.set_refresh_timer(redraw)
|
5446
5511
|
|
5447
5512
|
def highlight_rows(
|
5448
5513
|
self,
|
@@ -5453,14 +5518,14 @@ class Sheet(tk.Frame):
|
|
5453
5518
|
redraw: bool = True,
|
5454
5519
|
end_of_screen: bool = False,
|
5455
5520
|
overwrite: bool = True,
|
5456
|
-
) ->
|
5521
|
+
) -> Sheet:
|
5457
5522
|
if bg is None and fg is None:
|
5458
5523
|
return
|
5459
5524
|
for r in (rows,) if isinstance(rows, int) else rows:
|
5460
5525
|
add_highlight(self.MT.row_options, r, bg, fg, end_of_screen, overwrite)
|
5461
5526
|
if highlight_index:
|
5462
5527
|
self.highlight_cells(cells=rows, canvas="index", bg=bg, fg=fg, redraw=False)
|
5463
|
-
self.set_refresh_timer(redraw)
|
5528
|
+
return self.set_refresh_timer(redraw)
|
5464
5529
|
|
5465
5530
|
def highlight_columns(
|
5466
5531
|
self,
|
@@ -5470,26 +5535,26 @@ class Sheet(tk.Frame):
|
|
5470
5535
|
highlight_header: bool = True,
|
5471
5536
|
redraw: bool = True,
|
5472
5537
|
overwrite: bool = True,
|
5473
|
-
) ->
|
5538
|
+
) -> Sheet:
|
5474
5539
|
if bg is False and fg is False:
|
5475
5540
|
return
|
5476
5541
|
for c in (columns,) if isinstance(columns, int) else columns:
|
5477
5542
|
add_highlight(self.MT.col_options, c, bg, fg, None, overwrite)
|
5478
5543
|
if highlight_header:
|
5479
5544
|
self.highlight_cells(cells=columns, canvas="header", bg=bg, fg=fg, redraw=False)
|
5480
|
-
self.set_refresh_timer(redraw)
|
5545
|
+
return self.set_refresh_timer(redraw)
|
5481
5546
|
|
5482
5547
|
def highlight_cells(
|
5483
5548
|
self,
|
5484
|
-
row: int = 0,
|
5485
|
-
column: int = 0,
|
5486
|
-
cells: list = [],
|
5549
|
+
row: int | Literal["all"] = 0,
|
5550
|
+
column: int | Literal["all"] = 0,
|
5551
|
+
cells: list[tuple[int, int]] = [],
|
5487
5552
|
canvas: Literal["table", "index", "header"] = "table",
|
5488
5553
|
bg: bool | None | str = False,
|
5489
5554
|
fg: bool | None | str = False,
|
5490
5555
|
redraw: bool = True,
|
5491
5556
|
overwrite: bool = True,
|
5492
|
-
) ->
|
5557
|
+
) -> Sheet:
|
5493
5558
|
if bg is False and fg is False:
|
5494
5559
|
return
|
5495
5560
|
if canvas == "table":
|
@@ -5497,31 +5562,41 @@ class Sheet(tk.Frame):
|
|
5497
5562
|
for r_, c_ in cells:
|
5498
5563
|
add_highlight(self.MT.cell_options, (r_, c_), bg, fg, None, overwrite)
|
5499
5564
|
else:
|
5500
|
-
if
|
5501
|
-
|
5502
|
-
|
5565
|
+
if (
|
5566
|
+
isinstance(row, str)
|
5567
|
+
and row.lower() == "all"
|
5568
|
+
and isinstance(column, str)
|
5569
|
+
and column.lower() == "all"
|
5570
|
+
):
|
5571
|
+
totalrows, totalcols = self.MT.total_data_rows(), self.MT.total_data_cols()
|
5572
|
+
for r_ in range(totalrows):
|
5573
|
+
for c_ in range(totalcols):
|
5574
|
+
add_highlight(self.MT.cell_options, (r_, c_), bg, fg, None, overwrite)
|
5575
|
+
elif isinstance(row, str) and row.lower() == "all" and isinstance(column, int):
|
5576
|
+
for r_ in range(self.MT.total_data_rows()):
|
5577
|
+
add_highlight(self.MT.cell_options, (r_, column), bg, fg, None, overwrite)
|
5503
5578
|
elif isinstance(column, str) and column.lower() == "all" and isinstance(row, int):
|
5504
|
-
|
5505
|
-
|
5579
|
+
for c_ in range(self.MT.total_data_cols()):
|
5580
|
+
add_highlight(self.MT.cell_options, (row, c_), bg, fg, None, overwrite)
|
5506
5581
|
elif isinstance(row, int) and isinstance(column, int):
|
5507
|
-
|
5508
|
-
citer = (column,)
|
5509
|
-
for r_ in riter:
|
5510
|
-
for c_ in citer:
|
5511
|
-
add_highlight(self.MT.cell_options, (r_, c_), bg, fg, None, overwrite)
|
5582
|
+
add_highlight(self.MT.cell_options, (row, column), bg, fg, None, overwrite)
|
5512
5583
|
elif canvas in ("row_index", "index"):
|
5513
|
-
|
5514
|
-
|
5515
|
-
|
5516
|
-
|
5517
|
-
|
5584
|
+
if isinstance(cells, int):
|
5585
|
+
add_highlight(self.RI.cell_options, cells, bg, fg, None, overwrite)
|
5586
|
+
elif cells:
|
5587
|
+
for r_ in cells:
|
5588
|
+
add_highlight(self.RI.cell_options, r_, bg, fg, None, overwrite)
|
5589
|
+
else:
|
5590
|
+
add_highlight(self.RI.cell_options, row, bg, fg, None, overwrite)
|
5518
5591
|
elif canvas == "header":
|
5519
|
-
|
5520
|
-
|
5521
|
-
|
5522
|
-
|
5523
|
-
|
5524
|
-
|
5592
|
+
if isinstance(cells, int):
|
5593
|
+
add_highlight(self.CH.cell_options, cells, bg, fg, None, overwrite)
|
5594
|
+
elif cells:
|
5595
|
+
for c_ in cells:
|
5596
|
+
add_highlight(self.CH.cell_options, c_, bg, fg, None, overwrite)
|
5597
|
+
else:
|
5598
|
+
add_highlight(self.CH.cell_options, column, bg, fg, None, overwrite)
|
5599
|
+
return self.set_refresh_timer(redraw)
|
5525
5600
|
|
5526
5601
|
def dehighlight_cells(
|
5527
5602
|
self,
|
@@ -5531,7 +5606,7 @@ class Sheet(tk.Frame):
|
|
5531
5606
|
canvas: Literal["table", "row_index", "header"] = "table",
|
5532
5607
|
all_: bool = False,
|
5533
5608
|
redraw: bool = True,
|
5534
|
-
) ->
|
5609
|
+
) -> Sheet:
|
5535
5610
|
if row == "all" and canvas == "table":
|
5536
5611
|
for k, v in self.MT.cell_options.items():
|
5537
5612
|
if "highlight" in v:
|
@@ -5550,7 +5625,7 @@ class Sheet(tk.Frame):
|
|
5550
5625
|
try:
|
5551
5626
|
del self.MT.cell_options[t]["highlight"]
|
5552
5627
|
except Exception:
|
5553
|
-
|
5628
|
+
continue
|
5554
5629
|
elif not all_:
|
5555
5630
|
if (
|
5556
5631
|
row,
|
@@ -5567,7 +5642,7 @@ class Sheet(tk.Frame):
|
|
5567
5642
|
try:
|
5568
5643
|
del self.RI.cell_options[r]["highlight"]
|
5569
5644
|
except Exception:
|
5570
|
-
|
5645
|
+
continue
|
5571
5646
|
elif not all_:
|
5572
5647
|
if row in self.RI.cell_options and "highlight" in self.RI.cell_options[row]:
|
5573
5648
|
del self.RI.cell_options[row]["highlight"]
|
@@ -5581,7 +5656,7 @@ class Sheet(tk.Frame):
|
|
5581
5656
|
try:
|
5582
5657
|
del self.CH.cell_options[c]["highlight"]
|
5583
5658
|
except Exception:
|
5584
|
-
|
5659
|
+
continue
|
5585
5660
|
elif not all_:
|
5586
5661
|
if column in self.CH.cell_options and "highlight" in self.CH.cell_options[column]:
|
5587
5662
|
del self.CH.cell_options[column]["highlight"]
|
@@ -5589,7 +5664,7 @@ class Sheet(tk.Frame):
|
|
5589
5664
|
for c in self.CH.cell_options:
|
5590
5665
|
if "highlight" in self.CH.cell_options[c]:
|
5591
5666
|
del self.CH.cell_options[c]["highlight"]
|
5592
|
-
self.set_refresh_timer(redraw)
|
5667
|
+
return self.set_refresh_timer(redraw)
|
5593
5668
|
|
5594
5669
|
def get_highlighted_cells(self, canvas: str = "table") -> dict | None:
|
5595
5670
|
if canvas == "table":
|
@@ -5606,7 +5681,7 @@ class Sheet(tk.Frame):
|
|
5606
5681
|
cells: list = [],
|
5607
5682
|
align: str | None = "global",
|
5608
5683
|
redraw: bool = True,
|
5609
|
-
) ->
|
5684
|
+
) -> Sheet:
|
5610
5685
|
if isinstance(cells, dict):
|
5611
5686
|
for k, v in cells.items():
|
5612
5687
|
set_align(self.MT.cell_options, k, convert_align(v))
|
@@ -5616,7 +5691,7 @@ class Sheet(tk.Frame):
|
|
5616
5691
|
set_align(self.MT.cell_options, k, align)
|
5617
5692
|
else:
|
5618
5693
|
set_align(self.MT.cell_options, (row, column), convert_align(align))
|
5619
|
-
self.set_refresh_timer(redraw)
|
5694
|
+
return self.set_refresh_timer(redraw)
|
5620
5695
|
|
5621
5696
|
def align_rows(
|
5622
5697
|
self,
|
@@ -5624,7 +5699,7 @@ class Sheet(tk.Frame):
|
|
5624
5699
|
align: str | None = "global",
|
5625
5700
|
align_index: bool = False,
|
5626
5701
|
redraw: bool = True,
|
5627
|
-
) ->
|
5702
|
+
) -> Sheet:
|
5628
5703
|
if isinstance(rows, dict):
|
5629
5704
|
for k, v in rows.items():
|
5630
5705
|
align = convert_align(v)
|
@@ -5641,7 +5716,7 @@ class Sheet(tk.Frame):
|
|
5641
5716
|
set_align(self.MT.row_options, rows, convert_align(align))
|
5642
5717
|
if align_index:
|
5643
5718
|
set_align(self.RI.cell_options, rows, align)
|
5644
|
-
self.set_refresh_timer(redraw)
|
5719
|
+
return self.set_refresh_timer(redraw)
|
5645
5720
|
|
5646
5721
|
def align_columns(
|
5647
5722
|
self,
|
@@ -5649,7 +5724,7 @@ class Sheet(tk.Frame):
|
|
5649
5724
|
align: str | None = "global",
|
5650
5725
|
align_header: bool = False,
|
5651
5726
|
redraw: bool = True,
|
5652
|
-
) ->
|
5727
|
+
) -> Sheet:
|
5653
5728
|
if isinstance(columns, dict):
|
5654
5729
|
for k, v in columns.items():
|
5655
5730
|
align = convert_align(v)
|
@@ -5666,14 +5741,14 @@ class Sheet(tk.Frame):
|
|
5666
5741
|
set_align(self.MT.col_options, columns, convert_align(align))
|
5667
5742
|
if align_header:
|
5668
5743
|
set_align(self.CH.cell_options, columns, align)
|
5669
|
-
self.set_refresh_timer(redraw)
|
5744
|
+
return self.set_refresh_timer(redraw)
|
5670
5745
|
|
5671
5746
|
def align_header(
|
5672
5747
|
self,
|
5673
5748
|
columns: list | dict | int = [],
|
5674
5749
|
align: str | None = "global",
|
5675
5750
|
redraw: bool = True,
|
5676
|
-
) ->
|
5751
|
+
) -> Sheet:
|
5677
5752
|
if isinstance(columns, dict):
|
5678
5753
|
for k, v in columns.items():
|
5679
5754
|
set_align(self.CH.cell_options, k, convert_align(v))
|
@@ -5683,14 +5758,14 @@ class Sheet(tk.Frame):
|
|
5683
5758
|
set_align(self.CH.cell_options, k, align)
|
5684
5759
|
elif isinstance(columns, int):
|
5685
5760
|
set_align(self.CH.cell_options, columns, convert_align(align))
|
5686
|
-
self.set_refresh_timer(redraw)
|
5761
|
+
return self.set_refresh_timer(redraw)
|
5687
5762
|
|
5688
5763
|
def align_index(
|
5689
5764
|
self,
|
5690
5765
|
rows: list | dict | int = [],
|
5691
5766
|
align: str | None = "global",
|
5692
5767
|
redraw: bool = True,
|
5693
|
-
) ->
|
5768
|
+
) -> Sheet:
|
5694
5769
|
if isinstance(rows, dict):
|
5695
5770
|
for k, v in rows.items():
|
5696
5771
|
set_align(self.RI.cell_options, k, convert_align(v))
|
@@ -5700,7 +5775,7 @@ class Sheet(tk.Frame):
|
|
5700
5775
|
set_align(self.RI.cell_options, k, align)
|
5701
5776
|
elif isinstance(rows, int):
|
5702
5777
|
set_align(self.RI.cell_options, rows, convert_align(align))
|
5703
|
-
self.set_refresh_timer(redraw)
|
5778
|
+
return self.set_refresh_timer(redraw)
|
5704
5779
|
|
5705
5780
|
def get_cell_alignments(self) -> dict:
|
5706
5781
|
return {(r, c): v["align"] for (r, c), v in self.MT.cell_options.items() if "align" in v}
|
@@ -5944,10 +6019,16 @@ class Sheet(tk.Frame):
|
|
5944
6019
|
c: int | Literal["all"] = 0,
|
5945
6020
|
*args,
|
5946
6021
|
**kwargs,
|
5947
|
-
) ->
|
6022
|
+
) -> Sheet:
|
5948
6023
|
kwargs = get_dropdown_kwargs(*args, **kwargs)
|
5949
6024
|
d = get_dropdown_dict(**kwargs)
|
5950
|
-
|
6025
|
+
if kwargs["set_value"] is None:
|
6026
|
+
if kwargs["values"] and (v := self.MT.get_cell_data(r, c)) not in kwargs["values"]:
|
6027
|
+
v = kwargs["values"][0]
|
6028
|
+
else:
|
6029
|
+
v == ""
|
6030
|
+
else:
|
6031
|
+
v = kwargs["set_value"]
|
5951
6032
|
if isinstance(r, str) and r.lower() == "all" and isinstance(c, int):
|
5952
6033
|
for r_ in range(self.MT.total_data_rows()):
|
5953
6034
|
self._create_dropdown(r_, c, v, d)
|
@@ -5961,7 +6042,7 @@ class Sheet(tk.Frame):
|
|
5961
6042
|
self._create_dropdown(r_, c_, v, d)
|
5962
6043
|
elif isinstance(r, int) and isinstance(c, int):
|
5963
6044
|
self._create_dropdown(r, c, v, d)
|
5964
|
-
self.set_refresh_timer(kwargs["redraw"])
|
6045
|
+
return self.set_refresh_timer(kwargs["redraw"])
|
5965
6046
|
|
5966
6047
|
def _create_dropdown(self, r: int, c: int, v: object, d: dict) -> None:
|
5967
6048
|
self.del_cell_options_dropdown_and_checkbox(r, c)
|
@@ -5974,15 +6055,15 @@ class Sheet(tk.Frame):
|
|
5974
6055
|
c: int | Literal["all"] = 0,
|
5975
6056
|
*args,
|
5976
6057
|
**kwargs,
|
5977
|
-
) ->
|
5978
|
-
self.create_dropdown(r=r, c=c, **get_dropdown_kwargs(*args, **kwargs))
|
6058
|
+
) -> Sheet:
|
6059
|
+
return self.create_dropdown(r=r, c=c, **get_dropdown_kwargs(*args, **kwargs))
|
5979
6060
|
|
5980
6061
|
def dropdown_row(
|
5981
6062
|
self,
|
5982
6063
|
r: Iterator[int] | int | Literal["all"] = 0,
|
5983
6064
|
*args,
|
5984
6065
|
**kwargs,
|
5985
|
-
) ->
|
6066
|
+
) -> Sheet:
|
5986
6067
|
kwargs = get_dropdown_kwargs(*args, **kwargs)
|
5987
6068
|
d = get_dropdown_dict(**kwargs)
|
5988
6069
|
v = kwargs["set_value"] if kwargs["set_value"] is not None else kwargs["values"][0] if kwargs["values"] else ""
|
@@ -5994,7 +6075,7 @@ class Sheet(tk.Frame):
|
|
5994
6075
|
elif is_iterable(r):
|
5995
6076
|
for r_ in r:
|
5996
6077
|
self._dropdown_row(r_, v, d)
|
5997
|
-
self.set_refresh_timer(kwargs["redraw"])
|
6078
|
+
return self.set_refresh_timer(kwargs["redraw"])
|
5998
6079
|
|
5999
6080
|
def _dropdown_row(self, r: int, v: object, d: dict) -> None:
|
6000
6081
|
self.del_row_options_dropdown_and_checkbox(r)
|
@@ -6007,7 +6088,7 @@ class Sheet(tk.Frame):
|
|
6007
6088
|
c: Iterator[int] | int | Literal["all"] = 0,
|
6008
6089
|
*args,
|
6009
6090
|
**kwargs,
|
6010
|
-
) ->
|
6091
|
+
) -> Sheet:
|
6011
6092
|
kwargs = get_dropdown_kwargs(*args, **kwargs)
|
6012
6093
|
d = get_dropdown_dict(**kwargs)
|
6013
6094
|
v = kwargs["set_value"] if kwargs["set_value"] is not None else kwargs["values"][0] if kwargs["values"] else ""
|
@@ -6019,7 +6100,7 @@ class Sheet(tk.Frame):
|
|
6019
6100
|
elif is_iterable(c):
|
6020
6101
|
for c_ in c:
|
6021
6102
|
self._dropdown_column(c_, v, d)
|
6022
|
-
self.set_refresh_timer(kwargs["redraw"])
|
6103
|
+
return self.set_refresh_timer(kwargs["redraw"])
|
6023
6104
|
|
6024
6105
|
def _dropdown_column(self, c: int, v: object, d: dict) -> None:
|
6025
6106
|
self.del_column_options_dropdown_and_checkbox(c)
|
@@ -6032,7 +6113,7 @@ class Sheet(tk.Frame):
|
|
6032
6113
|
c: Iterator[int] | int | Literal["all"] = 0,
|
6033
6114
|
*args,
|
6034
6115
|
**kwargs,
|
6035
|
-
) ->
|
6116
|
+
) -> Sheet:
|
6036
6117
|
kwargs = get_dropdown_kwargs(*args, **kwargs)
|
6037
6118
|
d = get_dropdown_dict(**kwargs)
|
6038
6119
|
v = kwargs["set_value"] if kwargs["set_value"] is not None else kwargs["values"][0] if kwargs["values"] else ""
|
@@ -6044,7 +6125,7 @@ class Sheet(tk.Frame):
|
|
6044
6125
|
elif is_iterable(c):
|
6045
6126
|
for c_ in c:
|
6046
6127
|
self._create_header_dropdown(c_, v, d)
|
6047
|
-
self.set_refresh_timer(kwargs["redraw"])
|
6128
|
+
return self.set_refresh_timer(kwargs["redraw"])
|
6048
6129
|
|
6049
6130
|
def _create_header_dropdown(self, c: int, v: object, d: dict) -> None:
|
6050
6131
|
self.del_header_cell_options_dropdown_and_checkbox(c)
|
@@ -6056,7 +6137,7 @@ class Sheet(tk.Frame):
|
|
6056
6137
|
r: Iterator[int] | int | Literal["all"] = 0,
|
6057
6138
|
*args,
|
6058
6139
|
**kwargs,
|
6059
|
-
) ->
|
6140
|
+
) -> Sheet:
|
6060
6141
|
kwargs = get_dropdown_kwargs(*args, **kwargs)
|
6061
6142
|
d = get_dropdown_dict(**kwargs)
|
6062
6143
|
v = kwargs["set_value"] if kwargs["set_value"] is not None else kwargs["values"][0] if kwargs["values"] else ""
|
@@ -6068,7 +6149,7 @@ class Sheet(tk.Frame):
|
|
6068
6149
|
elif is_iterable(r):
|
6069
6150
|
for r_ in r:
|
6070
6151
|
self._create_index_dropdown(r_, v, d)
|
6071
|
-
self.set_refresh_timer(kwargs["redraw"])
|
6152
|
+
return self.set_refresh_timer(kwargs["redraw"])
|
6072
6153
|
|
6073
6154
|
def _create_index_dropdown(self, r: int, v: object, d: dict) -> None:
|
6074
6155
|
self.del_index_cell_options_dropdown_and_checkbox(r)
|
@@ -6327,7 +6408,7 @@ class Sheet(tk.Frame):
|
|
6327
6408
|
formatter_class: object = None,
|
6328
6409
|
redraw: bool = True,
|
6329
6410
|
**kwargs,
|
6330
|
-
) ->
|
6411
|
+
) -> Sheet:
|
6331
6412
|
kwargs = fix_format_kwargs({"formatter": formatter_class, **formatter_options, **kwargs})
|
6332
6413
|
if isinstance(r, str) and r.lower() == "all" and isinstance(c, int):
|
6333
6414
|
for r_ in range(self.MT.total_data_rows()):
|
@@ -6341,7 +6422,7 @@ class Sheet(tk.Frame):
|
|
6341
6422
|
self._format_cell(r_, c_, kwargs)
|
6342
6423
|
else:
|
6343
6424
|
self._format_cell(r, c, kwargs)
|
6344
|
-
self.set_refresh_timer(redraw)
|
6425
|
+
return self.set_refresh_timer(redraw)
|
6345
6426
|
|
6346
6427
|
def _format_cell(self, r: int, c: int, d: dict) -> None:
|
6347
6428
|
v = d["value"] if "value" in d else self.MT.get_cell_data(r, c)
|
@@ -6354,7 +6435,7 @@ class Sheet(tk.Frame):
|
|
6354
6435
|
r: Literal["all"] | int = "all",
|
6355
6436
|
c: Literal["all"] | int = "all",
|
6356
6437
|
clear_values: bool = False,
|
6357
|
-
) ->
|
6438
|
+
) -> Sheet:
|
6358
6439
|
if isinstance(r, str) and r.lower() == "all" and isinstance(c, int):
|
6359
6440
|
for r_, c_ in self.MT.cell_options:
|
6360
6441
|
if "format" in self.MT.cell_options[(r_, c)]:
|
@@ -6369,6 +6450,7 @@ class Sheet(tk.Frame):
|
|
6369
6450
|
self.MT.delete_cell_format(r_, c_, clear_values=clear_values)
|
6370
6451
|
else:
|
6371
6452
|
self.MT.delete_cell_format(r, c, clear_values=clear_values)
|
6453
|
+
return self
|
6372
6454
|
|
6373
6455
|
def format_row(
|
6374
6456
|
self,
|
@@ -6377,7 +6459,7 @@ class Sheet(tk.Frame):
|
|
6377
6459
|
formatter_class: object = None,
|
6378
6460
|
redraw: bool = True,
|
6379
6461
|
**kwargs,
|
6380
|
-
) ->
|
6462
|
+
) -> Sheet:
|
6381
6463
|
kwargs = fix_format_kwargs({"formatter": formatter_class, **formatter_options, **kwargs})
|
6382
6464
|
if isinstance(r, str) and r.lower() == "all":
|
6383
6465
|
for r_ in range(len(self.MT.data)):
|
@@ -6387,7 +6469,7 @@ class Sheet(tk.Frame):
|
|
6387
6469
|
self._format_row(r_, kwargs)
|
6388
6470
|
else:
|
6389
6471
|
self._format_row(r, kwargs)
|
6390
|
-
self.set_refresh_timer(redraw)
|
6472
|
+
return self.set_refresh_timer(redraw)
|
6391
6473
|
|
6392
6474
|
def _format_row(self, r: int, d: dict) -> None:
|
6393
6475
|
self.del_row_options_checkbox(r)
|
@@ -6404,12 +6486,13 @@ class Sheet(tk.Frame):
|
|
6404
6486
|
self,
|
6405
6487
|
r: Iterator[int] | int | Literal["all"] = "all",
|
6406
6488
|
clear_values: bool = False,
|
6407
|
-
) ->
|
6489
|
+
) -> Sheet:
|
6408
6490
|
if is_iterable(r):
|
6409
6491
|
for r_ in r:
|
6410
6492
|
self.MT.delete_row_format(r_, clear_values=clear_values)
|
6411
6493
|
else:
|
6412
6494
|
self.MT.delete_row_format(r, clear_values=clear_values)
|
6495
|
+
return self
|
6413
6496
|
|
6414
6497
|
def format_column(
|
6415
6498
|
self,
|
@@ -6418,7 +6501,7 @@ class Sheet(tk.Frame):
|
|
6418
6501
|
formatter_class: object = None,
|
6419
6502
|
redraw: bool = True,
|
6420
6503
|
**kwargs,
|
6421
|
-
) ->
|
6504
|
+
) -> Sheet:
|
6422
6505
|
kwargs = fix_format_kwargs({"formatter": formatter_class, **formatter_options, **kwargs})
|
6423
6506
|
if isinstance(c, str) and c.lower() == "all":
|
6424
6507
|
for c_ in range(self.MT.total_data_cols()):
|
@@ -6428,7 +6511,7 @@ class Sheet(tk.Frame):
|
|
6428
6511
|
self._format_column(c_, kwargs)
|
6429
6512
|
else:
|
6430
6513
|
self._format_column(c, kwargs)
|
6431
|
-
self.set_refresh_timer(redraw)
|
6514
|
+
return self.set_refresh_timer(redraw)
|
6432
6515
|
|
6433
6516
|
def _format_column(self, c: int, d: dict) -> None:
|
6434
6517
|
self.del_column_options_checkbox(c)
|
@@ -6445,12 +6528,13 @@ class Sheet(tk.Frame):
|
|
6445
6528
|
self,
|
6446
6529
|
c: Iterator[int] | int | Literal["all"] = "all",
|
6447
6530
|
clear_values: bool = False,
|
6448
|
-
) ->
|
6531
|
+
) -> Sheet:
|
6449
6532
|
if is_iterable(c):
|
6450
6533
|
for c_ in c:
|
6451
6534
|
self.MT.delete_column_format(c_, clear_values=clear_values)
|
6452
6535
|
else:
|
6453
6536
|
self.MT.delete_column_format(c, clear_values=clear_values)
|
6537
|
+
return self
|
6454
6538
|
|
6455
6539
|
|
6456
6540
|
class Dropdown(Sheet):
|
@@ -6479,6 +6563,7 @@ class Dropdown(Sheet):
|
|
6479
6563
|
Sheet.__init__(
|
6480
6564
|
self,
|
6481
6565
|
parent=parent,
|
6566
|
+
name="!SheetDropdown",
|
6482
6567
|
outline_thickness=outline_thickness,
|
6483
6568
|
show_horizontal_grid=True,
|
6484
6569
|
show_vertical_grid=False,
|
@@ -6491,6 +6576,7 @@ class Dropdown(Sheet):
|
|
6491
6576
|
horizontal_grid_to_end_of_window=True,
|
6492
6577
|
set_cell_sizes_on_zoom=True,
|
6493
6578
|
show_selected_cells_border=False,
|
6579
|
+
scrollbar_show_arrows=False,
|
6494
6580
|
)
|
6495
6581
|
self.parent = parent
|
6496
6582
|
self.close_dropdown_window = close_dropdown_window
|
@@ -6623,4 +6709,4 @@ class Dropdown(Sheet):
|
|
6623
6709
|
redraw=False,
|
6624
6710
|
verify=False,
|
6625
6711
|
)
|
6626
|
-
self.set_all_cell_sizes_to_text(redraw=redraw, width=width)
|
6712
|
+
self.set_all_cell_sizes_to_text(redraw=redraw, width=width, slim=True)
|