tksheet 7.1.21__py3-none-any.whl → 7.1.23__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tksheet/__init__.py +5 -1
- tksheet/column_headers.py +35 -22
- tksheet/functions.py +27 -5
- tksheet/main_table.py +126 -64
- tksheet/row_index.py +56 -44
- tksheet/sheet.py +358 -272
- tksheet/sheet_options.py +1 -1
- tksheet/text_editor.py +1 -5
- tksheet/themes.py +41 -32
- tksheet/vars.py +22 -9
- {tksheet-7.1.21.dist-info → tksheet-7.1.23.dist-info}/METADATA +5 -5
- tksheet-7.1.23.dist-info/RECORD +20 -0
- tksheet-7.1.21.dist-info/RECORD +0 -20
- {tksheet-7.1.21.dist-info → tksheet-7.1.23.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.1.21.dist-info → tksheet-7.1.23.dist-info}/WHEEL +0 -0
- {tksheet-7.1.21.dist-info → tksheet-7.1.23.dist-info}/top_level.txt +0 -0
tksheet/row_index.py
CHANGED
@@ -32,6 +32,7 @@ from .functions import (
|
|
32
32
|
event_dict,
|
33
33
|
get_n2a,
|
34
34
|
is_contiguous,
|
35
|
+
new_tk_event,
|
35
36
|
num2alpha,
|
36
37
|
pickled_event_dict,
|
37
38
|
rounded_box_coords,
|
@@ -48,9 +49,10 @@ from .text_editor import (
|
|
48
49
|
TextEditor,
|
49
50
|
)
|
50
51
|
from .vars import (
|
51
|
-
USER_OS,
|
52
52
|
rc_binding,
|
53
53
|
symbols_set,
|
54
|
+
text_editor_close_bindings,
|
55
|
+
text_editor_newline_bindings,
|
54
56
|
text_editor_to_unbind,
|
55
57
|
)
|
56
58
|
|
@@ -136,6 +138,13 @@ class RowIndex(tk.Canvas):
|
|
136
138
|
self.tree_reset()
|
137
139
|
self.basic_bindings()
|
138
140
|
|
141
|
+
def event_generate(self, *args, **kwargs) -> None:
|
142
|
+
for arg in args:
|
143
|
+
if self.MT and arg in self.MT.event_linker:
|
144
|
+
self.MT.event_linker[arg]()
|
145
|
+
else:
|
146
|
+
super().event_generate(*args, **kwargs)
|
147
|
+
|
139
148
|
def basic_bindings(self, enable: bool = True) -> None:
|
140
149
|
if enable:
|
141
150
|
self.bind("<Motion>", self.mouse_motion)
|
@@ -835,6 +844,7 @@ class RowIndex(tk.Canvas):
|
|
835
844
|
event_data = event_dict(
|
836
845
|
name="move_rows",
|
837
846
|
sheet=self.PAR.name,
|
847
|
+
widget=self,
|
838
848
|
boxes=self.MT.get_boxes(),
|
839
849
|
selected=self.MT.selected,
|
840
850
|
value=r,
|
@@ -846,6 +856,7 @@ class RowIndex(tk.Canvas):
|
|
846
856
|
to_move=self.dragged_row.to_move,
|
847
857
|
),
|
848
858
|
move_data=self.PAR.ops.row_drag_and_drop_perform,
|
859
|
+
move_heights=self.PAR.ops.row_drag_and_drop_perform,
|
849
860
|
event_data=event_data,
|
850
861
|
)
|
851
862
|
event_data["moved"]["rows"] = {
|
@@ -1011,7 +1022,7 @@ class RowIndex(tk.Canvas):
|
|
1011
1022
|
w = self.PAR.ops.default_row_index_width
|
1012
1023
|
h = self.MT.min_row_height
|
1013
1024
|
if self.get_cell_kwargs(datarn, key="dropdown") or self.get_cell_kwargs(datarn, key="checkbox"):
|
1014
|
-
w += self.MT.index_txt_height
|
1025
|
+
w += self.MT.index_txt_height + 2
|
1015
1026
|
if self.PAR.ops.treeview:
|
1016
1027
|
if datarn in self.cell_options and "align" in self.cell_options[datarn]:
|
1017
1028
|
align = self.cell_options[datarn]["align"]
|
@@ -1181,23 +1192,22 @@ class RowIndex(tk.Canvas):
|
|
1181
1192
|
self.MT.recreate_all_selection_boxes()
|
1182
1193
|
|
1183
1194
|
def auto_set_index_width(self, end_row: int, only_rows: list) -> bool:
|
1184
|
-
if self.
|
1185
|
-
if
|
1186
|
-
|
1187
|
-
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1200
|
-
return True
|
1195
|
+
if not isinstance(self.MT._row_index, int) and not self.MT._row_index:
|
1196
|
+
if self.default_index == "letters":
|
1197
|
+
new_w = self.MT.get_txt_w(f"{num2alpha(end_row)}") + 20
|
1198
|
+
elif self.default_index == "numbers":
|
1199
|
+
new_w = self.MT.get_txt_w(f"{end_row}") + 20
|
1200
|
+
elif self.default_index == "both":
|
1201
|
+
new_w = self.MT.get_txt_w(f"{end_row + 1} {num2alpha(end_row)}") + 20
|
1202
|
+
elif self.PAR.ops.auto_resize_row_index is True:
|
1203
|
+
new_w = self.set_width_of_index_to_text(only_rows=only_rows, set_width=False)
|
1204
|
+
else:
|
1205
|
+
new_w = None
|
1206
|
+
if new_w is not None and (sheet_w_x := floor(self.PAR.winfo_width() * 0.7)) < new_w:
|
1207
|
+
new_w = sheet_w_x
|
1208
|
+
if new_w and (self.current_width - new_w > 15 or new_w - self.current_width > 3):
|
1209
|
+
self.set_width(new_w, set_TL=True)
|
1210
|
+
return True
|
1201
1211
|
return False
|
1202
1212
|
|
1203
1213
|
def redraw_highlight_get_text_fg(self, fr, sr, r, c_2, c_3, selections, datarn):
|
@@ -1861,24 +1871,19 @@ class RowIndex(tk.Canvas):
|
|
1861
1871
|
self.itemconfig(self.text_editor.canvas_id, state="normal")
|
1862
1872
|
self.text_editor.open = True
|
1863
1873
|
self.coords(self.text_editor.canvas_id, x, y)
|
1874
|
+
for b in text_editor_newline_bindings:
|
1875
|
+
self.text_editor.tktext.bind(b, self.text_editor_newline_binding)
|
1876
|
+
for b in text_editor_close_bindings:
|
1877
|
+
self.text_editor.tktext.bind(b, self.close_text_editor)
|
1864
1878
|
if not dropdown:
|
1865
1879
|
self.text_editor.tktext.focus_set()
|
1866
1880
|
self.text_editor.window.scroll_to_bottom()
|
1867
|
-
|
1868
|
-
self.text_editor.tktext.bind("<Alt-KP_Enter>", lambda _x: self.text_editor_newline_binding(r=r))
|
1869
|
-
if USER_OS == "darwin":
|
1870
|
-
self.text_editor.tktext.bind("<Option-Return>", lambda _x: self.text_editor_newline_binding(r=r))
|
1881
|
+
self.text_editor.tktext.bind("<FocusOut>", self.close_text_editor)
|
1871
1882
|
for key, func in self.MT.text_editor_user_bound_keys.items():
|
1872
1883
|
self.text_editor.tktext.bind(key, func)
|
1873
|
-
self.text_editor.tktext.bind("<Tab>", lambda _x: self.close_text_editor((r, "Tab")))
|
1874
|
-
self.text_editor.tktext.bind("<Return>", lambda _x: self.close_text_editor((r, "Return")))
|
1875
|
-
self.text_editor.tktext.bind("<KP_Enter>", lambda _x: self.close_text_editor((r, "Return")))
|
1876
|
-
if not dropdown:
|
1877
|
-
self.text_editor.tktext.bind("<FocusOut>", lambda _x: self.close_text_editor((r, "FocusOut")))
|
1878
|
-
self.text_editor.tktext.bind("<Escape>", lambda _x: self.close_text_editor((r, "Escape")))
|
1879
1884
|
return True
|
1880
1885
|
|
1881
|
-
def text_editor_newline_binding(self,
|
1886
|
+
def text_editor_newline_binding(self, event: object = None, check_lines=True):
|
1882
1887
|
if not self.height_resizing_enabled:
|
1883
1888
|
return
|
1884
1889
|
curr_height = self.text_editor.window.winfo_height()
|
@@ -1892,6 +1897,7 @@ class RowIndex(tk.Canvas):
|
|
1892
1897
|
)
|
1893
1898
|
> curr_height
|
1894
1899
|
):
|
1900
|
+
r = self.text_editor.row
|
1895
1901
|
new_height = curr_height + self.MT.index_xtra_lines_increment
|
1896
1902
|
space_bot = self.MT.get_space_bot(r)
|
1897
1903
|
if new_height > space_bot:
|
@@ -1907,14 +1913,14 @@ class RowIndex(tk.Canvas):
|
|
1907
1913
|
if anchor == "nw":
|
1908
1914
|
self.coords(
|
1909
1915
|
self.dropdown.canvas_id,
|
1910
|
-
|
1916
|
+
0,
|
1911
1917
|
self.MT.row_positions[r] + text_editor_h - 1,
|
1912
1918
|
)
|
1913
1919
|
self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
1914
1920
|
elif anchor == "sw":
|
1915
1921
|
self.coords(
|
1916
1922
|
self.dropdown.canvas_id,
|
1917
|
-
|
1923
|
+
0,
|
1918
1924
|
self.MT.row_positions[r],
|
1919
1925
|
)
|
1920
1926
|
self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
@@ -1968,29 +1974,32 @@ class RowIndex(tk.Canvas):
|
|
1968
1974
|
self.focus_set()
|
1969
1975
|
|
1970
1976
|
# r is displayed row
|
1971
|
-
def close_text_editor(
|
1972
|
-
|
1973
|
-
|
1974
|
-
|
1975
|
-
|
1977
|
+
def close_text_editor(self, event: tk.Event) -> Literal["break"] | None:
|
1978
|
+
# checking if text editor should be closed or not
|
1979
|
+
# errors if __tk_filedialog is open
|
1980
|
+
try:
|
1981
|
+
focused = self.focus_get()
|
1982
|
+
except Exception:
|
1983
|
+
focused = None
|
1976
1984
|
try:
|
1977
1985
|
if focused == self.text_editor.tktext.rc_popup_menu:
|
1978
1986
|
return "break"
|
1979
1987
|
except Exception:
|
1980
1988
|
pass
|
1981
|
-
if focused is None
|
1989
|
+
if focused is None:
|
1982
1990
|
return "break"
|
1983
|
-
if
|
1991
|
+
if event.keysym == "Escape":
|
1984
1992
|
self.hide_text_editor_and_dropdown()
|
1985
1993
|
return
|
1986
1994
|
text_editor_value = self.text_editor.get()
|
1987
|
-
r =
|
1995
|
+
r = self.text_editor.row
|
1988
1996
|
datarn = r if self.MT.all_rows_displayed else self.MT.displayed_rows[r]
|
1989
1997
|
event_data = event_dict(
|
1990
1998
|
name="end_edit_index",
|
1991
1999
|
sheet=self.PAR.name,
|
2000
|
+
widget=self,
|
1992
2001
|
cells_index={datarn: self.get_cell_data(datarn)},
|
1993
|
-
key=
|
2002
|
+
key=event.keysym,
|
1994
2003
|
value=text_editor_value,
|
1995
2004
|
loc=r,
|
1996
2005
|
row=r,
|
@@ -2014,7 +2023,7 @@ class RowIndex(tk.Canvas):
|
|
2014
2023
|
try_binding(self.extra_end_edit_cell_func, event_data)
|
2015
2024
|
self.MT.recreate_all_selection_boxes()
|
2016
2025
|
self.hide_text_editor_and_dropdown()
|
2017
|
-
if
|
2026
|
+
if event.keysym != "FocusOut":
|
2018
2027
|
self.focus_set()
|
2019
2028
|
return "break"
|
2020
2029
|
|
@@ -2151,6 +2160,7 @@ class RowIndex(tk.Canvas):
|
|
2151
2160
|
event_data = event_dict(
|
2152
2161
|
name="end_edit_index",
|
2153
2162
|
sheet=self.PAR.name,
|
2163
|
+
widget=self,
|
2154
2164
|
cells_header={datarn: pre_edit_value},
|
2155
2165
|
key="??",
|
2156
2166
|
value=selection,
|
@@ -2182,7 +2192,7 @@ class RowIndex(tk.Canvas):
|
|
2182
2192
|
def mouseclick_outside_editor_or_dropdown(self, inside: bool = False):
|
2183
2193
|
closed_dd_coords = self.dropdown.get_coords()
|
2184
2194
|
if self.text_editor.open:
|
2185
|
-
self.close_text_editor((
|
2195
|
+
self.close_text_editor(new_tk_event("ButtonPress-1"))
|
2186
2196
|
if closed_dd_coords is not None:
|
2187
2197
|
self.hide_dropdown_window()
|
2188
2198
|
if inside:
|
@@ -2220,6 +2230,7 @@ class RowIndex(tk.Canvas):
|
|
2220
2230
|
event_data = event_dict(
|
2221
2231
|
name="edit_index",
|
2222
2232
|
sheet=self.PAR.name,
|
2233
|
+
widget=self,
|
2223
2234
|
cells_index={datarn: self.get_cell_data(datarn)},
|
2224
2235
|
boxes=self.MT.get_boxes(),
|
2225
2236
|
selected=self.MT.selected,
|
@@ -2374,6 +2385,7 @@ class RowIndex(tk.Canvas):
|
|
2374
2385
|
event_data = event_dict(
|
2375
2386
|
name="end_edit_index",
|
2376
2387
|
sheet=self.PAR.name,
|
2388
|
+
widget=self,
|
2377
2389
|
cells_index={datarn: pre_edit_value},
|
2378
2390
|
key="??",
|
2379
2391
|
value=value,
|
@@ -2427,7 +2439,7 @@ class RowIndex(tk.Canvas):
|
|
2427
2439
|
|
2428
2440
|
def get_treeview_indent(self, iid: str) -> int:
|
2429
2441
|
if isinstance(self.PAR.ops.treeview_indent, str):
|
2430
|
-
indent = self.MT.
|
2442
|
+
indent = self.MT.index_txt_width * int(self.PAR.ops.treeview_indent)
|
2431
2443
|
else:
|
2432
2444
|
indent = self.PAR.ops.treeview_indent
|
2433
2445
|
return indent * max(self.get_node_level(self.tree[iid]))
|