tksheet 7.1.9__py3-none-any.whl → 7.1.11__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 +2 -1
- tksheet/column_headers.py +24 -21
- tksheet/main_table.py +159 -172
- tksheet/row_index.py +24 -19
- tksheet/sheet.py +36 -25
- {tksheet-7.1.9.dist-info → tksheet-7.1.11.dist-info}/METADATA +1 -1
- tksheet-7.1.11.dist-info/RECORD +20 -0
- tksheet-7.1.9.dist-info/RECORD +0 -20
- {tksheet-7.1.9.dist-info → tksheet-7.1.11.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.1.9.dist-info → tksheet-7.1.11.dist-info}/WHEEL +0 -0
- {tksheet-7.1.9.dist-info → tksheet-7.1.11.dist-info}/top_level.txt +0 -0
tksheet/__init__.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
tksheet - A Python tkinter table widget
|
5
5
|
"""
|
6
6
|
|
7
|
-
__version__ = "7.1.
|
7
|
+
__version__ = "7.1.11"
|
8
8
|
|
9
9
|
from .colors import (
|
10
10
|
color_map,
|
@@ -49,6 +49,7 @@ from .functions import (
|
|
49
49
|
get_n2a,
|
50
50
|
get_new_indexes,
|
51
51
|
get_seq_without_gaps_at_index,
|
52
|
+
insert_items,
|
52
53
|
is_iterable,
|
53
54
|
move_elements_by_mapping,
|
54
55
|
move_elements_to,
|
tksheet/column_headers.py
CHANGED
@@ -4,6 +4,7 @@ import tkinter as tk
|
|
4
4
|
from collections import defaultdict
|
5
5
|
from collections.abc import (
|
6
6
|
Callable,
|
7
|
+
Sequence,
|
7
8
|
)
|
8
9
|
from functools import (
|
9
10
|
partial,
|
@@ -673,11 +674,11 @@ class ColumnHeaders(tk.Canvas):
|
|
673
674
|
|
674
675
|
def show_drag_and_drop_indicators(
|
675
676
|
self,
|
676
|
-
xpos,
|
677
|
-
y1,
|
678
|
-
y2,
|
679
|
-
cols,
|
680
|
-
):
|
677
|
+
xpos: float,
|
678
|
+
y1: float,
|
679
|
+
y2: float,
|
680
|
+
cols: Sequence[int],
|
681
|
+
) -> None:
|
681
682
|
self.hide_resize_and_ctrl_lines()
|
682
683
|
self.create_resize_line(
|
683
684
|
xpos,
|
@@ -698,13 +699,13 @@ class ColumnHeaders(tk.Canvas):
|
|
698
699
|
delete_on_timer=False,
|
699
700
|
)
|
700
701
|
|
701
|
-
def hide_resize_and_ctrl_lines(self, ctrl_lines=True):
|
702
|
+
def hide_resize_and_ctrl_lines(self, ctrl_lines: bool = True) -> None:
|
702
703
|
self.delete_resize_lines()
|
703
704
|
self.MT.delete_resize_lines()
|
704
705
|
if ctrl_lines:
|
705
706
|
self.MT.delete_ctrl_outlines()
|
706
707
|
|
707
|
-
def scroll_if_event_offscreen(self, event: object):
|
708
|
+
def scroll_if_event_offscreen(self, event: object) -> bool:
|
708
709
|
xcheck = self.xview()
|
709
710
|
need_redraw = False
|
710
711
|
if event.x > self.winfo_width() and len(xcheck) > 1 and xcheck[1] < 1:
|
@@ -727,14 +728,14 @@ class ColumnHeaders(tk.Canvas):
|
|
727
728
|
need_redraw = True
|
728
729
|
return need_redraw
|
729
730
|
|
730
|
-
def fix_xview(self):
|
731
|
+
def fix_xview(self) -> None:
|
731
732
|
xcheck = self.xview()
|
732
733
|
if xcheck and xcheck[0] < 0:
|
733
734
|
self.MT.set_xviews("moveto", 0)
|
734
735
|
elif len(xcheck) > 1 and xcheck[1] > 1:
|
735
736
|
self.MT.set_xviews("moveto", 1)
|
736
737
|
|
737
|
-
def event_over_dropdown(self, c, datacn, event: object, canvasx):
|
738
|
+
def event_over_dropdown(self, c: int, datacn: int, event: object, canvasx: float) -> bool:
|
738
739
|
if (
|
739
740
|
event.y < self.MT.header_txt_height + 5
|
740
741
|
and self.get_cell_kwargs(datacn, key="dropdown")
|
@@ -744,7 +745,7 @@ class ColumnHeaders(tk.Canvas):
|
|
744
745
|
return True
|
745
746
|
return False
|
746
747
|
|
747
|
-
def event_over_checkbox(self, c, datacn, event: object, canvasx):
|
748
|
+
def event_over_checkbox(self, c: int, datacn: int, event: object, canvasx: float) -> bool:
|
748
749
|
if (
|
749
750
|
event.y < self.MT.header_txt_height + 5
|
750
751
|
and self.get_cell_kwargs(datacn, key="checkbox")
|
@@ -753,7 +754,7 @@ class ColumnHeaders(tk.Canvas):
|
|
753
754
|
return True
|
754
755
|
return False
|
755
756
|
|
756
|
-
def b1_release(self, event: object):
|
757
|
+
def b1_release(self, event: object) -> None:
|
757
758
|
if self.being_drawn_item is not None:
|
758
759
|
to_sel = self.MT.coords_and_type(self.being_drawn_item)
|
759
760
|
r_to_sel, c_to_sel = self.MT.selected.row, self.MT.selected.column
|
@@ -909,8 +910,7 @@ class ColumnHeaders(tk.Canvas):
|
|
909
910
|
|
910
911
|
def select_col(self, c, redraw=False, run_binding_func=True):
|
911
912
|
self.MT.deselect("all", redraw=False)
|
912
|
-
|
913
|
-
fill_iid = self.MT.create_selection_box(*box)
|
913
|
+
fill_iid = self.MT.create_selection_box(0, c, len(self.MT.row_positions) - 1, c + 1, "columns")
|
914
914
|
if redraw:
|
915
915
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
916
916
|
if run_binding_func:
|
@@ -1320,6 +1320,16 @@ class ColumnHeaders(tk.Canvas):
|
|
1320
1320
|
t = self.create_polygon(points, fill=fill, outline=outline, tag=tag, smooth=True)
|
1321
1321
|
self.disp_checkbox[t] = True
|
1322
1322
|
|
1323
|
+
def configure_scrollregion(self, last_col_line_pos: float) -> None:
|
1324
|
+
self.configure(
|
1325
|
+
scrollregion=(
|
1326
|
+
0,
|
1327
|
+
0,
|
1328
|
+
last_col_line_pos + self.PAR.ops.empty_horizontal + 2,
|
1329
|
+
self.current_height,
|
1330
|
+
)
|
1331
|
+
)
|
1332
|
+
|
1323
1333
|
def redraw_grid_and_text(
|
1324
1334
|
self,
|
1325
1335
|
last_col_line_pos,
|
@@ -1331,14 +1341,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1331
1341
|
col_pos_exists,
|
1332
1342
|
):
|
1333
1343
|
try:
|
1334
|
-
self.
|
1335
|
-
scrollregion=(
|
1336
|
-
0,
|
1337
|
-
0,
|
1338
|
-
last_col_line_pos + self.PAR.ops.empty_horizontal + 2,
|
1339
|
-
self.current_height,
|
1340
|
-
)
|
1341
|
-
)
|
1344
|
+
self.configure_scrollregion(last_col_line_pos=last_col_line_pos)
|
1342
1345
|
except Exception:
|
1343
1346
|
return
|
1344
1347
|
self.hidd_text.update(self.disp_text)
|
tksheet/main_table.py
CHANGED
@@ -551,7 +551,10 @@ class MainTable(tk.Canvas):
|
|
551
551
|
for r1, c1, r2, c2 in boxes:
|
552
552
|
self.show_ctrl_outline(canvas="table", start_cell=(c1, r1), end_cell=(c2, r2))
|
553
553
|
self.clipboard_clear()
|
554
|
-
|
554
|
+
if len(event_data["cells"]["table"]) == 1:
|
555
|
+
self.clipboard_append(next(iter(event_data["cells"]["table"].values())))
|
556
|
+
else:
|
557
|
+
self.clipboard_append(s.getvalue())
|
555
558
|
self.update_idletasks()
|
556
559
|
try_binding(self.extra_end_ctrl_c_func, event_data, "end_ctrl_c")
|
557
560
|
|
@@ -615,7 +618,10 @@ class MainTable(tk.Canvas):
|
|
615
618
|
if event_data["cells"]["table"]:
|
616
619
|
self.undo_stack.append(ev_stack_dict(event_data))
|
617
620
|
self.clipboard_clear()
|
618
|
-
|
621
|
+
if len(event_data["cells"]["table"]) == 1:
|
622
|
+
self.clipboard_append(next(iter(event_data["cells"]["table"].values())))
|
623
|
+
else:
|
624
|
+
self.clipboard_append(s.getvalue())
|
619
625
|
self.update_idletasks()
|
620
626
|
self.refresh()
|
621
627
|
for r1, c1, r2, c2 in boxes:
|
@@ -657,9 +663,11 @@ class MainTable(tk.Canvas):
|
|
657
663
|
dialect = csv.Sniffer().sniff(data, delimiters=self.PAR.ops.from_clipboard_delimiters)
|
658
664
|
except Exception:
|
659
665
|
dialect = csv.excel_tab
|
660
|
-
|
661
|
-
|
662
|
-
|
666
|
+
if dialect.delimiter in data:
|
667
|
+
if not (data := list(csv.reader(io.StringIO(data), dialect=dialect, skipinitialspace=True))):
|
668
|
+
return
|
669
|
+
else:
|
670
|
+
data = [[data]]
|
663
671
|
new_data_numcols = max(map(len, data))
|
664
672
|
new_data_numrows = len(data)
|
665
673
|
for rn, r in enumerate(data):
|
@@ -2203,98 +2211,6 @@ class MainTable(tk.Canvas):
|
|
2203
2211
|
check_cell_visibility=False,
|
2204
2212
|
)
|
2205
2213
|
|
2206
|
-
def key_bindings(self) -> None:
|
2207
|
-
for widget in (self, self.RI, self.CH, self.TL):
|
2208
|
-
for binding in self.PAR.ops.copy_bindings:
|
2209
|
-
if self.copy_enabled:
|
2210
|
-
widget.bind(binding, self.ctrl_c)
|
2211
|
-
else:
|
2212
|
-
widget.unbind(binding)
|
2213
|
-
|
2214
|
-
for binding in self.PAR.ops.cut_bindings:
|
2215
|
-
if self.cut_enabled:
|
2216
|
-
widget.bind(binding, self.ctrl_x)
|
2217
|
-
else:
|
2218
|
-
widget.unbind(binding)
|
2219
|
-
|
2220
|
-
for binding in self.PAR.ops.paste_bindings:
|
2221
|
-
if self.paste_enabled:
|
2222
|
-
widget.bind(binding, self.ctrl_v)
|
2223
|
-
else:
|
2224
|
-
widget.unbind(binding)
|
2225
|
-
|
2226
|
-
if self.undo_enabled:
|
2227
|
-
for binding in self.PAR.ops.undo_bindings:
|
2228
|
-
widget.bind(binding, self.undo)
|
2229
|
-
for binding in self.PAR.ops.redo_bindings:
|
2230
|
-
widget.bind(binding, self.redo)
|
2231
|
-
else:
|
2232
|
-
for binding in self.PAR.ops.undo_bindings:
|
2233
|
-
widget.unbind(binding)
|
2234
|
-
for binding in self.PAR.ops.redo_bindings:
|
2235
|
-
widget.unbind(binding)
|
2236
|
-
|
2237
|
-
for binding in self.PAR.ops.delete_bindings:
|
2238
|
-
if self.delete_key_enabled:
|
2239
|
-
widget.bind(binding, self.delete_key)
|
2240
|
-
else:
|
2241
|
-
widget.unbind(binding)
|
2242
|
-
|
2243
|
-
for binding in self.PAR.ops.select_all_bindings:
|
2244
|
-
if self.select_all_enabled:
|
2245
|
-
widget.bind(binding, self.select_all)
|
2246
|
-
else:
|
2247
|
-
widget.unbind(binding)
|
2248
|
-
|
2249
|
-
for binding in self.PAR.ops.tab_bindings:
|
2250
|
-
if self.tab_enabled:
|
2251
|
-
widget.bind(binding, self.tab_key)
|
2252
|
-
else:
|
2253
|
-
widget.unbind(binding)
|
2254
|
-
|
2255
|
-
for binding in self.PAR.ops.up_bindings:
|
2256
|
-
if self.up_enabled:
|
2257
|
-
widget.bind(binding, self.arrowkey_UP)
|
2258
|
-
else:
|
2259
|
-
widget.unbind(binding)
|
2260
|
-
|
2261
|
-
for binding in self.PAR.ops.right_bindings:
|
2262
|
-
if self.right_enabled:
|
2263
|
-
widget.bind(binding, self.arrowkey_RIGHT)
|
2264
|
-
else:
|
2265
|
-
widget.unbind(binding)
|
2266
|
-
|
2267
|
-
for binding in self.PAR.ops.down_bindings:
|
2268
|
-
if self.down_enabled:
|
2269
|
-
widget.bind(binding, self.arrowkey_DOWN)
|
2270
|
-
else:
|
2271
|
-
widget.unbind(binding)
|
2272
|
-
|
2273
|
-
for binding in self.PAR.ops.left_bindings:
|
2274
|
-
if self.left_enabled:
|
2275
|
-
widget.bind(binding, self.arrowkey_LEFT)
|
2276
|
-
else:
|
2277
|
-
widget.unbind(binding)
|
2278
|
-
|
2279
|
-
for binding in self.PAR.ops.prior_bindings:
|
2280
|
-
if self.prior_enabled:
|
2281
|
-
widget.bind(binding, self.page_UP)
|
2282
|
-
else:
|
2283
|
-
widget.unbind(binding)
|
2284
|
-
|
2285
|
-
for binding in self.PAR.ops.next_bindings:
|
2286
|
-
if self.next_enabled:
|
2287
|
-
widget.bind(binding, self.page_DOWN)
|
2288
|
-
else:
|
2289
|
-
widget.unbind(binding)
|
2290
|
-
|
2291
|
-
if self.edit_cell_enabled:
|
2292
|
-
for w in (self, self.RI, self.CH):
|
2293
|
-
w.bind("<Key>", self.open_cell)
|
2294
|
-
else:
|
2295
|
-
for w in (self, self.RI, self.CH):
|
2296
|
-
w.unbind("<Key>")
|
2297
|
-
|
2298
2214
|
def menu_add_command(self, menu: tk.Menu, **kwargs) -> None:
|
2299
2215
|
if "label" not in kwargs:
|
2300
2216
|
return
|
@@ -2528,35 +2444,33 @@ class MainTable(tk.Canvas):
|
|
2528
2444
|
|
2529
2445
|
def enable_bindings(self, bindings):
|
2530
2446
|
if not bindings:
|
2531
|
-
self.
|
2447
|
+
self._enable_binding("all")
|
2532
2448
|
elif isinstance(bindings, (list, tuple)):
|
2533
2449
|
for binding in bindings:
|
2534
2450
|
if isinstance(binding, (list, tuple)):
|
2535
2451
|
for bind in binding:
|
2536
|
-
self.
|
2452
|
+
self._enable_binding(bind.lower())
|
2537
2453
|
elif isinstance(binding, str):
|
2538
|
-
self.
|
2454
|
+
self._enable_binding(binding.lower())
|
2539
2455
|
elif isinstance(bindings, str):
|
2540
|
-
self.
|
2456
|
+
self._enable_binding(bindings.lower())
|
2541
2457
|
self.create_rc_menus()
|
2542
|
-
self.key_bindings()
|
2543
2458
|
|
2544
2459
|
def disable_bindings(self, bindings):
|
2545
2460
|
if not bindings:
|
2546
|
-
self.
|
2461
|
+
self._disable_binding("all")
|
2547
2462
|
elif isinstance(bindings, (list, tuple)):
|
2548
2463
|
for binding in bindings:
|
2549
2464
|
if isinstance(binding, (list, tuple)):
|
2550
2465
|
for bind in binding:
|
2551
|
-
self.
|
2466
|
+
self._disable_binding(bind.lower())
|
2552
2467
|
elif isinstance(binding, str):
|
2553
|
-
self.
|
2468
|
+
self._disable_binding(binding.lower())
|
2554
2469
|
elif isinstance(bindings, str):
|
2555
|
-
self.
|
2470
|
+
self._disable_binding(bindings)
|
2556
2471
|
self.create_rc_menus()
|
2557
|
-
self.key_bindings()
|
2558
2472
|
|
2559
|
-
def
|
2473
|
+
def _enable_binding(self, binding):
|
2560
2474
|
if binding == "enable_all":
|
2561
2475
|
binding = "all"
|
2562
2476
|
if binding in ("all", "single", "single_selection_mode", "single_select"):
|
@@ -2567,9 +2481,6 @@ class MainTable(tk.Canvas):
|
|
2567
2481
|
self.single_selection_enabled = False
|
2568
2482
|
if binding in ("all", "drag_select"):
|
2569
2483
|
self.drag_selection_enabled = True
|
2570
|
-
if binding in ("all", "select_all"):
|
2571
|
-
self.select_all_enabled = True
|
2572
|
-
self.TL.sa_state()
|
2573
2484
|
if binding in ("all", "column_width_resize"):
|
2574
2485
|
self.CH.width_resizing_enabled = True
|
2575
2486
|
if binding in ("all", "column_select"):
|
@@ -2592,20 +2503,47 @@ class MainTable(tk.Canvas):
|
|
2592
2503
|
self.RI.row_selection_enabled = True
|
2593
2504
|
if binding in ("all", "row_drag_and_drop", "move_rows"):
|
2594
2505
|
self.RI.drag_and_drop_enabled = True
|
2506
|
+
if binding in ("all", "select_all"):
|
2507
|
+
self.select_all_enabled = True
|
2508
|
+
self.TL.sa_state()
|
2509
|
+
self._tksheet_bind("select_all_bindings", self.select_all)
|
2595
2510
|
if binding in ("all", "arrowkeys", "tab"):
|
2596
2511
|
self.tab_enabled = True
|
2512
|
+
self._tksheet_bind("tab_bindings", self.tab_key)
|
2597
2513
|
if binding in ("all", "arrowkeys", "up"):
|
2598
2514
|
self.up_enabled = True
|
2515
|
+
self._tksheet_bind("up_bindings", self.arrowkey_UP)
|
2599
2516
|
if binding in ("all", "arrowkeys", "right"):
|
2600
2517
|
self.right_enabled = True
|
2518
|
+
self._tksheet_bind("right_bindings", self.arrowkey_RIGHT)
|
2601
2519
|
if binding in ("all", "arrowkeys", "down"):
|
2602
2520
|
self.down_enabled = True
|
2521
|
+
self._tksheet_bind("down_bindings", self.arrowkey_DOWN)
|
2603
2522
|
if binding in ("all", "arrowkeys", "left"):
|
2604
2523
|
self.left_enabled = True
|
2524
|
+
self._tksheet_bind("left_bindings", self.arrowkey_LEFT)
|
2605
2525
|
if binding in ("all", "arrowkeys", "prior"):
|
2606
2526
|
self.prior_enabled = True
|
2527
|
+
self._tksheet_bind("prior_bindings", self.page_UP)
|
2607
2528
|
if binding in ("all", "arrowkeys", "next"):
|
2608
2529
|
self.next_enabled = True
|
2530
|
+
self._tksheet_bind("next_bindings", self.page_DOWN)
|
2531
|
+
if binding in ("all", "copy", "edit_bindings", "edit"):
|
2532
|
+
self.copy_enabled = True
|
2533
|
+
self._tksheet_bind("copy_bindings", self.ctrl_c)
|
2534
|
+
if binding in ("all", "cut", "edit_bindings", "edit"):
|
2535
|
+
self.cut_enabled = True
|
2536
|
+
self._tksheet_bind("cut_bindings", self.ctrl_x)
|
2537
|
+
if binding in ("all", "paste", "edit_bindings", "edit"):
|
2538
|
+
self.paste_enabled = True
|
2539
|
+
self._tksheet_bind("paste_bindings", self.ctrl_v)
|
2540
|
+
if binding in ("all", "delete", "edit_bindings", "edit"):
|
2541
|
+
self.delete_key_enabled = True
|
2542
|
+
self._tksheet_bind("delete_bindings", self.delete_key)
|
2543
|
+
if binding in ("all", "undo", "redo", "edit_bindings", "edit"):
|
2544
|
+
self.undo_enabled = True
|
2545
|
+
self._tksheet_bind("undo_bindings", self.undo)
|
2546
|
+
self._tksheet_bind("redo_bindings", self.redo)
|
2609
2547
|
if binding in ("all", "rc_delete_column"):
|
2610
2548
|
self.rc_delete_column_enabled = True
|
2611
2549
|
self.rc_popup_menus_enabled = True
|
@@ -2622,23 +2560,15 @@ class MainTable(tk.Canvas):
|
|
2622
2560
|
self.rc_insert_row_enabled = True
|
2623
2561
|
self.rc_popup_menus_enabled = True
|
2624
2562
|
self.rc_select_enabled = True
|
2625
|
-
if binding in ("all", "copy", "edit_bindings"):
|
2626
|
-
self.copy_enabled = True
|
2627
|
-
if binding in ("all", "cut", "edit_bindings"):
|
2628
|
-
self.cut_enabled = True
|
2629
|
-
if binding in ("all", "paste", "edit_bindings"):
|
2630
|
-
self.paste_enabled = True
|
2631
|
-
if binding in ("all", "delete", "edit_bindings"):
|
2632
|
-
self.delete_key_enabled = True
|
2633
2563
|
if binding in ("all", "right_click_popup_menu", "rc_popup_menu"):
|
2634
2564
|
self.rc_popup_menus_enabled = True
|
2635
2565
|
self.rc_select_enabled = True
|
2636
2566
|
if binding in ("all", "right_click_select", "rc_select"):
|
2637
2567
|
self.rc_select_enabled = True
|
2638
|
-
if binding in ("all", "
|
2639
|
-
self.undo_enabled = True
|
2640
|
-
if binding in ("all", "edit_cell", "edit_bindings"):
|
2568
|
+
if binding in ("all", "edit_cell", "edit_bindings", "edit"):
|
2641
2569
|
self.edit_cell_enabled = True
|
2570
|
+
for w in (self, self.RI, self.CH):
|
2571
|
+
w.bind("<Key>", self.open_cell)
|
2642
2572
|
if binding in ("edit_header"):
|
2643
2573
|
self.CH.edit_cell_enabled = True
|
2644
2574
|
if binding in ("edit_index"):
|
@@ -2647,7 +2577,12 @@ class MainTable(tk.Canvas):
|
|
2647
2577
|
if binding in ("ctrl_click_select", "ctrl_select"):
|
2648
2578
|
self.ctrl_select_enabled = True
|
2649
2579
|
|
2650
|
-
def
|
2580
|
+
def _tksheet_bind(self, bindings_key: str, func: Callable) -> None:
|
2581
|
+
for widget in (self, self.RI, self.CH, self.TL):
|
2582
|
+
for binding in self.PAR.ops[bindings_key]:
|
2583
|
+
widget.bind(binding, func)
|
2584
|
+
|
2585
|
+
def _disable_binding(self, binding):
|
2651
2586
|
if binding == "disable_all":
|
2652
2587
|
binding = "all"
|
2653
2588
|
if binding in ("all", "single", "single_selection_mode", "single_select"):
|
@@ -2658,9 +2593,6 @@ class MainTable(tk.Canvas):
|
|
2658
2593
|
self.single_selection_enabled = False
|
2659
2594
|
if binding in ("all", "drag_select"):
|
2660
2595
|
self.drag_selection_enabled = False
|
2661
|
-
if binding in ("all", "select_all"):
|
2662
|
-
self.select_all_enabled = False
|
2663
|
-
self.TL.sa_state("hidden")
|
2664
2596
|
if binding in ("all", "column_width_resize"):
|
2665
2597
|
self.CH.width_resizing_enabled = False
|
2666
2598
|
if binding in ("all", "column_select"):
|
@@ -2683,20 +2615,6 @@ class MainTable(tk.Canvas):
|
|
2683
2615
|
self.RI.row_selection_enabled = False
|
2684
2616
|
if binding in ("all", "row_drag_and_drop", "move_rows"):
|
2685
2617
|
self.RI.drag_and_drop_enabled = False
|
2686
|
-
if binding in ("all", "arrowkeys", "tab"):
|
2687
|
-
self.tab_enabled = False
|
2688
|
-
if binding in ("all", "arrowkeys", "up"):
|
2689
|
-
self.up_enabled = False
|
2690
|
-
if binding in ("all", "arrowkeys", "right"):
|
2691
|
-
self.right_enabled = False
|
2692
|
-
if binding in ("all", "arrowkeys", "down"):
|
2693
|
-
self.down_enabled = False
|
2694
|
-
if binding in ("all", "arrowkeys", "left"):
|
2695
|
-
self.left_enabled = False
|
2696
|
-
if binding in ("all", "arrowkeys", "prior"):
|
2697
|
-
self.prior_enabled = False
|
2698
|
-
if binding in ("all", "arrowkeys", "next"):
|
2699
|
-
self.next_enabled = False
|
2700
2618
|
if binding in ("all", "rc_delete_column"):
|
2701
2619
|
self.rc_delete_column_enabled = False
|
2702
2620
|
self.rc_popup_menus_enabled = False
|
@@ -2713,29 +2631,67 @@ class MainTable(tk.Canvas):
|
|
2713
2631
|
self.rc_insert_row_enabled = False
|
2714
2632
|
self.rc_popup_menus_enabled = False
|
2715
2633
|
self.rc_select_enabled = False
|
2716
|
-
if binding in ("all", "copy", "edit_bindings"):
|
2717
|
-
self.copy_enabled = False
|
2718
|
-
if binding in ("all", "cut", "edit_bindings"):
|
2719
|
-
self.cut_enabled = False
|
2720
|
-
if binding in ("all", "paste", "edit_bindings"):
|
2721
|
-
self.paste_enabled = False
|
2722
|
-
if binding in ("all", "delete", "edit_bindings"):
|
2723
|
-
self.delete_key_enabled = False
|
2724
2634
|
if binding in ("all", "right_click_popup_menu", "rc_popup_menu"):
|
2725
2635
|
self.rc_popup_menus_enabled = False
|
2726
2636
|
self.rc_select_enabled = False
|
2727
2637
|
if binding in ("all", "right_click_select", "rc_select"):
|
2728
2638
|
self.rc_select_enabled = False
|
2729
|
-
if binding in ("all", "
|
2730
|
-
self.undo_enabled = False
|
2731
|
-
if binding in ("all", "edit_cell", "edit_bindings"):
|
2639
|
+
if binding in ("all", "edit_cell", "edit_bindings", "edit"):
|
2732
2640
|
self.edit_cell_enabled = False
|
2733
|
-
|
2641
|
+
for w in (self, self.RI, self.CH):
|
2642
|
+
w.unbind("<Key>")
|
2643
|
+
if binding in ("all", "edit_header", "edit_bindings", "edit"):
|
2734
2644
|
self.CH.edit_cell_enabled = False
|
2735
|
-
if binding in ("all", "edit_index", "edit_bindings"):
|
2645
|
+
if binding in ("all", "edit_index", "edit_bindings", "edit"):
|
2736
2646
|
self.RI.edit_cell_enabled = False
|
2737
2647
|
if binding in ("all", "ctrl_click_select", "ctrl_select"):
|
2738
2648
|
self.ctrl_select_enabled = False
|
2649
|
+
if binding in ("all", "select_all"):
|
2650
|
+
self.select_all_enabled = False
|
2651
|
+
self.TL.sa_state("hidden")
|
2652
|
+
self._tksheet_unbind("select_all_bindings")
|
2653
|
+
if binding in ("all", "copy", "edit_bindings", "edit"):
|
2654
|
+
self.copy_enabled = False
|
2655
|
+
self._tksheet_unbind("copy_bindings")
|
2656
|
+
if binding in ("all", "cut", "edit_bindings", "edit"):
|
2657
|
+
self.cut_enabled = False
|
2658
|
+
self._tksheet_unbind("cut_bindings")
|
2659
|
+
if binding in ("all", "paste", "edit_bindings", "edit"):
|
2660
|
+
self.paste_enabled = False
|
2661
|
+
self._tksheet_unbind("paste_bindings")
|
2662
|
+
if binding in ("all", "delete", "edit_bindings", "edit"):
|
2663
|
+
self.delete_key_enabled = False
|
2664
|
+
self._tksheet_unbind("delete_bindings")
|
2665
|
+
if binding in ("all", "arrowkeys", "tab"):
|
2666
|
+
self.tab_enabled = False
|
2667
|
+
self._tksheet_unbind("tab_bindings")
|
2668
|
+
if binding in ("all", "arrowkeys", "up"):
|
2669
|
+
self.up_enabled = False
|
2670
|
+
self._tksheet_unbind("up_bindings")
|
2671
|
+
if binding in ("all", "arrowkeys", "right"):
|
2672
|
+
self.right_enabled = False
|
2673
|
+
self._tksheet_unbind("right_bindings")
|
2674
|
+
if binding in ("all", "arrowkeys", "down"):
|
2675
|
+
self.down_enabled = False
|
2676
|
+
self._tksheet_unbind("down_bindings")
|
2677
|
+
if binding in ("all", "arrowkeys", "left"):
|
2678
|
+
self.left_enabled = False
|
2679
|
+
self._tksheet_unbind("left_bindings")
|
2680
|
+
if binding in ("all", "arrowkeys", "prior"):
|
2681
|
+
self.prior_enabled = False
|
2682
|
+
self._tksheet_unbind("prior_bindings")
|
2683
|
+
if binding in ("all", "arrowkeys", "next"):
|
2684
|
+
self.next_enabled = False
|
2685
|
+
self._tksheet_unbind("next_bindings")
|
2686
|
+
if binding in ("all", "undo", "redo", "edit_bindings", "edit"):
|
2687
|
+
self.undo_enabled = False
|
2688
|
+
self._tksheet_unbind("undo_bindings", "redo_bindings")
|
2689
|
+
|
2690
|
+
def _tksheet_unbind(self, *keys) -> None:
|
2691
|
+
for widget in (self, self.RI, self.CH, self.TL):
|
2692
|
+
for bindings_key in keys:
|
2693
|
+
for binding in self.PAR.ops[bindings_key]:
|
2694
|
+
widget.unbind(binding)
|
2739
2695
|
|
2740
2696
|
def reset_mouse_motion_creations(self) -> None:
|
2741
2697
|
if self.current_cursor != "":
|
@@ -3196,47 +3152,71 @@ class MainTable(tk.Canvas):
|
|
3196
3152
|
self.y_move_synced_scrolls("moveto", self.yview()[0])
|
3197
3153
|
return need_redraw
|
3198
3154
|
|
3199
|
-
def x_move_synced_scrolls(self, *args, redraw: bool = True):
|
3155
|
+
def x_move_synced_scrolls(self, *args, redraw: bool = True, use_scrollbar: bool = False):
|
3200
3156
|
for widget in self.synced_scrolls:
|
3201
3157
|
# try:
|
3202
3158
|
if hasattr(widget, "MT"):
|
3203
|
-
|
3159
|
+
if use_scrollbar:
|
3160
|
+
widget.MT._xscrollbar(*args, move_synced=False)
|
3161
|
+
else:
|
3162
|
+
widget.MT.set_xviews(*args, move_synced=False, redraw=redraw)
|
3204
3163
|
else:
|
3205
3164
|
widget.xview(*args)
|
3206
3165
|
# except Exception:
|
3207
3166
|
# continue
|
3208
3167
|
|
3209
|
-
def y_move_synced_scrolls(self, *args, redraw: bool = True):
|
3168
|
+
def y_move_synced_scrolls(self, *args, redraw: bool = True, use_scrollbar: bool = False):
|
3210
3169
|
for widget in self.synced_scrolls:
|
3211
3170
|
# try:
|
3212
3171
|
if hasattr(widget, "MT"):
|
3213
|
-
|
3172
|
+
if use_scrollbar:
|
3173
|
+
widget.MT._yscrollbar(*args, move_synced=False)
|
3174
|
+
else:
|
3175
|
+
widget.MT.set_yviews(*args, move_synced=False, redraw=redraw)
|
3214
3176
|
else:
|
3215
3177
|
widget.yview(*args)
|
3216
3178
|
# except Exception:
|
3217
3179
|
# continue
|
3218
3180
|
|
3181
|
+
def _xscrollbar(self, *args, move_synced: bool = True):
|
3182
|
+
self.xview(*args)
|
3183
|
+
if self.show_header:
|
3184
|
+
self.CH.xview(*args)
|
3185
|
+
self.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=False)
|
3186
|
+
if move_synced:
|
3187
|
+
self.x_move_synced_scrolls(*args, use_scrollbar=True)
|
3188
|
+
|
3189
|
+
def _yscrollbar(self, *args, move_synced: bool = True):
|
3190
|
+
self.yview(*args)
|
3191
|
+
if self.show_index:
|
3192
|
+
self.RI.yview(*args)
|
3193
|
+
self.main_table_redraw_grid_and_text(redraw_header=False, redraw_row_index=True)
|
3194
|
+
if move_synced:
|
3195
|
+
self.y_move_synced_scrolls(*args, use_scrollbar=True)
|
3196
|
+
|
3219
3197
|
def set_xviews(self, *args, move_synced: bool = True, redraw: bool = True) -> None:
|
3220
3198
|
self.main_table_redraw_grid_and_text(setting_views=True)
|
3221
3199
|
self.update_idletasks()
|
3222
3200
|
self.xview(*args)
|
3223
3201
|
if self.show_header:
|
3202
|
+
self.CH.update_idletasks()
|
3224
3203
|
self.CH.xview(*args)
|
3204
|
+
self.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=False)
|
3225
3205
|
if move_synced:
|
3226
3206
|
self.x_move_synced_scrolls(*args)
|
3227
3207
|
self.fix_views()
|
3228
|
-
self.PAR.set_refresh_timer(redraw)
|
3229
3208
|
|
3230
3209
|
def set_yviews(self, *args, move_synced: bool = True, redraw: bool = True) -> None:
|
3231
3210
|
self.main_table_redraw_grid_and_text(setting_views=True)
|
3232
3211
|
self.update_idletasks()
|
3233
3212
|
self.yview(*args)
|
3234
3213
|
if self.show_index:
|
3214
|
+
self.RI.update_idletasks()
|
3235
3215
|
self.RI.yview(*args)
|
3216
|
+
self.main_table_redraw_grid_and_text(redraw_header=False, redraw_row_index=True)
|
3236
3217
|
if move_synced:
|
3237
3218
|
self.y_move_synced_scrolls(*args)
|
3238
3219
|
self.fix_views()
|
3239
|
-
self.PAR.set_refresh_timer(redraw)
|
3240
3220
|
|
3241
3221
|
def set_view(self, x_args: list[str, float], y_args: list[str, float]) -> None:
|
3242
3222
|
self.set_xviews(*x_args)
|
@@ -5194,8 +5174,7 @@ class MainTable(tk.Canvas):
|
|
5194
5174
|
resized_cols = False
|
5195
5175
|
resized_rows = False
|
5196
5176
|
if self.PAR.ops.auto_resize_columns and self.allow_auto_resize_columns and col_pos_exists:
|
5197
|
-
max_w =
|
5198
|
-
max_w -= self.PAR.ops.empty_horizontal
|
5177
|
+
max_w = can_width - self.PAR.ops.empty_horizontal
|
5199
5178
|
if self.PAR.ops.auto_resize_columns < self.min_column_width:
|
5200
5179
|
min_column_width = self.column_width
|
5201
5180
|
else:
|
@@ -5219,8 +5198,7 @@ class MainTable(tk.Canvas):
|
|
5219
5198
|
widths[i] -= change
|
5220
5199
|
self.set_col_positions(itr=widths)
|
5221
5200
|
if self.PAR.ops.auto_resize_rows and self.allow_auto_resize_rows and row_pos_exists:
|
5222
|
-
max_h =
|
5223
|
-
max_h -= self.PAR.ops.empty_vertical
|
5201
|
+
max_h = can_height - self.PAR.ops.empty_vertical
|
5224
5202
|
if self.PAR.ops.auto_resize_rows < self.min_row_height:
|
5225
5203
|
min_row_height = self.min_row_height
|
5226
5204
|
else:
|
@@ -5273,11 +5251,13 @@ class MainTable(tk.Canvas):
|
|
5273
5251
|
last_col_line_pos + self.PAR.ops.empty_horizontal + 2,
|
5274
5252
|
last_row_line_pos + self.PAR.ops.empty_vertical + 2,
|
5275
5253
|
)
|
5276
|
-
if scrollregion != self.scrollregion:
|
5254
|
+
if setting_views or scrollregion != self.scrollregion:
|
5277
5255
|
self.configure(scrollregion=scrollregion)
|
5278
5256
|
self.scrollregion = scrollregion
|
5279
|
-
|
5280
|
-
|
5257
|
+
self.CH.configure_scrollregion(last_col_line_pos)
|
5258
|
+
self.RI.configure_scrollregion(last_row_line_pos)
|
5259
|
+
if setting_views:
|
5260
|
+
return False
|
5281
5261
|
scrollpos_bot = self.canvasy(can_height)
|
5282
5262
|
end_row = bisect_right(self.row_positions, scrollpos_bot)
|
5283
5263
|
if not scrollpos_bot >= self.row_positions[-1]:
|
@@ -5685,7 +5665,7 @@ class MainTable(tk.Canvas):
|
|
5685
5665
|
r = r1
|
5686
5666
|
if c is None:
|
5687
5667
|
c = c1
|
5688
|
-
if r1 <= r and c1 <= c and r2
|
5668
|
+
if r1 <= r and c1 <= c and r2 >= r and c2 >= c:
|
5689
5669
|
self.create_currently_selected_box(
|
5690
5670
|
r,
|
5691
5671
|
c,
|
@@ -5701,7 +5681,7 @@ class MainTable(tk.Canvas):
|
|
5701
5681
|
c = box[1]
|
5702
5682
|
for item, selection_box in self.get_selection_items(reverse=True):
|
5703
5683
|
r1, c1, r2, c2 = selection_box.coords
|
5704
|
-
if box == (r1, c1, r2, c2) and r1 <= r and c1 <= c and r2
|
5684
|
+
if box == (r1, c1, r2, c2) and r1 <= r and c1 <= c and r2 >= r and c2 >= c:
|
5705
5685
|
self.create_currently_selected_box(
|
5706
5686
|
r,
|
5707
5687
|
c,
|
@@ -5714,7 +5694,7 @@ class MainTable(tk.Canvas):
|
|
5714
5694
|
if r is not None and c is not None:
|
5715
5695
|
for item, selection_box in self.get_selection_items(reverse=True):
|
5716
5696
|
r1, c1, r2, c2 = selection_box.coords
|
5717
|
-
if r1 <= r and c1 <= c and r2
|
5697
|
+
if r1 <= r and c1 <= c and r2 >= r and c2 >= c:
|
5718
5698
|
self.create_currently_selected_box(
|
5719
5699
|
r,
|
5720
5700
|
c,
|
@@ -6085,9 +6065,16 @@ class MainTable(tk.Canvas):
|
|
6085
6065
|
return
|
6086
6066
|
for item, box in self.get_selection_items():
|
6087
6067
|
r1, c1, r2, c2 = box.coords
|
6088
|
-
if r1 >= len(self.row_positions) - 1
|
6089
|
-
self.
|
6090
|
-
|
6068
|
+
if r1 >= len(self.row_positions) - 1:
|
6069
|
+
if len(self.row_positions) > 1:
|
6070
|
+
r1 = len(self.row_positions) - 2
|
6071
|
+
else:
|
6072
|
+
r1 = len(self.row_positions) - 1
|
6073
|
+
if c1 >= len(self.col_positions) - 1:
|
6074
|
+
if len(self.col_positions) > 1:
|
6075
|
+
c1 = len(self.col_positions) - 2
|
6076
|
+
else:
|
6077
|
+
c1 = len(self.col_positions) - 1
|
6091
6078
|
if r2 > len(self.row_positions) - 1:
|
6092
6079
|
r2 = len(self.row_positions) - 1
|
6093
6080
|
if c2 > len(self.col_positions) - 1:
|
tksheet/row_index.py
CHANGED
@@ -391,13 +391,15 @@ class RowIndex(tk.Canvas):
|
|
391
391
|
)
|
392
392
|
elif self.width_resizing_enabled and self.rsz_h is None and self.rsz_w is True:
|
393
393
|
self.set_width_of_index_to_text()
|
394
|
-
elif self.row_selection_enabled and self.rsz_h is None and self.rsz_w is None:
|
394
|
+
elif (self.row_selection_enabled or self.PAR.ops.treeview) and self.rsz_h is None and self.rsz_w is None:
|
395
395
|
r = self.MT.identify_row(y=event.y)
|
396
396
|
if r < len(self.MT.row_positions) - 1:
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
397
|
+
iid = self.event_over_tree_arrow(r, self.canvasy(event.y), event.x)
|
398
|
+
if self.row_selection_enabled:
|
399
|
+
if self.MT.single_selection_enabled:
|
400
|
+
self.select_row(r, redraw=iid is None)
|
401
|
+
elif self.MT.toggle_selection_enabled:
|
402
|
+
self.toggle_select_row(r, redraw=iid is None)
|
401
403
|
datarn = r if self.MT.all_rows_displayed else self.MT.displayed_rows[r]
|
402
404
|
if (
|
403
405
|
self.get_cell_kwargs(datarn, key="dropdown")
|
@@ -405,8 +407,8 @@ class RowIndex(tk.Canvas):
|
|
405
407
|
or self.edit_cell_enabled
|
406
408
|
):
|
407
409
|
self.open_cell(event)
|
408
|
-
elif
|
409
|
-
self.PAR.item(iid, open_=iid not in self.tree_open_ids
|
410
|
+
elif iid is not None:
|
411
|
+
self.PAR.item(iid, open_=iid not in self.tree_open_ids)
|
410
412
|
self.rsz_h = None
|
411
413
|
self.mouse_motion(event)
|
412
414
|
try_binding(self.extra_double_b1_func, event)
|
@@ -870,7 +872,7 @@ class RowIndex(tk.Canvas):
|
|
870
872
|
elif (iid := self.event_over_tree_arrow(r, canvasy, event.x)) is not None:
|
871
873
|
if self.MT.selection_boxes:
|
872
874
|
self.select_row(r, redraw=False)
|
873
|
-
self.PAR.item(iid, open_=iid not in self.tree_open_ids
|
875
|
+
self.PAR.item(iid, open_=iid not in self.tree_open_ids)
|
874
876
|
else:
|
875
877
|
self.mouseclick_outside_editor_or_dropdown_all_canvases(inside=True)
|
876
878
|
self.b1_pressed_loc = None
|
@@ -1189,8 +1191,8 @@ class RowIndex(tk.Canvas):
|
|
1189
1191
|
new_w = self.set_width_of_index_to_text(only_rows=only_rows, set_width=False)
|
1190
1192
|
else:
|
1191
1193
|
new_w = None
|
1192
|
-
if new_w is not None and (
|
1193
|
-
new_w =
|
1194
|
+
if new_w is not None and (sheet_w_x := floor(self.PAR.winfo_width() * 0.8)) < new_w:
|
1195
|
+
new_w = sheet_w_x
|
1194
1196
|
if new_w and (self.current_width - new_w > 15 or new_w - self.current_width > 5):
|
1195
1197
|
self.set_width(new_w, set_TL=True)
|
1196
1198
|
return True
|
@@ -1392,9 +1394,19 @@ class RowIndex(tk.Canvas):
|
|
1392
1394
|
t = self.create_polygon(points, fill=fill, outline=outline, tag=tag, smooth=True)
|
1393
1395
|
self.disp_checkbox[t] = True
|
1394
1396
|
|
1397
|
+
def configure_scrollregion(self, last_row_line_pos: float) -> None:
|
1398
|
+
self.configure(
|
1399
|
+
scrollregion=(
|
1400
|
+
0,
|
1401
|
+
0,
|
1402
|
+
self.current_width,
|
1403
|
+
last_row_line_pos + self.PAR.ops.empty_vertical + 2,
|
1404
|
+
)
|
1405
|
+
)
|
1406
|
+
|
1395
1407
|
def redraw_grid_and_text(
|
1396
1408
|
self,
|
1397
|
-
last_row_line_pos:
|
1409
|
+
last_row_line_pos: float,
|
1398
1410
|
scrollpos_top: int,
|
1399
1411
|
y_stop: int,
|
1400
1412
|
start_row: int,
|
@@ -1403,14 +1415,7 @@ class RowIndex(tk.Canvas):
|
|
1403
1415
|
row_pos_exists: bool,
|
1404
1416
|
) -> None:
|
1405
1417
|
try:
|
1406
|
-
self.
|
1407
|
-
scrollregion=(
|
1408
|
-
0,
|
1409
|
-
0,
|
1410
|
-
self.current_width,
|
1411
|
-
last_row_line_pos + self.PAR.ops.empty_vertical + 2,
|
1412
|
-
)
|
1413
|
-
)
|
1418
|
+
self.configure_scrollregion(last_row_line_pos=last_row_line_pos)
|
1414
1419
|
except Exception:
|
1415
1420
|
return
|
1416
1421
|
self.hidd_text.update(self.disp_text)
|
tksheet/sheet.py
CHANGED
@@ -402,13 +402,13 @@ class Sheet(tk.Frame):
|
|
402
402
|
self.set_scrollbar_options()
|
403
403
|
self.yscroll = ttk.Scrollbar(
|
404
404
|
self,
|
405
|
-
command=self.MT.
|
405
|
+
command=self.MT._yscrollbar,
|
406
406
|
orient="vertical",
|
407
407
|
style=f"Sheet{self.unique_id}.Vertical.TScrollbar",
|
408
408
|
)
|
409
409
|
self.xscroll = ttk.Scrollbar(
|
410
410
|
self,
|
411
|
-
command=self.MT.
|
411
|
+
command=self.MT._xscrollbar,
|
412
412
|
orient="horizontal",
|
413
413
|
style=f"Sheet{self.unique_id}.Horizontal.TScrollbar",
|
414
414
|
)
|
@@ -593,9 +593,12 @@ class Sheet(tk.Frame):
|
|
593
593
|
|
594
594
|
def extra_bindings(
|
595
595
|
self,
|
596
|
-
bindings: str | list | tuple,
|
596
|
+
bindings: str | list | tuple | None = None,
|
597
597
|
func: Callable | None = None,
|
598
598
|
) -> Sheet:
|
599
|
+
# bindings is None, unbind all
|
600
|
+
if bindings is None:
|
601
|
+
bindings = "all"
|
599
602
|
# bindings is str, func arg is None or Callable
|
600
603
|
if isinstance(bindings, str):
|
601
604
|
iterable = [(bindings, func)]
|
@@ -1935,6 +1938,7 @@ class Sheet(tk.Frame):
|
|
1935
1938
|
undo: bool = False,
|
1936
1939
|
emit_event: bool = False,
|
1937
1940
|
create_selections: bool = True,
|
1941
|
+
add_column_widths: bool = True,
|
1938
1942
|
redraw: bool = True,
|
1939
1943
|
) -> EventDataDict:
|
1940
1944
|
total_cols = None
|
@@ -1993,6 +1997,7 @@ class Sheet(tk.Frame):
|
|
1993
1997
|
heights=heights,
|
1994
1998
|
row_index=row_index,
|
1995
1999
|
),
|
2000
|
+
add_col_positions=add_column_widths,
|
1996
2001
|
event_data=event_dict(
|
1997
2002
|
name="add_rows",
|
1998
2003
|
sheet=self.name,
|
@@ -2018,6 +2023,7 @@ class Sheet(tk.Frame):
|
|
2018
2023
|
undo: bool = False,
|
2019
2024
|
emit_event: bool = False,
|
2020
2025
|
create_selections: bool = True,
|
2026
|
+
add_row_heights: bool = True,
|
2021
2027
|
redraw: bool = True,
|
2022
2028
|
) -> EventDataDict:
|
2023
2029
|
old_total = self.MT.equalize_data_row_lengths()
|
@@ -2084,6 +2090,7 @@ class Sheet(tk.Frame):
|
|
2084
2090
|
widths=widths,
|
2085
2091
|
headers=headers,
|
2086
2092
|
),
|
2093
|
+
add_row_positions=add_row_heights,
|
2087
2094
|
event_data=event_dict(
|
2088
2095
|
name="add_columns",
|
2089
2096
|
sheet=self.name,
|
@@ -4117,7 +4124,11 @@ class Sheet(tk.Frame):
|
|
4117
4124
|
def set_options(self, redraw: bool = True, **kwargs) -> Sheet:
|
4118
4125
|
for k, v in kwargs.items():
|
4119
4126
|
if k in self.ops and v != self.ops[k]:
|
4127
|
+
if k.endswith("bindings"):
|
4128
|
+
self.MT._disable_binding(k.split("_")[0])
|
4120
4129
|
self.ops[k] = v
|
4130
|
+
if k.endswith("bindings"):
|
4131
|
+
self.MT._enable_binding(k.split("_")[0])
|
4121
4132
|
if "from_clipboard_delimiters" in kwargs:
|
4122
4133
|
self.ops.from_clipboard_delimiters = (
|
4123
4134
|
self.ops.from_clipboard_delimiters
|
@@ -4172,7 +4183,6 @@ class Sheet(tk.Frame):
|
|
4172
4183
|
if any(k in kwargs for k in scrollbar_options_keys):
|
4173
4184
|
self.set_scrollbar_options()
|
4174
4185
|
self.MT.create_rc_menus()
|
4175
|
-
self.MT.key_bindings()
|
4176
4186
|
self.set_refresh_timer(redraw)
|
4177
4187
|
return self
|
4178
4188
|
|
@@ -4480,7 +4490,9 @@ class Sheet(tk.Frame):
|
|
4480
4490
|
x += 1
|
4481
4491
|
tally_of_ids[iid] += 1
|
4482
4492
|
row[iid_column] = new
|
4483
|
-
if iid
|
4493
|
+
if iid in self.RI.tree:
|
4494
|
+
self.RI.tree[iid].text = row[text_column]
|
4495
|
+
else:
|
4484
4496
|
self.RI.tree[iid] = Node(row[text_column], iid, "")
|
4485
4497
|
if iid == pid or self.RI.pid_causes_recursive_loop(iid, pid):
|
4486
4498
|
row[parent_column] = ""
|
@@ -4531,7 +4543,6 @@ class Sheet(tk.Frame):
|
|
4531
4543
|
Accepts set[str] of iids that are open in the treeview
|
4532
4544
|
Closes everything else
|
4533
4545
|
"""
|
4534
|
-
self.RI.tree_open_ids = open_ids if isinstance(open_ids, set) else set(open_ids)
|
4535
4546
|
self.hide_rows(
|
4536
4547
|
set(self.MT.displayed_rows),
|
4537
4548
|
redraw=False,
|
@@ -4543,16 +4554,18 @@ class Sheet(tk.Frame):
|
|
4543
4554
|
redraw=False,
|
4544
4555
|
deselect_all=True,
|
4545
4556
|
)
|
4557
|
+
open_ids = set(filter(self.exists, map(str.lower, open_ids)))
|
4558
|
+
self.RI.tree_open_ids = open_ids
|
4546
4559
|
if open_ids:
|
4547
|
-
self.tree_open(
|
4560
|
+
self.tree_open(open_ids)
|
4548
4561
|
return self
|
4549
4562
|
|
4550
4563
|
def tree_open(self, *items) -> Sheet:
|
4551
4564
|
"""
|
4552
4565
|
If used without args all items are opened
|
4553
4566
|
"""
|
4554
|
-
if items:
|
4555
|
-
for item in
|
4567
|
+
if items := set(unpack(items)):
|
4568
|
+
for item in filter(items.__contains__, self.get_children()):
|
4556
4569
|
self.item(item, open_=True)
|
4557
4570
|
else:
|
4558
4571
|
for item in self.get_children():
|
@@ -4597,9 +4610,6 @@ class Sheet(tk.Frame):
|
|
4597
4610
|
text = iid
|
4598
4611
|
parent_node = self.RI.tree[pid] if parent else ""
|
4599
4612
|
self.RI.tree[iid] = Node(text, iid, parent_node)
|
4600
|
-
if self.RI.pid_causes_recursive_loop(iid, pid):
|
4601
|
-
del self.RI.tree[iid]
|
4602
|
-
raise ValueError(f"iid '{iid}' causes a recursive loop with parent '{parent}'.")
|
4603
4613
|
if parent_node:
|
4604
4614
|
if isinstance(index, int):
|
4605
4615
|
idx = self.RI.tree_rns[pid] + index + 1
|
@@ -4666,24 +4676,25 @@ class Sheet(tk.Frame):
|
|
4666
4676
|
if self.RI.tree[item].children:
|
4667
4677
|
if open_:
|
4668
4678
|
self.RI.tree_open_ids.add(item)
|
4669
|
-
self.
|
4670
|
-
|
4671
|
-
|
4672
|
-
|
4673
|
-
|
4679
|
+
if self.item_displayed(item):
|
4680
|
+
self.show_rows(
|
4681
|
+
rows=(self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item, check_open=True)),
|
4682
|
+
redraw=False,
|
4683
|
+
deselect_all=False,
|
4684
|
+
)
|
4674
4685
|
else:
|
4675
4686
|
self.RI.tree_open_ids.discard(item)
|
4676
|
-
|
4677
|
-
|
4678
|
-
|
4679
|
-
|
4680
|
-
|
4681
|
-
|
4682
|
-
|
4687
|
+
if self.item_displayed(item):
|
4688
|
+
self.hide_rows(
|
4689
|
+
rows={self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item, check_open=True)},
|
4690
|
+
redraw=False,
|
4691
|
+
deselect_all=False,
|
4692
|
+
data_indexes=True,
|
4693
|
+
)
|
4683
4694
|
else:
|
4684
4695
|
self.RI.tree_open_ids.discard(item)
|
4685
4696
|
get = not (isinstance(iid, str) or isinstance(text, str) or isinstance(values, list) or isinstance(open_, bool))
|
4686
|
-
self.set_refresh_timer(redraw=not get
|
4697
|
+
self.set_refresh_timer(redraw=not get and redraw)
|
4687
4698
|
if get:
|
4688
4699
|
return DotDict(
|
4689
4700
|
text=self.RI.tree[item].text,
|
@@ -0,0 +1,20 @@
|
|
1
|
+
tksheet/__init__.py,sha256=w1YOGIZHF7gjLLEWIH-XLK-ftzuYgSiLTvMUg6ORTYM,2014
|
2
|
+
tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
|
3
|
+
tksheet/column_headers.py,sha256=6yYncfnKKKlSGTln35eP74e2Oom9A2XX85SrIsDeq9g,100452
|
4
|
+
tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
|
5
|
+
tksheet/functions.py,sha256=ytmHQtSa8cN6dKYLFra5G0393-4sU7bivvT_U4wxksI,39697
|
6
|
+
tksheet/main_table.py,sha256=1K-JpLixwx_cnqp5IXeghRWyzaMdQiP6BPm6QVOtfzs,319012
|
7
|
+
tksheet/other_classes.py,sha256=P3FYUYreLhstATvHCNow8sDQoCsD_02KB6oXcca3ahE,13628
|
8
|
+
tksheet/row_index.py,sha256=BnQF-lxH50MfPWlXW94oYSEJXoPewoX29VS7j0X1Jwc,105895
|
9
|
+
tksheet/sheet.py,sha256=dvYtZpNJsu6WfjdUKt6RKcwKeDY5c7wZ-tQfL1rjglQ,259484
|
10
|
+
tksheet/sheet_options.py,sha256=mh0rTvWrFvIKaiv88jtMZy0TSA8zTS1GXSe88u8_rzk,11978
|
11
|
+
tksheet/text_editor.py,sha256=81_IZKrTVa2KIx2cJ4n3cFvFMAwvbHIQYgqtyat-97I,6681
|
12
|
+
tksheet/themes.py,sha256=OwUe31NRbosjw3ZoZsMyB8lNVyYin9YcKLhCturi5q8,13398
|
13
|
+
tksheet/top_left_rectangle.py,sha256=-2u9GfOvcqhkKwHEtbqdFvXCY3RbvL5k2Sh9l3r_k04,8275
|
14
|
+
tksheet/types.py,sha256=IgoEHMbceKpakcZtanxKaKJ4RdCq7UW6EoEIIz5O59k,340
|
15
|
+
tksheet/vars.py,sha256=8Qxas-m5nU-yMaeAweO4Z30FM9cOQoRTiOsH4kgZp5s,2288
|
16
|
+
tksheet-7.1.11.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
17
|
+
tksheet-7.1.11.dist-info/METADATA,sha256=SRDk-Is6G0UmdJ6PAMgPzkwumb4PLOFETNplec7bkbE,6014
|
18
|
+
tksheet-7.1.11.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
19
|
+
tksheet-7.1.11.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
20
|
+
tksheet-7.1.11.dist-info/RECORD,,
|
tksheet-7.1.9.dist-info/RECORD
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
tksheet/__init__.py,sha256=9Wvm_zS75-z0FFGXl9Vz1cGsXbUBi983lVC3VmLnmhM,1994
|
2
|
-
tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
|
3
|
-
tksheet/column_headers.py,sha256=u5SRsI3VAoqxpUpPQZfu2Zimmf2OmZUBD_hMJKso-pw,100204
|
4
|
-
tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
|
5
|
-
tksheet/functions.py,sha256=ytmHQtSa8cN6dKYLFra5G0393-4sU7bivvT_U4wxksI,39697
|
6
|
-
tksheet/main_table.py,sha256=YKlcqiSj089i0-HXGtPBTLGW28Y7d_lv6hFFF6S_pQM,318310
|
7
|
-
tksheet/other_classes.py,sha256=P3FYUYreLhstATvHCNow8sDQoCsD_02KB6oXcca3ahE,13628
|
8
|
-
tksheet/row_index.py,sha256=wfOPHitGfipTysCMfQA-Nl4mJawmkv9gm5CAtIlKgxo,105673
|
9
|
-
tksheet/sheet.py,sha256=n_LrHnd4Xim2TzgJ1DY8Z1n2aaUdtwWiRukvxFMTOws,258919
|
10
|
-
tksheet/sheet_options.py,sha256=mh0rTvWrFvIKaiv88jtMZy0TSA8zTS1GXSe88u8_rzk,11978
|
11
|
-
tksheet/text_editor.py,sha256=81_IZKrTVa2KIx2cJ4n3cFvFMAwvbHIQYgqtyat-97I,6681
|
12
|
-
tksheet/themes.py,sha256=OwUe31NRbosjw3ZoZsMyB8lNVyYin9YcKLhCturi5q8,13398
|
13
|
-
tksheet/top_left_rectangle.py,sha256=-2u9GfOvcqhkKwHEtbqdFvXCY3RbvL5k2Sh9l3r_k04,8275
|
14
|
-
tksheet/types.py,sha256=IgoEHMbceKpakcZtanxKaKJ4RdCq7UW6EoEIIz5O59k,340
|
15
|
-
tksheet/vars.py,sha256=8Qxas-m5nU-yMaeAweO4Z30FM9cOQoRTiOsH4kgZp5s,2288
|
16
|
-
tksheet-7.1.9.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
17
|
-
tksheet-7.1.9.dist-info/METADATA,sha256=Nyratgt4E9d83xYtfOpdQh4nd8o4HzTiV7-Mz61RPZw,6013
|
18
|
-
tksheet-7.1.9.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
19
|
-
tksheet-7.1.9.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
20
|
-
tksheet-7.1.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|