tksheet 7.1.10__tar.gz → 7.1.12__tar.gz
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-7.1.10/tksheet.egg-info → tksheet-7.1.12}/PKG-INFO +1 -1
- {tksheet-7.1.10 → tksheet-7.1.12}/pyproject.toml +1 -1
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/__init__.py +1 -1
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/column_headers.py +14 -13
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/functions.py +0 -2
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/main_table.py +53 -37
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/row_index.py +2 -0
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/sheet.py +13 -6
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/themes.py +12 -10
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/vars.py +52 -2
- {tksheet-7.1.10 → tksheet-7.1.12/tksheet.egg-info}/PKG-INFO +1 -1
- {tksheet-7.1.10 → tksheet-7.1.12}/LICENSE.txt +0 -0
- {tksheet-7.1.10 → tksheet-7.1.12}/README.md +0 -0
- {tksheet-7.1.10 → tksheet-7.1.12}/setup.cfg +0 -0
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/colors.py +0 -0
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/formatters.py +0 -0
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/other_classes.py +0 -0
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/sheet_options.py +0 -0
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/text_editor.py +0 -0
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/top_left_rectangle.py +0 -0
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/types.py +0 -0
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet.egg-info/SOURCES.txt +0 -0
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet.egg-info/dependency_links.txt +0 -0
- {tksheet-7.1.10 → tksheet-7.1.12}/tksheet.egg-info/top_level.txt +0 -0
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
|
|
6
6
|
name = "tksheet"
|
7
7
|
description = "Tkinter table / sheet widget"
|
8
8
|
readme = "README.md"
|
9
|
-
version = "7.1.
|
9
|
+
version = "7.1.12"
|
10
10
|
authors = [{ name = "ragardner", email = "github@ragardner.simplelogin.com" }]
|
11
11
|
requires-python = ">=3.8"
|
12
12
|
license = {file = "LICENSE.txt"}
|
@@ -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:
|
@@ -1953,6 +1953,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1953
1953
|
self.dropdown.window.reset(**reset_kwargs)
|
1954
1954
|
self.itemconfig(self.dropdown.canvas_id, state="normal")
|
1955
1955
|
self.coords(self.dropdown.canvas_id, self.MT.col_positions[c], ypos)
|
1956
|
+
self.dropdown.window.tkraise()
|
1956
1957
|
else:
|
1957
1958
|
self.dropdown.window = self.PAR.dropdown_class(
|
1958
1959
|
self.winfo_toplevel(),
|
@@ -204,8 +204,6 @@ def get_dropdown_kwargs(
|
|
204
204
|
def get_dropdown_dict(**kwargs) -> dict:
|
205
205
|
return {
|
206
206
|
"values": kwargs["values"],
|
207
|
-
"window": "no dropdown open",
|
208
|
-
"canvas_id": "no dropdown open",
|
209
207
|
"select_function": kwargs["selection_function"],
|
210
208
|
"modified_function": kwargs["modified_function"],
|
211
209
|
"search_function": kwargs["search_function"],
|
@@ -91,6 +91,10 @@ from .text_editor import (
|
|
91
91
|
)
|
92
92
|
from .vars import (
|
93
93
|
USER_OS,
|
94
|
+
bind_add_columns,
|
95
|
+
bind_add_rows,
|
96
|
+
bind_del_columns,
|
97
|
+
bind_del_rows,
|
94
98
|
ctrl_key,
|
95
99
|
rc_binding,
|
96
100
|
symbols_set,
|
@@ -551,7 +555,10 @@ class MainTable(tk.Canvas):
|
|
551
555
|
for r1, c1, r2, c2 in boxes:
|
552
556
|
self.show_ctrl_outline(canvas="table", start_cell=(c1, r1), end_cell=(c2, r2))
|
553
557
|
self.clipboard_clear()
|
554
|
-
|
558
|
+
if len(event_data["cells"]["table"]) == 1:
|
559
|
+
self.clipboard_append(next(iter(event_data["cells"]["table"].values())))
|
560
|
+
else:
|
561
|
+
self.clipboard_append(s.getvalue())
|
555
562
|
self.update_idletasks()
|
556
563
|
try_binding(self.extra_end_ctrl_c_func, event_data, "end_ctrl_c")
|
557
564
|
|
@@ -615,7 +622,10 @@ class MainTable(tk.Canvas):
|
|
615
622
|
if event_data["cells"]["table"]:
|
616
623
|
self.undo_stack.append(ev_stack_dict(event_data))
|
617
624
|
self.clipboard_clear()
|
618
|
-
|
625
|
+
if len(event_data["cells"]["table"]) == 1:
|
626
|
+
self.clipboard_append(next(iter(event_data["cells"]["table"].values())))
|
627
|
+
else:
|
628
|
+
self.clipboard_append(s.getvalue())
|
619
629
|
self.update_idletasks()
|
620
630
|
self.refresh()
|
621
631
|
for r1, c1, r2, c2 in boxes:
|
@@ -657,9 +667,11 @@ class MainTable(tk.Canvas):
|
|
657
667
|
dialect = csv.Sniffer().sniff(data, delimiters=self.PAR.ops.from_clipboard_delimiters)
|
658
668
|
except Exception:
|
659
669
|
dialect = csv.excel_tab
|
660
|
-
|
661
|
-
|
662
|
-
|
670
|
+
if dialect.delimiter in data:
|
671
|
+
if not (data := list(csv.reader(io.StringIO(data), dialect=dialect, skipinitialspace=True))):
|
672
|
+
return
|
673
|
+
else:
|
674
|
+
data = [[data]]
|
663
675
|
new_data_numcols = max(map(len, data))
|
664
676
|
new_data_numrows = len(data)
|
665
677
|
for rn, r in enumerate(data):
|
@@ -2536,19 +2548,19 @@ class MainTable(tk.Canvas):
|
|
2536
2548
|
self.undo_enabled = True
|
2537
2549
|
self._tksheet_bind("undo_bindings", self.undo)
|
2538
2550
|
self._tksheet_bind("redo_bindings", self.redo)
|
2539
|
-
if binding in
|
2551
|
+
if binding in bind_del_columns:
|
2540
2552
|
self.rc_delete_column_enabled = True
|
2541
2553
|
self.rc_popup_menus_enabled = True
|
2542
2554
|
self.rc_select_enabled = True
|
2543
|
-
if binding in
|
2555
|
+
if binding in bind_del_rows:
|
2544
2556
|
self.rc_delete_row_enabled = True
|
2545
2557
|
self.rc_popup_menus_enabled = True
|
2546
2558
|
self.rc_select_enabled = True
|
2547
|
-
if binding in
|
2559
|
+
if binding in bind_add_columns:
|
2548
2560
|
self.rc_insert_column_enabled = True
|
2549
2561
|
self.rc_popup_menus_enabled = True
|
2550
2562
|
self.rc_select_enabled = True
|
2551
|
-
if binding in
|
2563
|
+
if binding in bind_add_rows:
|
2552
2564
|
self.rc_insert_row_enabled = True
|
2553
2565
|
self.rc_popup_menus_enabled = True
|
2554
2566
|
self.rc_select_enabled = True
|
@@ -2607,25 +2619,16 @@ class MainTable(tk.Canvas):
|
|
2607
2619
|
self.RI.row_selection_enabled = False
|
2608
2620
|
if binding in ("all", "row_drag_and_drop", "move_rows"):
|
2609
2621
|
self.RI.drag_and_drop_enabled = False
|
2610
|
-
if binding in
|
2622
|
+
if binding in bind_del_columns:
|
2611
2623
|
self.rc_delete_column_enabled = False
|
2612
|
-
|
2613
|
-
self.rc_select_enabled = False
|
2614
|
-
if binding in ("all", "rc_delete_row"):
|
2624
|
+
if binding in bind_del_rows:
|
2615
2625
|
self.rc_delete_row_enabled = False
|
2616
|
-
|
2617
|
-
self.rc_select_enabled = False
|
2618
|
-
if binding in ("all", "rc_insert_column"):
|
2626
|
+
if binding in bind_add_columns:
|
2619
2627
|
self.rc_insert_column_enabled = False
|
2620
|
-
|
2621
|
-
self.rc_select_enabled = False
|
2622
|
-
if binding in ("all", "rc_insert_row"):
|
2628
|
+
if binding in bind_add_rows:
|
2623
2629
|
self.rc_insert_row_enabled = False
|
2624
|
-
self.rc_popup_menus_enabled = False
|
2625
|
-
self.rc_select_enabled = False
|
2626
2630
|
if binding in ("all", "right_click_popup_menu", "rc_popup_menu"):
|
2627
2631
|
self.rc_popup_menus_enabled = False
|
2628
|
-
self.rc_select_enabled = False
|
2629
2632
|
if binding in ("all", "right_click_select", "rc_select"):
|
2630
2633
|
self.rc_select_enabled = False
|
2631
2634
|
if binding in ("all", "edit_cell", "edit_bindings", "edit"):
|
@@ -4180,6 +4183,7 @@ class MainTable(tk.Canvas):
|
|
4180
4183
|
create_ops: bool = True,
|
4181
4184
|
create_selections: bool = True,
|
4182
4185
|
add_row_positions: bool = True,
|
4186
|
+
push_ops: bool = True,
|
4183
4187
|
) -> EventDataDict:
|
4184
4188
|
self.saved_column_widths = {}
|
4185
4189
|
saved_displayed_columns = list(self.displayed_columns)
|
@@ -4227,10 +4231,11 @@ class MainTable(tk.Canvas):
|
|
4227
4231
|
)
|
4228
4232
|
if isinstance(self._headers, list):
|
4229
4233
|
self._headers = insert_items(self._headers, header, self.CH.fix_header)
|
4230
|
-
|
4231
|
-
|
4232
|
-
|
4233
|
-
|
4234
|
+
if push_ops:
|
4235
|
+
self.adjust_options_post_add_columns(
|
4236
|
+
cols=tuple(reversed(columns)),
|
4237
|
+
create_ops=create_ops,
|
4238
|
+
)
|
4234
4239
|
if create_selections:
|
4235
4240
|
self.deselect("all")
|
4236
4241
|
for boxst, boxend in consecutive_ranges(tuple(reversed(column_widths))):
|
@@ -4311,6 +4316,7 @@ class MainTable(tk.Canvas):
|
|
4311
4316
|
create_ops: bool = True,
|
4312
4317
|
create_selections: bool = True,
|
4313
4318
|
add_col_positions: bool = True,
|
4319
|
+
push_ops: bool = True,
|
4314
4320
|
) -> EventDataDict:
|
4315
4321
|
self.saved_row_heights = {}
|
4316
4322
|
saved_displayed_rows = list(self.displayed_rows)
|
@@ -4356,10 +4362,11 @@ class MainTable(tk.Canvas):
|
|
4356
4362
|
(self.PAR.ops.default_column_width for i in range(len(self.col_positions) - 1, maxcn + 1)),
|
4357
4363
|
)
|
4358
4364
|
)
|
4359
|
-
|
4360
|
-
|
4361
|
-
|
4362
|
-
|
4365
|
+
if push_ops:
|
4366
|
+
self.adjust_options_post_add_rows(
|
4367
|
+
rows=tuple(reversed(rows)),
|
4368
|
+
create_ops=create_ops,
|
4369
|
+
)
|
4363
4370
|
if create_selections:
|
4364
4371
|
self.deselect("all")
|
4365
4372
|
for boxst, boxend in consecutive_ranges(tuple(reversed(row_heights))):
|
@@ -5657,7 +5664,7 @@ class MainTable(tk.Canvas):
|
|
5657
5664
|
r = r1
|
5658
5665
|
if c is None:
|
5659
5666
|
c = c1
|
5660
|
-
if r1 <= r and c1 <= c and r2
|
5667
|
+
if r1 <= r and c1 <= c and r2 >= r and c2 >= c:
|
5661
5668
|
self.create_currently_selected_box(
|
5662
5669
|
r,
|
5663
5670
|
c,
|
@@ -5673,7 +5680,7 @@ class MainTable(tk.Canvas):
|
|
5673
5680
|
c = box[1]
|
5674
5681
|
for item, selection_box in self.get_selection_items(reverse=True):
|
5675
5682
|
r1, c1, r2, c2 = selection_box.coords
|
5676
|
-
if box == (r1, c1, r2, c2) and r1 <= r and c1 <= c and r2
|
5683
|
+
if box == (r1, c1, r2, c2) and r1 <= r and c1 <= c and r2 >= r and c2 >= c:
|
5677
5684
|
self.create_currently_selected_box(
|
5678
5685
|
r,
|
5679
5686
|
c,
|
@@ -5686,7 +5693,7 @@ class MainTable(tk.Canvas):
|
|
5686
5693
|
if r is not None and c is not None:
|
5687
5694
|
for item, selection_box in self.get_selection_items(reverse=True):
|
5688
5695
|
r1, c1, r2, c2 = selection_box.coords
|
5689
|
-
if r1 <= r and c1 <= c and r2
|
5696
|
+
if r1 <= r and c1 <= c and r2 >= r and c2 >= c:
|
5690
5697
|
self.create_currently_selected_box(
|
5691
5698
|
r,
|
5692
5699
|
c,
|
@@ -6057,9 +6064,16 @@ class MainTable(tk.Canvas):
|
|
6057
6064
|
return
|
6058
6065
|
for item, box in self.get_selection_items():
|
6059
6066
|
r1, c1, r2, c2 = box.coords
|
6060
|
-
if r1 >= len(self.row_positions) - 1
|
6061
|
-
self.
|
6062
|
-
|
6067
|
+
if r1 >= len(self.row_positions) - 1:
|
6068
|
+
if len(self.row_positions) > 1:
|
6069
|
+
r1 = len(self.row_positions) - 2
|
6070
|
+
else:
|
6071
|
+
r1 = len(self.row_positions) - 1
|
6072
|
+
if c1 >= len(self.col_positions) - 1:
|
6073
|
+
if len(self.col_positions) > 1:
|
6074
|
+
c1 = len(self.col_positions) - 2
|
6075
|
+
else:
|
6076
|
+
c1 = len(self.col_positions) - 1
|
6063
6077
|
if r2 > len(self.row_positions) - 1:
|
6064
6078
|
r2 = len(self.row_positions) - 1
|
6065
6079
|
if c2 > len(self.col_positions) - 1:
|
@@ -6737,6 +6751,7 @@ class MainTable(tk.Canvas):
|
|
6737
6751
|
win_w = self.col_positions[c + 1] - self.col_positions[c] + 1
|
6738
6752
|
if anchor == "nw":
|
6739
6753
|
if kwargs["state"] == "normal":
|
6754
|
+
self.text_editor.window.update_idletasks()
|
6740
6755
|
ypos = self.row_positions[r] + self.text_editor.window.winfo_height() - 1
|
6741
6756
|
else:
|
6742
6757
|
ypos = self.row_positions[r + 1]
|
@@ -6755,8 +6770,9 @@ class MainTable(tk.Canvas):
|
|
6755
6770
|
}
|
6756
6771
|
if self.dropdown.window:
|
6757
6772
|
self.dropdown.window.reset(**reset_kwargs)
|
6758
|
-
self.itemconfig(self.dropdown.canvas_id, state="normal", anchor=anchor)
|
6759
6773
|
self.coords(self.dropdown.canvas_id, self.col_positions[c], ypos)
|
6774
|
+
self.itemconfig(self.dropdown.canvas_id, state="normal", anchor=anchor)
|
6775
|
+
self.dropdown.window.tkraise()
|
6760
6776
|
else:
|
6761
6777
|
self.dropdown.window = self.PAR.dropdown_class(
|
6762
6778
|
self.winfo_toplevel(),
|
@@ -2029,6 +2029,7 @@ class RowIndex(tk.Canvas):
|
|
2029
2029
|
win_w = self.current_width + 1
|
2030
2030
|
if anchor == "nw":
|
2031
2031
|
if kwargs["state"] == "normal":
|
2032
|
+
self.text_editor.window.update_idletasks()
|
2032
2033
|
ypos = self.MT.row_positions[r] + self.text_editor.window.winfo_height() - 1
|
2033
2034
|
else:
|
2034
2035
|
ypos = self.MT.row_positions[r + 1]
|
@@ -2049,6 +2050,7 @@ class RowIndex(tk.Canvas):
|
|
2049
2050
|
self.dropdown.window.reset(**reset_kwargs)
|
2050
2051
|
self.itemconfig(self.dropdown.canvas_id, state="normal", anchor=anchor)
|
2051
2052
|
self.coords(self.dropdown.canvas_id, 0, ypos)
|
2053
|
+
self.dropdown.window.tkraise()
|
2052
2054
|
else:
|
2053
2055
|
self.dropdown.window = self.PAR.dropdown_class(
|
2054
2056
|
self.winfo_toplevel(),
|
@@ -1939,6 +1939,7 @@ class Sheet(tk.Frame):
|
|
1939
1939
|
emit_event: bool = False,
|
1940
1940
|
create_selections: bool = True,
|
1941
1941
|
add_column_widths: bool = True,
|
1942
|
+
push_ops: bool = True,
|
1942
1943
|
redraw: bool = True,
|
1943
1944
|
) -> EventDataDict:
|
1944
1945
|
total_cols = None
|
@@ -2005,6 +2006,7 @@ class Sheet(tk.Frame):
|
|
2005
2006
|
selected=self.MT.selected,
|
2006
2007
|
),
|
2007
2008
|
create_selections=create_selections,
|
2009
|
+
push_ops=push_ops,
|
2008
2010
|
)
|
2009
2011
|
if undo:
|
2010
2012
|
self.MT.undo_stack.append(ev_stack_dict(event_data))
|
@@ -2024,6 +2026,7 @@ class Sheet(tk.Frame):
|
|
2024
2026
|
emit_event: bool = False,
|
2025
2027
|
create_selections: bool = True,
|
2026
2028
|
add_row_heights: bool = True,
|
2029
|
+
push_ops: bool = True,
|
2027
2030
|
redraw: bool = True,
|
2028
2031
|
) -> EventDataDict:
|
2029
2032
|
old_total = self.MT.equalize_data_row_lengths()
|
@@ -2098,6 +2101,7 @@ class Sheet(tk.Frame):
|
|
2098
2101
|
selected=self.MT.selected,
|
2099
2102
|
),
|
2100
2103
|
create_selections=create_selections,
|
2104
|
+
push_ops=push_ops,
|
2101
2105
|
)
|
2102
2106
|
if undo:
|
2103
2107
|
self.MT.undo_stack.append(ev_stack_dict(event_data))
|
@@ -2571,7 +2575,7 @@ class Sheet(tk.Frame):
|
|
2571
2575
|
self.MT.open_dropdown_window(r, c)
|
2572
2576
|
return self
|
2573
2577
|
|
2574
|
-
def close_dropdown(self, r: int, c: int) -> Sheet:
|
2578
|
+
def close_dropdown(self, r: int | None = None, c: int | None = None) -> Sheet:
|
2575
2579
|
self.MT.close_dropdown_window(r, c)
|
2576
2580
|
return self
|
2577
2581
|
|
@@ -2579,7 +2583,7 @@ class Sheet(tk.Frame):
|
|
2579
2583
|
self.CH.open_dropdown_window(c)
|
2580
2584
|
return self
|
2581
2585
|
|
2582
|
-
def close_header_dropdown(self, c: int) -> Sheet:
|
2586
|
+
def close_header_dropdown(self, c: int | None = None) -> Sheet:
|
2583
2587
|
self.CH.close_dropdown_window(c)
|
2584
2588
|
return self
|
2585
2589
|
|
@@ -2587,7 +2591,7 @@ class Sheet(tk.Frame):
|
|
2587
2591
|
self.RI.open_dropdown_window(r)
|
2588
2592
|
return self
|
2589
2593
|
|
2590
|
-
def close_index_dropdown(self, r: int) -> Sheet:
|
2594
|
+
def close_index_dropdown(self, r: int | None = None) -> Sheet:
|
2591
2595
|
self.RI.close_dropdown_window(r)
|
2592
2596
|
return self
|
2593
2597
|
|
@@ -4470,6 +4474,7 @@ class Sheet(tk.Frame):
|
|
4470
4474
|
iid_column: int,
|
4471
4475
|
parent_column: int,
|
4472
4476
|
text_column: None | int = None,
|
4477
|
+
push_ops: bool = False,
|
4473
4478
|
) -> Sheet:
|
4474
4479
|
if text_column is None:
|
4475
4480
|
text_column = iid_column
|
@@ -4518,6 +4523,7 @@ class Sheet(tk.Frame):
|
|
4518
4523
|
row_index=True,
|
4519
4524
|
create_selections=False,
|
4520
4525
|
fill=False,
|
4526
|
+
push_ops=push_ops,
|
4521
4527
|
)
|
4522
4528
|
self.RI.tree_rns = {n.iid: i for i, n in enumerate(self.MT._row_index)}
|
4523
4529
|
self.hide_rows(
|
@@ -6231,8 +6237,8 @@ class Sheet(tk.Frame):
|
|
6231
6237
|
kwargs = self.RI.get_cell_kwargs(r_, key="dropdown")
|
6232
6238
|
if kwargs:
|
6233
6239
|
kwargs["values"] = values
|
6234
|
-
if self.RI.
|
6235
|
-
self.RI.
|
6240
|
+
if self.RI.dropdown.open:
|
6241
|
+
self.RI.dropdown.window.values(values)
|
6236
6242
|
if set_value is not None:
|
6237
6243
|
self.MT.row_index(newindex=set_value, index=r_)
|
6238
6244
|
# here
|
@@ -6454,7 +6460,7 @@ class Dropdown(Sheet):
|
|
6454
6460
|
width: int | None = None,
|
6455
6461
|
height: int | None = None,
|
6456
6462
|
font: None | tuple[str, int, str] = None,
|
6457
|
-
outline_thickness: int =
|
6463
|
+
outline_thickness: int = 2,
|
6458
6464
|
values: list[object] = [],
|
6459
6465
|
close_dropdown_window: Callable | None = None,
|
6460
6466
|
search_function: Callable = dropdown_search_function,
|
@@ -6512,6 +6518,7 @@ class Dropdown(Sheet):
|
|
6512
6518
|
align: str,
|
6513
6519
|
values: list[object] | None = None,
|
6514
6520
|
) -> None:
|
6521
|
+
self.deselect(redraw=False)
|
6515
6522
|
self.r = r
|
6516
6523
|
self.c = c
|
6517
6524
|
self.row = -1
|
@@ -1,6 +1,8 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
|
3
|
+
from .other_classes import DotDict
|
4
|
+
|
5
|
+
theme_light_blue: dict[str, str] = DotDict({
|
4
6
|
"popup_menu_fg": "#000000",
|
5
7
|
"popup_menu_bg": "#FFFFFF",
|
6
8
|
"popup_menu_highlight_bg": "#DCDEE0",
|
@@ -70,9 +72,9 @@ theme_light_blue: dict[str, str] = {
|
|
70
72
|
"horizontal_scroll_not_active_fg": "#DADCE0",
|
71
73
|
"vertical_scroll_pressed_fg": "#bdc1c6",
|
72
74
|
"horizontal_scroll_pressed_fg": "#bdc1c6",
|
73
|
-
}
|
75
|
+
})
|
74
76
|
|
75
|
-
theme_light_green: dict[str, str] = {
|
77
|
+
theme_light_green: dict[str, str] = DotDict({
|
76
78
|
"popup_menu_fg": "#000000",
|
77
79
|
"popup_menu_bg": "#FFFFFF",
|
78
80
|
"popup_menu_highlight_bg": "#DCDEE0",
|
@@ -142,9 +144,9 @@ theme_light_green: dict[str, str] = {
|
|
142
144
|
"horizontal_scroll_not_active_fg": "#c1c1c1",
|
143
145
|
"vertical_scroll_pressed_fg": "#707070",
|
144
146
|
"horizontal_scroll_pressed_fg": "#707070",
|
145
|
-
}
|
147
|
+
})
|
146
148
|
|
147
|
-
theme_dark: dict[str, str] = {
|
149
|
+
theme_dark: dict[str, str] = DotDict({
|
148
150
|
"popup_menu_fg": "white",
|
149
151
|
"popup_menu_bg": "gray15",
|
150
152
|
"popup_menu_highlight_bg": "gray40",
|
@@ -214,9 +216,9 @@ theme_dark: dict[str, str] = {
|
|
214
216
|
"horizontal_scroll_not_active_fg": "#3b3b3d",
|
215
217
|
"vertical_scroll_pressed_fg": "#a0a0a0",
|
216
218
|
"horizontal_scroll_pressed_fg": "#a0a0a0",
|
217
|
-
}
|
219
|
+
})
|
218
220
|
|
219
|
-
theme_black: dict[str, str] = {
|
221
|
+
theme_black: dict[str, str] = DotDict({
|
220
222
|
"popup_menu_fg": "white",
|
221
223
|
"popup_menu_bg": "gray15",
|
222
224
|
"popup_menu_highlight_bg": "gray40",
|
@@ -286,9 +288,9 @@ theme_black: dict[str, str] = {
|
|
286
288
|
"horizontal_scroll_not_active_fg": "#3b3a39",
|
287
289
|
"vertical_scroll_pressed_fg": "#a0a0a0",
|
288
290
|
"horizontal_scroll_pressed_fg": "#a0a0a0",
|
289
|
-
}
|
291
|
+
})
|
290
292
|
|
291
|
-
theme_dark_blue: dict[str, str] = theme_black.copy()
|
293
|
+
theme_dark_blue: dict[str, str] = DotDict(theme_black.copy())
|
292
294
|
theme_dark_blue["header_fg"] = "#6ACAD8"
|
293
295
|
theme_dark_blue["header_selected_cells_fg"] = "#6ACAD8"
|
294
296
|
theme_dark_blue["index_fg"] = "#6ACAD8"
|
@@ -303,7 +305,7 @@ theme_dark_blue["index_selected_rows_bg"] = "#6ACAD8"
|
|
303
305
|
theme_dark_blue["table_selected_rows_border_fg"] = "#6ACAD8"
|
304
306
|
theme_dark_blue["table_selected_columns_border_fg"] = "#6ACAD8"
|
305
307
|
|
306
|
-
theme_dark_green: dict[str, str] = theme_black.copy()
|
308
|
+
theme_dark_green: dict[str, str] = DotDict(theme_black.copy())
|
307
309
|
theme_dark_green["header_fg"] = "#66FFBF"
|
308
310
|
theme_dark_green["header_selected_cells_fg"] = "#66FFBF"
|
309
311
|
theme_dark_green["index_fg"] = "#66FFBF"
|
@@ -9,23 +9,28 @@ symbols_set: set[str] = set("""!#$%&'()*+,-./:;"@[]^_`{|}~>?= \\""")
|
|
9
9
|
nonelike: set[object] = {None, "none", ""}
|
10
10
|
truthy: set[object] = {True, "true", "t", "yes", "y", "on", "1", 1, 1.0}
|
11
11
|
falsy: set[object] = {False, "false", "f", "no", "n", "off", "0", 0, 0.0}
|
12
|
+
|
12
13
|
val_modifying_options: set[str, str, str] = {"checkbox", "format", "dropdown"}
|
13
|
-
|
14
|
+
|
15
|
+
named_span_types: set[str] = {
|
14
16
|
"format",
|
15
17
|
"highlight",
|
16
18
|
"dropdown",
|
17
19
|
"checkbox",
|
18
20
|
"readonly",
|
19
21
|
"align",
|
20
|
-
|
22
|
+
}
|
23
|
+
|
21
24
|
emitted_events: set[str] = {
|
22
25
|
"<<SheetModified>>",
|
23
26
|
"<<SheetRedrawn>>",
|
24
27
|
"<<SheetSelect>>",
|
25
28
|
}
|
29
|
+
|
26
30
|
backwards_compatibility_keys: dict[str, str] = {
|
27
31
|
"font": "table_font",
|
28
32
|
}
|
33
|
+
|
29
34
|
text_editor_to_unbind: tuple[str] = (
|
30
35
|
"<Alt-Return>",
|
31
36
|
"<Alt-KP_Enter>",
|
@@ -36,6 +41,7 @@ text_editor_to_unbind: tuple[str] = (
|
|
36
41
|
"<FocusOut>",
|
37
42
|
"<Escape>",
|
38
43
|
)
|
44
|
+
|
39
45
|
scrollbar_options_keys: set[str] = {
|
40
46
|
"vertical_scroll_background",
|
41
47
|
"horizontal_scroll_background",
|
@@ -70,3 +76,47 @@ scrollbar_options_keys: set[str] = {
|
|
70
76
|
"vertical_scroll_pressed_fg",
|
71
77
|
"horizontal_scroll_pressed_fg",
|
72
78
|
}
|
79
|
+
|
80
|
+
bind_add_columns: set[str] = {
|
81
|
+
"all",
|
82
|
+
"rc_insert_column",
|
83
|
+
"insert_column",
|
84
|
+
"add_column",
|
85
|
+
"insert_columns",
|
86
|
+
"add_columns",
|
87
|
+
"insert column",
|
88
|
+
"add column",
|
89
|
+
}
|
90
|
+
|
91
|
+
bind_del_columns: set[str] = {
|
92
|
+
"all",
|
93
|
+
"rc_delete_column",
|
94
|
+
"delete_column",
|
95
|
+
"del_column",
|
96
|
+
"delete_columns",
|
97
|
+
"del_columns",
|
98
|
+
"delete columns",
|
99
|
+
"del columns",
|
100
|
+
}
|
101
|
+
|
102
|
+
bind_add_rows: set[str] = {
|
103
|
+
"all",
|
104
|
+
"rc_insert_row",
|
105
|
+
"insert_row",
|
106
|
+
"add_row",
|
107
|
+
"insert_rows",
|
108
|
+
"add_rows",
|
109
|
+
"insert row",
|
110
|
+
"add row",
|
111
|
+
}
|
112
|
+
|
113
|
+
bind_del_rows: set[str] = {
|
114
|
+
"all",
|
115
|
+
"rc_delete_row",
|
116
|
+
"delete_row",
|
117
|
+
"del_row",
|
118
|
+
"delete_rows",
|
119
|
+
"del_rows",
|
120
|
+
"delete rows",
|
121
|
+
"del rows",
|
122
|
+
}
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|