tksheet 7.1.21__py3-none-any.whl → 7.1.22__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 +114 -53
- tksheet/row_index.py +42 -29
- tksheet/sheet.py +317 -261
- 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.22.dist-info}/METADATA +5 -5
- tksheet-7.1.22.dist-info/RECORD +20 -0
- tksheet-7.1.21.dist-info/RECORD +0 -20
- {tksheet-7.1.21.dist-info → tksheet-7.1.22.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.1.21.dist-info → tksheet-7.1.22.dist-info}/WHEEL +0 -0
- {tksheet-7.1.21.dist-info → tksheet-7.1.22.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
|
+
set(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,24 +4579,25 @@ 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(self.MT.displayed_rows),
|
4589
|
+
set(rn for rn in self.MT.displayed_rows if self.MT._row_index[rn].parent),
|
4558
4590
|
redraw=False,
|
4559
4591
|
deselect_all=False,
|
4560
4592
|
data_indexes=True,
|
4561
4593
|
)
|
4562
|
-
self.show_rows(
|
4563
|
-
|
4564
|
-
|
4565
|
-
|
4566
|
-
)
|
4594
|
+
# self.show_rows(
|
4595
|
+
# (self.RI.tree_rns[iid] for iid in self.get_children("")),
|
4596
|
+
# redraw=False,
|
4597
|
+
# deselect_all=True,
|
4598
|
+
# )
|
4567
4599
|
open_ids = set(filter(self.exists, map(str.lower, open_ids)))
|
4568
|
-
self.RI.tree_open_ids =
|
4600
|
+
self.RI.tree_open_ids = set()
|
4569
4601
|
if open_ids:
|
4570
4602
|
self.tree_open(open_ids)
|
4571
4603
|
return self
|
@@ -4720,12 +4752,12 @@ class Sheet(tk.Frame):
|
|
4720
4752
|
raise ValueError(f"item '{item.lower()}' does not exist.")
|
4721
4753
|
|
4722
4754
|
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:
|
4755
|
+
try:
|
4756
|
+
if data_index:
|
4727
4757
|
return self.MT._row_index[row].iid
|
4728
|
-
|
4758
|
+
return self.MT._row_index[self.MT.displayed_rows[row]].iid
|
4759
|
+
except Exception:
|
4760
|
+
return None
|
4729
4761
|
|
4730
4762
|
def get_children(self, item: None | str = None) -> Generator[str]:
|
4731
4763
|
if item is None:
|
@@ -4954,12 +4986,14 @@ class Sheet(tk.Frame):
|
|
4954
4986
|
|
4955
4987
|
# Functions not in docs
|
4956
4988
|
|
4989
|
+
def event_generate(self, *args, **kwargs):
|
4990
|
+
self.MT.event_generate(*args, **kwargs)
|
4991
|
+
|
4957
4992
|
def emit_event(
|
4958
4993
|
self,
|
4959
4994
|
event: str,
|
4960
|
-
data:
|
4995
|
+
data: EventDataDict | None = None,
|
4961
4996
|
) -> None:
|
4962
|
-
# data is a EventDataDict
|
4963
4997
|
if data is None:
|
4964
4998
|
data = EventDataDict()
|
4965
4999
|
data["sheetname"] = self.name
|
@@ -4967,9 +5001,10 @@ class Sheet(tk.Frame):
|
|
4967
5001
|
for func in self.bound_events[event]:
|
4968
5002
|
func(data)
|
4969
5003
|
|
4970
|
-
def set_refresh_timer(self, redraw: bool = True) ->
|
5004
|
+
def set_refresh_timer(self, redraw: bool = True) -> Sheet:
|
4971
5005
|
if redraw and self.after_redraw_id is None:
|
4972
5006
|
self.after_redraw_id = self.after(self.after_redraw_time_ms, self.after_redraw)
|
5007
|
+
return self
|
4973
5008
|
|
4974
5009
|
def after_redraw(self) -> None:
|
4975
5010
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
@@ -5218,7 +5253,7 @@ class Sheet(tk.Frame):
|
|
5218
5253
|
reset_col_positions: bool = True,
|
5219
5254
|
reset_row_positions: bool = True,
|
5220
5255
|
redraw: bool = True,
|
5221
|
-
):
|
5256
|
+
) -> object:
|
5222
5257
|
self.set_refresh_timer(redraw)
|
5223
5258
|
return self.MT.data_reference(newdataref, reset_col_positions, reset_row_positions)
|
5224
5259
|
|
@@ -5229,11 +5264,11 @@ class Sheet(tk.Frame):
|
|
5229
5264
|
value: object = "",
|
5230
5265
|
redraw: bool = True,
|
5231
5266
|
keep_formatting: bool = True,
|
5232
|
-
) ->
|
5267
|
+
) -> Sheet:
|
5233
5268
|
if not keep_formatting:
|
5234
5269
|
self.MT.delete_cell_format(r, c, clear_values=False)
|
5235
5270
|
self.MT.set_cell_data(r, c, value)
|
5236
|
-
self.set_refresh_timer(redraw)
|
5271
|
+
return self.set_refresh_timer(redraw)
|
5237
5272
|
|
5238
5273
|
def set_row_data(
|
5239
5274
|
self,
|
@@ -5242,7 +5277,7 @@ class Sheet(tk.Frame):
|
|
5242
5277
|
add_columns: bool = True,
|
5243
5278
|
redraw: bool = True,
|
5244
5279
|
keep_formatting: bool = True,
|
5245
|
-
) ->
|
5280
|
+
) -> Sheet:
|
5246
5281
|
if r >= len(self.MT.data):
|
5247
5282
|
raise Exception("Row number is out of range")
|
5248
5283
|
if not keep_formatting:
|
@@ -5265,7 +5300,7 @@ class Sheet(tk.Frame):
|
|
5265
5300
|
self.MT.data[r].append(v)
|
5266
5301
|
else:
|
5267
5302
|
self.set_cell_data(r=r, c=c, value=v, redraw=False, keep_formatting=keep_formatting)
|
5268
|
-
self.set_refresh_timer(redraw)
|
5303
|
+
return self.set_refresh_timer(redraw)
|
5269
5304
|
|
5270
5305
|
def set_column_data(
|
5271
5306
|
self,
|
@@ -5274,7 +5309,7 @@ class Sheet(tk.Frame):
|
|
5274
5309
|
add_rows: bool = True,
|
5275
5310
|
redraw: bool = True,
|
5276
5311
|
keep_formatting: bool = True,
|
5277
|
-
) ->
|
5312
|
+
) -> Sheet:
|
5278
5313
|
if not keep_formatting:
|
5279
5314
|
self.MT.delete_column_format(c, clear_values=False)
|
5280
5315
|
if add_rows:
|
@@ -5297,14 +5332,14 @@ class Sheet(tk.Frame):
|
|
5297
5332
|
if c >= len(self.MT.data[rn]):
|
5298
5333
|
self.MT.fix_row_len(rn, c)
|
5299
5334
|
self.set_cell_data(r=rn, c=c, value=v, redraw=False, keep_formatting=keep_formatting)
|
5300
|
-
self.set_refresh_timer(redraw)
|
5335
|
+
return self.set_refresh_timer(redraw)
|
5301
5336
|
|
5302
5337
|
def readonly_rows(
|
5303
5338
|
self,
|
5304
5339
|
rows: list | int = [],
|
5305
5340
|
readonly: bool = True,
|
5306
5341
|
redraw: bool = False,
|
5307
|
-
) ->
|
5342
|
+
) -> Sheet:
|
5308
5343
|
if isinstance(rows, int):
|
5309
5344
|
rows = [rows]
|
5310
5345
|
else:
|
@@ -5318,14 +5353,14 @@ class Sheet(tk.Frame):
|
|
5318
5353
|
if r not in self.MT.row_options:
|
5319
5354
|
self.MT.row_options[r] = {}
|
5320
5355
|
self.MT.row_options[r]["readonly"] = True
|
5321
|
-
self.set_refresh_timer(redraw)
|
5356
|
+
return self.set_refresh_timer(redraw)
|
5322
5357
|
|
5323
5358
|
def readonly_columns(
|
5324
5359
|
self,
|
5325
5360
|
columns: list | int = [],
|
5326
5361
|
readonly: bool = True,
|
5327
5362
|
redraw: bool = False,
|
5328
|
-
) ->
|
5363
|
+
) -> Sheet:
|
5329
5364
|
if isinstance(columns, int):
|
5330
5365
|
columns = [columns]
|
5331
5366
|
else:
|
@@ -5339,7 +5374,7 @@ class Sheet(tk.Frame):
|
|
5339
5374
|
if c not in self.MT.col_options:
|
5340
5375
|
self.MT.col_options[c] = {}
|
5341
5376
|
self.MT.col_options[c]["readonly"] = True
|
5342
|
-
self.set_refresh_timer(redraw)
|
5377
|
+
return self.set_refresh_timer(redraw)
|
5343
5378
|
|
5344
5379
|
def readonly_cells(
|
5345
5380
|
self,
|
@@ -5348,7 +5383,7 @@ class Sheet(tk.Frame):
|
|
5348
5383
|
cells: list = [],
|
5349
5384
|
readonly: bool = True,
|
5350
5385
|
redraw: bool = False,
|
5351
|
-
) ->
|
5386
|
+
) -> Sheet:
|
5352
5387
|
if not readonly:
|
5353
5388
|
if cells:
|
5354
5389
|
for r, c in cells:
|
@@ -5370,31 +5405,31 @@ class Sheet(tk.Frame):
|
|
5370
5405
|
if (row, column) not in self.MT.cell_options:
|
5371
5406
|
self.MT.cell_options[(row, column)] = {}
|
5372
5407
|
self.MT.cell_options[(row, column)]["readonly"] = True
|
5373
|
-
self.set_refresh_timer(redraw)
|
5408
|
+
return self.set_refresh_timer(redraw)
|
5374
5409
|
|
5375
5410
|
def readonly_header(
|
5376
5411
|
self,
|
5377
5412
|
columns: list = [],
|
5378
5413
|
readonly: bool = True,
|
5379
5414
|
redraw: bool = False,
|
5380
|
-
) ->
|
5415
|
+
) -> Sheet:
|
5381
5416
|
self.CH.readonly_header(columns=columns, readonly=readonly)
|
5382
|
-
self.set_refresh_timer(redraw)
|
5417
|
+
return self.set_refresh_timer(redraw)
|
5383
5418
|
|
5384
5419
|
def readonly_index(
|
5385
5420
|
self,
|
5386
5421
|
rows: list = [],
|
5387
5422
|
readonly: bool = True,
|
5388
5423
|
redraw: bool = False,
|
5389
|
-
) ->
|
5424
|
+
) -> Sheet:
|
5390
5425
|
self.RI.readonly_index(rows=rows, readonly=readonly)
|
5391
|
-
self.set_refresh_timer(redraw)
|
5426
|
+
return self.set_refresh_timer(redraw)
|
5392
5427
|
|
5393
5428
|
def dehighlight_rows(
|
5394
5429
|
self,
|
5395
5430
|
rows: list[int] | Literal["all"] = [],
|
5396
5431
|
redraw: bool = True,
|
5397
|
-
) ->
|
5432
|
+
) -> Sheet:
|
5398
5433
|
if isinstance(rows, int):
|
5399
5434
|
rows = [rows]
|
5400
5435
|
if not rows or rows == "all":
|
@@ -5415,13 +5450,13 @@ class Sheet(tk.Frame):
|
|
5415
5450
|
del self.RI.cell_options[r]["highlight"]
|
5416
5451
|
except Exception:
|
5417
5452
|
pass
|
5418
|
-
self.set_refresh_timer(redraw)
|
5453
|
+
return self.set_refresh_timer(redraw)
|
5419
5454
|
|
5420
5455
|
def dehighlight_columns(
|
5421
5456
|
self,
|
5422
5457
|
columns: list[int] | Literal["all"] = [],
|
5423
5458
|
redraw: bool = True,
|
5424
|
-
) ->
|
5459
|
+
) -> Sheet:
|
5425
5460
|
if isinstance(columns, int):
|
5426
5461
|
columns = [columns]
|
5427
5462
|
if not columns or columns == "all":
|
@@ -5442,7 +5477,7 @@ class Sheet(tk.Frame):
|
|
5442
5477
|
del self.CH.cell_options[c]["highlight"]
|
5443
5478
|
except Exception:
|
5444
5479
|
pass
|
5445
|
-
self.set_refresh_timer(redraw)
|
5480
|
+
return self.set_refresh_timer(redraw)
|
5446
5481
|
|
5447
5482
|
def highlight_rows(
|
5448
5483
|
self,
|
@@ -5453,14 +5488,14 @@ class Sheet(tk.Frame):
|
|
5453
5488
|
redraw: bool = True,
|
5454
5489
|
end_of_screen: bool = False,
|
5455
5490
|
overwrite: bool = True,
|
5456
|
-
) ->
|
5491
|
+
) -> Sheet:
|
5457
5492
|
if bg is None and fg is None:
|
5458
5493
|
return
|
5459
5494
|
for r in (rows,) if isinstance(rows, int) else rows:
|
5460
5495
|
add_highlight(self.MT.row_options, r, bg, fg, end_of_screen, overwrite)
|
5461
5496
|
if highlight_index:
|
5462
5497
|
self.highlight_cells(cells=rows, canvas="index", bg=bg, fg=fg, redraw=False)
|
5463
|
-
self.set_refresh_timer(redraw)
|
5498
|
+
return self.set_refresh_timer(redraw)
|
5464
5499
|
|
5465
5500
|
def highlight_columns(
|
5466
5501
|
self,
|
@@ -5470,26 +5505,26 @@ class Sheet(tk.Frame):
|
|
5470
5505
|
highlight_header: bool = True,
|
5471
5506
|
redraw: bool = True,
|
5472
5507
|
overwrite: bool = True,
|
5473
|
-
) ->
|
5508
|
+
) -> Sheet:
|
5474
5509
|
if bg is False and fg is False:
|
5475
5510
|
return
|
5476
5511
|
for c in (columns,) if isinstance(columns, int) else columns:
|
5477
5512
|
add_highlight(self.MT.col_options, c, bg, fg, None, overwrite)
|
5478
5513
|
if highlight_header:
|
5479
5514
|
self.highlight_cells(cells=columns, canvas="header", bg=bg, fg=fg, redraw=False)
|
5480
|
-
self.set_refresh_timer(redraw)
|
5515
|
+
return self.set_refresh_timer(redraw)
|
5481
5516
|
|
5482
5517
|
def highlight_cells(
|
5483
5518
|
self,
|
5484
|
-
row: int = 0,
|
5485
|
-
column: int = 0,
|
5486
|
-
cells: list = [],
|
5519
|
+
row: int | Literal["all"] = 0,
|
5520
|
+
column: int | Literal["all"] = 0,
|
5521
|
+
cells: list[tuple[int, int]] = [],
|
5487
5522
|
canvas: Literal["table", "index", "header"] = "table",
|
5488
5523
|
bg: bool | None | str = False,
|
5489
5524
|
fg: bool | None | str = False,
|
5490
5525
|
redraw: bool = True,
|
5491
5526
|
overwrite: bool = True,
|
5492
|
-
) ->
|
5527
|
+
) -> Sheet:
|
5493
5528
|
if bg is False and fg is False:
|
5494
5529
|
return
|
5495
5530
|
if canvas == "table":
|
@@ -5497,31 +5532,41 @@ class Sheet(tk.Frame):
|
|
5497
5532
|
for r_, c_ in cells:
|
5498
5533
|
add_highlight(self.MT.cell_options, (r_, c_), bg, fg, None, overwrite)
|
5499
5534
|
else:
|
5500
|
-
if
|
5501
|
-
|
5502
|
-
|
5535
|
+
if (
|
5536
|
+
isinstance(row, str)
|
5537
|
+
and row.lower() == "all"
|
5538
|
+
and isinstance(column, str)
|
5539
|
+
and column.lower() == "all"
|
5540
|
+
):
|
5541
|
+
totalrows, totalcols = self.MT.total_data_rows(), self.MT.total_data_cols()
|
5542
|
+
for r_ in range(totalrows):
|
5543
|
+
for c_ in range(totalcols):
|
5544
|
+
add_highlight(self.MT.cell_options, (r_, c_), bg, fg, None, overwrite)
|
5545
|
+
elif isinstance(row, str) and row.lower() == "all" and isinstance(column, int):
|
5546
|
+
for r_ in range(self.MT.total_data_rows()):
|
5547
|
+
add_highlight(self.MT.cell_options, (r_, column), bg, fg, None, overwrite)
|
5503
5548
|
elif isinstance(column, str) and column.lower() == "all" and isinstance(row, int):
|
5504
|
-
|
5505
|
-
|
5549
|
+
for c_ in range(self.MT.total_data_cols()):
|
5550
|
+
add_highlight(self.MT.cell_options, (row, c_), bg, fg, None, overwrite)
|
5506
5551
|
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)
|
5552
|
+
add_highlight(self.MT.cell_options, (row, column), bg, fg, None, overwrite)
|
5512
5553
|
elif canvas in ("row_index", "index"):
|
5513
|
-
|
5514
|
-
|
5515
|
-
|
5516
|
-
|
5517
|
-
|
5554
|
+
if isinstance(cells, int):
|
5555
|
+
add_highlight(self.RI.cell_options, cells, bg, fg, None, overwrite)
|
5556
|
+
elif cells:
|
5557
|
+
for r_ in cells:
|
5558
|
+
add_highlight(self.RI.cell_options, r_, bg, fg, None, overwrite)
|
5559
|
+
else:
|
5560
|
+
add_highlight(self.RI.cell_options, row, bg, fg, None, overwrite)
|
5518
5561
|
elif canvas == "header":
|
5519
|
-
|
5520
|
-
|
5521
|
-
|
5522
|
-
|
5523
|
-
|
5524
|
-
|
5562
|
+
if isinstance(cells, int):
|
5563
|
+
add_highlight(self.CH.cell_options, cells, bg, fg, None, overwrite)
|
5564
|
+
elif cells:
|
5565
|
+
for c_ in cells:
|
5566
|
+
add_highlight(self.CH.cell_options, c_, bg, fg, None, overwrite)
|
5567
|
+
else:
|
5568
|
+
add_highlight(self.CH.cell_options, column, bg, fg, None, overwrite)
|
5569
|
+
return self.set_refresh_timer(redraw)
|
5525
5570
|
|
5526
5571
|
def dehighlight_cells(
|
5527
5572
|
self,
|
@@ -5531,7 +5576,7 @@ class Sheet(tk.Frame):
|
|
5531
5576
|
canvas: Literal["table", "row_index", "header"] = "table",
|
5532
5577
|
all_: bool = False,
|
5533
5578
|
redraw: bool = True,
|
5534
|
-
) ->
|
5579
|
+
) -> Sheet:
|
5535
5580
|
if row == "all" and canvas == "table":
|
5536
5581
|
for k, v in self.MT.cell_options.items():
|
5537
5582
|
if "highlight" in v:
|
@@ -5550,7 +5595,7 @@ class Sheet(tk.Frame):
|
|
5550
5595
|
try:
|
5551
5596
|
del self.MT.cell_options[t]["highlight"]
|
5552
5597
|
except Exception:
|
5553
|
-
|
5598
|
+
continue
|
5554
5599
|
elif not all_:
|
5555
5600
|
if (
|
5556
5601
|
row,
|
@@ -5567,7 +5612,7 @@ class Sheet(tk.Frame):
|
|
5567
5612
|
try:
|
5568
5613
|
del self.RI.cell_options[r]["highlight"]
|
5569
5614
|
except Exception:
|
5570
|
-
|
5615
|
+
continue
|
5571
5616
|
elif not all_:
|
5572
5617
|
if row in self.RI.cell_options and "highlight" in self.RI.cell_options[row]:
|
5573
5618
|
del self.RI.cell_options[row]["highlight"]
|
@@ -5581,7 +5626,7 @@ class Sheet(tk.Frame):
|
|
5581
5626
|
try:
|
5582
5627
|
del self.CH.cell_options[c]["highlight"]
|
5583
5628
|
except Exception:
|
5584
|
-
|
5629
|
+
continue
|
5585
5630
|
elif not all_:
|
5586
5631
|
if column in self.CH.cell_options and "highlight" in self.CH.cell_options[column]:
|
5587
5632
|
del self.CH.cell_options[column]["highlight"]
|
@@ -5589,7 +5634,7 @@ class Sheet(tk.Frame):
|
|
5589
5634
|
for c in self.CH.cell_options:
|
5590
5635
|
if "highlight" in self.CH.cell_options[c]:
|
5591
5636
|
del self.CH.cell_options[c]["highlight"]
|
5592
|
-
self.set_refresh_timer(redraw)
|
5637
|
+
return self.set_refresh_timer(redraw)
|
5593
5638
|
|
5594
5639
|
def get_highlighted_cells(self, canvas: str = "table") -> dict | None:
|
5595
5640
|
if canvas == "table":
|
@@ -5606,7 +5651,7 @@ class Sheet(tk.Frame):
|
|
5606
5651
|
cells: list = [],
|
5607
5652
|
align: str | None = "global",
|
5608
5653
|
redraw: bool = True,
|
5609
|
-
) ->
|
5654
|
+
) -> Sheet:
|
5610
5655
|
if isinstance(cells, dict):
|
5611
5656
|
for k, v in cells.items():
|
5612
5657
|
set_align(self.MT.cell_options, k, convert_align(v))
|
@@ -5616,7 +5661,7 @@ class Sheet(tk.Frame):
|
|
5616
5661
|
set_align(self.MT.cell_options, k, align)
|
5617
5662
|
else:
|
5618
5663
|
set_align(self.MT.cell_options, (row, column), convert_align(align))
|
5619
|
-
self.set_refresh_timer(redraw)
|
5664
|
+
return self.set_refresh_timer(redraw)
|
5620
5665
|
|
5621
5666
|
def align_rows(
|
5622
5667
|
self,
|
@@ -5624,7 +5669,7 @@ class Sheet(tk.Frame):
|
|
5624
5669
|
align: str | None = "global",
|
5625
5670
|
align_index: bool = False,
|
5626
5671
|
redraw: bool = True,
|
5627
|
-
) ->
|
5672
|
+
) -> Sheet:
|
5628
5673
|
if isinstance(rows, dict):
|
5629
5674
|
for k, v in rows.items():
|
5630
5675
|
align = convert_align(v)
|
@@ -5641,7 +5686,7 @@ class Sheet(tk.Frame):
|
|
5641
5686
|
set_align(self.MT.row_options, rows, convert_align(align))
|
5642
5687
|
if align_index:
|
5643
5688
|
set_align(self.RI.cell_options, rows, align)
|
5644
|
-
self.set_refresh_timer(redraw)
|
5689
|
+
return self.set_refresh_timer(redraw)
|
5645
5690
|
|
5646
5691
|
def align_columns(
|
5647
5692
|
self,
|
@@ -5649,7 +5694,7 @@ class Sheet(tk.Frame):
|
|
5649
5694
|
align: str | None = "global",
|
5650
5695
|
align_header: bool = False,
|
5651
5696
|
redraw: bool = True,
|
5652
|
-
) ->
|
5697
|
+
) -> Sheet:
|
5653
5698
|
if isinstance(columns, dict):
|
5654
5699
|
for k, v in columns.items():
|
5655
5700
|
align = convert_align(v)
|
@@ -5666,14 +5711,14 @@ class Sheet(tk.Frame):
|
|
5666
5711
|
set_align(self.MT.col_options, columns, convert_align(align))
|
5667
5712
|
if align_header:
|
5668
5713
|
set_align(self.CH.cell_options, columns, align)
|
5669
|
-
self.set_refresh_timer(redraw)
|
5714
|
+
return self.set_refresh_timer(redraw)
|
5670
5715
|
|
5671
5716
|
def align_header(
|
5672
5717
|
self,
|
5673
5718
|
columns: list | dict | int = [],
|
5674
5719
|
align: str | None = "global",
|
5675
5720
|
redraw: bool = True,
|
5676
|
-
) ->
|
5721
|
+
) -> Sheet:
|
5677
5722
|
if isinstance(columns, dict):
|
5678
5723
|
for k, v in columns.items():
|
5679
5724
|
set_align(self.CH.cell_options, k, convert_align(v))
|
@@ -5683,14 +5728,14 @@ class Sheet(tk.Frame):
|
|
5683
5728
|
set_align(self.CH.cell_options, k, align)
|
5684
5729
|
elif isinstance(columns, int):
|
5685
5730
|
set_align(self.CH.cell_options, columns, convert_align(align))
|
5686
|
-
self.set_refresh_timer(redraw)
|
5731
|
+
return self.set_refresh_timer(redraw)
|
5687
5732
|
|
5688
5733
|
def align_index(
|
5689
5734
|
self,
|
5690
5735
|
rows: list | dict | int = [],
|
5691
5736
|
align: str | None = "global",
|
5692
5737
|
redraw: bool = True,
|
5693
|
-
) ->
|
5738
|
+
) -> Sheet:
|
5694
5739
|
if isinstance(rows, dict):
|
5695
5740
|
for k, v in rows.items():
|
5696
5741
|
set_align(self.RI.cell_options, k, convert_align(v))
|
@@ -5700,7 +5745,7 @@ class Sheet(tk.Frame):
|
|
5700
5745
|
set_align(self.RI.cell_options, k, align)
|
5701
5746
|
elif isinstance(rows, int):
|
5702
5747
|
set_align(self.RI.cell_options, rows, convert_align(align))
|
5703
|
-
self.set_refresh_timer(redraw)
|
5748
|
+
return self.set_refresh_timer(redraw)
|
5704
5749
|
|
5705
5750
|
def get_cell_alignments(self) -> dict:
|
5706
5751
|
return {(r, c): v["align"] for (r, c), v in self.MT.cell_options.items() if "align" in v}
|
@@ -5944,10 +5989,16 @@ class Sheet(tk.Frame):
|
|
5944
5989
|
c: int | Literal["all"] = 0,
|
5945
5990
|
*args,
|
5946
5991
|
**kwargs,
|
5947
|
-
) ->
|
5992
|
+
) -> Sheet:
|
5948
5993
|
kwargs = get_dropdown_kwargs(*args, **kwargs)
|
5949
5994
|
d = get_dropdown_dict(**kwargs)
|
5950
|
-
|
5995
|
+
if kwargs["set_value"] is None:
|
5996
|
+
if kwargs["values"] and (v := self.MT.get_cell_data(r, c)) not in kwargs["values"]:
|
5997
|
+
v = kwargs["values"][0]
|
5998
|
+
else:
|
5999
|
+
v == ""
|
6000
|
+
else:
|
6001
|
+
v = kwargs["set_value"]
|
5951
6002
|
if isinstance(r, str) and r.lower() == "all" and isinstance(c, int):
|
5952
6003
|
for r_ in range(self.MT.total_data_rows()):
|
5953
6004
|
self._create_dropdown(r_, c, v, d)
|
@@ -5961,7 +6012,7 @@ class Sheet(tk.Frame):
|
|
5961
6012
|
self._create_dropdown(r_, c_, v, d)
|
5962
6013
|
elif isinstance(r, int) and isinstance(c, int):
|
5963
6014
|
self._create_dropdown(r, c, v, d)
|
5964
|
-
self.set_refresh_timer(kwargs["redraw"])
|
6015
|
+
return self.set_refresh_timer(kwargs["redraw"])
|
5965
6016
|
|
5966
6017
|
def _create_dropdown(self, r: int, c: int, v: object, d: dict) -> None:
|
5967
6018
|
self.del_cell_options_dropdown_and_checkbox(r, c)
|
@@ -5974,15 +6025,15 @@ class Sheet(tk.Frame):
|
|
5974
6025
|
c: int | Literal["all"] = 0,
|
5975
6026
|
*args,
|
5976
6027
|
**kwargs,
|
5977
|
-
) ->
|
5978
|
-
self.create_dropdown(r=r, c=c, **get_dropdown_kwargs(*args, **kwargs))
|
6028
|
+
) -> Sheet:
|
6029
|
+
return self.create_dropdown(r=r, c=c, **get_dropdown_kwargs(*args, **kwargs))
|
5979
6030
|
|
5980
6031
|
def dropdown_row(
|
5981
6032
|
self,
|
5982
6033
|
r: Iterator[int] | int | Literal["all"] = 0,
|
5983
6034
|
*args,
|
5984
6035
|
**kwargs,
|
5985
|
-
) ->
|
6036
|
+
) -> Sheet:
|
5986
6037
|
kwargs = get_dropdown_kwargs(*args, **kwargs)
|
5987
6038
|
d = get_dropdown_dict(**kwargs)
|
5988
6039
|
v = kwargs["set_value"] if kwargs["set_value"] is not None else kwargs["values"][0] if kwargs["values"] else ""
|
@@ -5994,7 +6045,7 @@ class Sheet(tk.Frame):
|
|
5994
6045
|
elif is_iterable(r):
|
5995
6046
|
for r_ in r:
|
5996
6047
|
self._dropdown_row(r_, v, d)
|
5997
|
-
self.set_refresh_timer(kwargs["redraw"])
|
6048
|
+
return self.set_refresh_timer(kwargs["redraw"])
|
5998
6049
|
|
5999
6050
|
def _dropdown_row(self, r: int, v: object, d: dict) -> None:
|
6000
6051
|
self.del_row_options_dropdown_and_checkbox(r)
|
@@ -6007,7 +6058,7 @@ class Sheet(tk.Frame):
|
|
6007
6058
|
c: Iterator[int] | int | Literal["all"] = 0,
|
6008
6059
|
*args,
|
6009
6060
|
**kwargs,
|
6010
|
-
) ->
|
6061
|
+
) -> Sheet:
|
6011
6062
|
kwargs = get_dropdown_kwargs(*args, **kwargs)
|
6012
6063
|
d = get_dropdown_dict(**kwargs)
|
6013
6064
|
v = kwargs["set_value"] if kwargs["set_value"] is not None else kwargs["values"][0] if kwargs["values"] else ""
|
@@ -6019,7 +6070,7 @@ class Sheet(tk.Frame):
|
|
6019
6070
|
elif is_iterable(c):
|
6020
6071
|
for c_ in c:
|
6021
6072
|
self._dropdown_column(c_, v, d)
|
6022
|
-
self.set_refresh_timer(kwargs["redraw"])
|
6073
|
+
return self.set_refresh_timer(kwargs["redraw"])
|
6023
6074
|
|
6024
6075
|
def _dropdown_column(self, c: int, v: object, d: dict) -> None:
|
6025
6076
|
self.del_column_options_dropdown_and_checkbox(c)
|
@@ -6032,7 +6083,7 @@ class Sheet(tk.Frame):
|
|
6032
6083
|
c: Iterator[int] | int | Literal["all"] = 0,
|
6033
6084
|
*args,
|
6034
6085
|
**kwargs,
|
6035
|
-
) ->
|
6086
|
+
) -> Sheet:
|
6036
6087
|
kwargs = get_dropdown_kwargs(*args, **kwargs)
|
6037
6088
|
d = get_dropdown_dict(**kwargs)
|
6038
6089
|
v = kwargs["set_value"] if kwargs["set_value"] is not None else kwargs["values"][0] if kwargs["values"] else ""
|
@@ -6044,7 +6095,7 @@ class Sheet(tk.Frame):
|
|
6044
6095
|
elif is_iterable(c):
|
6045
6096
|
for c_ in c:
|
6046
6097
|
self._create_header_dropdown(c_, v, d)
|
6047
|
-
self.set_refresh_timer(kwargs["redraw"])
|
6098
|
+
return self.set_refresh_timer(kwargs["redraw"])
|
6048
6099
|
|
6049
6100
|
def _create_header_dropdown(self, c: int, v: object, d: dict) -> None:
|
6050
6101
|
self.del_header_cell_options_dropdown_and_checkbox(c)
|
@@ -6056,7 +6107,7 @@ class Sheet(tk.Frame):
|
|
6056
6107
|
r: Iterator[int] | int | Literal["all"] = 0,
|
6057
6108
|
*args,
|
6058
6109
|
**kwargs,
|
6059
|
-
) ->
|
6110
|
+
) -> Sheet:
|
6060
6111
|
kwargs = get_dropdown_kwargs(*args, **kwargs)
|
6061
6112
|
d = get_dropdown_dict(**kwargs)
|
6062
6113
|
v = kwargs["set_value"] if kwargs["set_value"] is not None else kwargs["values"][0] if kwargs["values"] else ""
|
@@ -6068,7 +6119,7 @@ class Sheet(tk.Frame):
|
|
6068
6119
|
elif is_iterable(r):
|
6069
6120
|
for r_ in r:
|
6070
6121
|
self._create_index_dropdown(r_, v, d)
|
6071
|
-
self.set_refresh_timer(kwargs["redraw"])
|
6122
|
+
return self.set_refresh_timer(kwargs["redraw"])
|
6072
6123
|
|
6073
6124
|
def _create_index_dropdown(self, r: int, v: object, d: dict) -> None:
|
6074
6125
|
self.del_index_cell_options_dropdown_and_checkbox(r)
|
@@ -6327,7 +6378,7 @@ class Sheet(tk.Frame):
|
|
6327
6378
|
formatter_class: object = None,
|
6328
6379
|
redraw: bool = True,
|
6329
6380
|
**kwargs,
|
6330
|
-
) ->
|
6381
|
+
) -> Sheet:
|
6331
6382
|
kwargs = fix_format_kwargs({"formatter": formatter_class, **formatter_options, **kwargs})
|
6332
6383
|
if isinstance(r, str) and r.lower() == "all" and isinstance(c, int):
|
6333
6384
|
for r_ in range(self.MT.total_data_rows()):
|
@@ -6341,7 +6392,7 @@ class Sheet(tk.Frame):
|
|
6341
6392
|
self._format_cell(r_, c_, kwargs)
|
6342
6393
|
else:
|
6343
6394
|
self._format_cell(r, c, kwargs)
|
6344
|
-
self.set_refresh_timer(redraw)
|
6395
|
+
return self.set_refresh_timer(redraw)
|
6345
6396
|
|
6346
6397
|
def _format_cell(self, r: int, c: int, d: dict) -> None:
|
6347
6398
|
v = d["value"] if "value" in d else self.MT.get_cell_data(r, c)
|
@@ -6354,7 +6405,7 @@ class Sheet(tk.Frame):
|
|
6354
6405
|
r: Literal["all"] | int = "all",
|
6355
6406
|
c: Literal["all"] | int = "all",
|
6356
6407
|
clear_values: bool = False,
|
6357
|
-
) ->
|
6408
|
+
) -> Sheet:
|
6358
6409
|
if isinstance(r, str) and r.lower() == "all" and isinstance(c, int):
|
6359
6410
|
for r_, c_ in self.MT.cell_options:
|
6360
6411
|
if "format" in self.MT.cell_options[(r_, c)]:
|
@@ -6369,6 +6420,7 @@ class Sheet(tk.Frame):
|
|
6369
6420
|
self.MT.delete_cell_format(r_, c_, clear_values=clear_values)
|
6370
6421
|
else:
|
6371
6422
|
self.MT.delete_cell_format(r, c, clear_values=clear_values)
|
6423
|
+
return self
|
6372
6424
|
|
6373
6425
|
def format_row(
|
6374
6426
|
self,
|
@@ -6377,7 +6429,7 @@ class Sheet(tk.Frame):
|
|
6377
6429
|
formatter_class: object = None,
|
6378
6430
|
redraw: bool = True,
|
6379
6431
|
**kwargs,
|
6380
|
-
) ->
|
6432
|
+
) -> Sheet:
|
6381
6433
|
kwargs = fix_format_kwargs({"formatter": formatter_class, **formatter_options, **kwargs})
|
6382
6434
|
if isinstance(r, str) and r.lower() == "all":
|
6383
6435
|
for r_ in range(len(self.MT.data)):
|
@@ -6387,7 +6439,7 @@ class Sheet(tk.Frame):
|
|
6387
6439
|
self._format_row(r_, kwargs)
|
6388
6440
|
else:
|
6389
6441
|
self._format_row(r, kwargs)
|
6390
|
-
self.set_refresh_timer(redraw)
|
6442
|
+
return self.set_refresh_timer(redraw)
|
6391
6443
|
|
6392
6444
|
def _format_row(self, r: int, d: dict) -> None:
|
6393
6445
|
self.del_row_options_checkbox(r)
|
@@ -6404,12 +6456,13 @@ class Sheet(tk.Frame):
|
|
6404
6456
|
self,
|
6405
6457
|
r: Iterator[int] | int | Literal["all"] = "all",
|
6406
6458
|
clear_values: bool = False,
|
6407
|
-
) ->
|
6459
|
+
) -> Sheet:
|
6408
6460
|
if is_iterable(r):
|
6409
6461
|
for r_ in r:
|
6410
6462
|
self.MT.delete_row_format(r_, clear_values=clear_values)
|
6411
6463
|
else:
|
6412
6464
|
self.MT.delete_row_format(r, clear_values=clear_values)
|
6465
|
+
return self
|
6413
6466
|
|
6414
6467
|
def format_column(
|
6415
6468
|
self,
|
@@ -6418,7 +6471,7 @@ class Sheet(tk.Frame):
|
|
6418
6471
|
formatter_class: object = None,
|
6419
6472
|
redraw: bool = True,
|
6420
6473
|
**kwargs,
|
6421
|
-
) ->
|
6474
|
+
) -> Sheet:
|
6422
6475
|
kwargs = fix_format_kwargs({"formatter": formatter_class, **formatter_options, **kwargs})
|
6423
6476
|
if isinstance(c, str) and c.lower() == "all":
|
6424
6477
|
for c_ in range(self.MT.total_data_cols()):
|
@@ -6428,7 +6481,7 @@ class Sheet(tk.Frame):
|
|
6428
6481
|
self._format_column(c_, kwargs)
|
6429
6482
|
else:
|
6430
6483
|
self._format_column(c, kwargs)
|
6431
|
-
self.set_refresh_timer(redraw)
|
6484
|
+
return self.set_refresh_timer(redraw)
|
6432
6485
|
|
6433
6486
|
def _format_column(self, c: int, d: dict) -> None:
|
6434
6487
|
self.del_column_options_checkbox(c)
|
@@ -6445,12 +6498,13 @@ class Sheet(tk.Frame):
|
|
6445
6498
|
self,
|
6446
6499
|
c: Iterator[int] | int | Literal["all"] = "all",
|
6447
6500
|
clear_values: bool = False,
|
6448
|
-
) ->
|
6501
|
+
) -> Sheet:
|
6449
6502
|
if is_iterable(c):
|
6450
6503
|
for c_ in c:
|
6451
6504
|
self.MT.delete_column_format(c_, clear_values=clear_values)
|
6452
6505
|
else:
|
6453
6506
|
self.MT.delete_column_format(c, clear_values=clear_values)
|
6507
|
+
return self
|
6454
6508
|
|
6455
6509
|
|
6456
6510
|
class Dropdown(Sheet):
|
@@ -6479,6 +6533,7 @@ class Dropdown(Sheet):
|
|
6479
6533
|
Sheet.__init__(
|
6480
6534
|
self,
|
6481
6535
|
parent=parent,
|
6536
|
+
name="!SheetDropdown",
|
6482
6537
|
outline_thickness=outline_thickness,
|
6483
6538
|
show_horizontal_grid=True,
|
6484
6539
|
show_vertical_grid=False,
|
@@ -6491,6 +6546,7 @@ class Dropdown(Sheet):
|
|
6491
6546
|
horizontal_grid_to_end_of_window=True,
|
6492
6547
|
set_cell_sizes_on_zoom=True,
|
6493
6548
|
show_selected_cells_border=False,
|
6549
|
+
scrollbar_show_arrows=False,
|
6494
6550
|
)
|
6495
6551
|
self.parent = parent
|
6496
6552
|
self.close_dropdown_window = close_dropdown_window
|
@@ -6623,4 +6679,4 @@ class Dropdown(Sheet):
|
|
6623
6679
|
redraw=False,
|
6624
6680
|
verify=False,
|
6625
6681
|
)
|
6626
|
-
self.set_all_cell_sizes_to_text(redraw=redraw, width=width)
|
6682
|
+
self.set_all_cell_sizes_to_text(redraw=redraw, width=width, slim=True)
|