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/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"]
|
@@ -1193,9 +1204,9 @@ class RowIndex(tk.Canvas):
|
|
1193
1204
|
new_w = self.set_width_of_index_to_text(only_rows=only_rows, set_width=False)
|
1194
1205
|
else:
|
1195
1206
|
new_w = None
|
1196
|
-
if new_w is not None and (sheet_w_x := floor(self.PAR.winfo_width() * 0.
|
1207
|
+
if new_w is not None and (sheet_w_x := floor(self.PAR.winfo_width() * 0.7)) < new_w:
|
1197
1208
|
new_w = sheet_w_x
|
1198
|
-
if new_w and (self.current_width - new_w > 15 or new_w - self.current_width >
|
1209
|
+
if new_w and (self.current_width - new_w > 15 or new_w - self.current_width > 3):
|
1199
1210
|
self.set_width(new_w, set_TL=True)
|
1200
1211
|
return True
|
1201
1212
|
return False
|
@@ -1861,24 +1872,19 @@ class RowIndex(tk.Canvas):
|
|
1861
1872
|
self.itemconfig(self.text_editor.canvas_id, state="normal")
|
1862
1873
|
self.text_editor.open = True
|
1863
1874
|
self.coords(self.text_editor.canvas_id, x, y)
|
1875
|
+
for b in text_editor_newline_bindings:
|
1876
|
+
self.text_editor.tktext.bind(b, self.text_editor_newline_binding)
|
1877
|
+
for b in text_editor_close_bindings:
|
1878
|
+
self.text_editor.tktext.bind(b, self.close_text_editor)
|
1864
1879
|
if not dropdown:
|
1865
1880
|
self.text_editor.tktext.focus_set()
|
1866
1881
|
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))
|
1882
|
+
self.text_editor.tktext.bind("<FocusOut>", self.close_text_editor)
|
1871
1883
|
for key, func in self.MT.text_editor_user_bound_keys.items():
|
1872
1884
|
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
1885
|
return True
|
1880
1886
|
|
1881
|
-
def text_editor_newline_binding(self,
|
1887
|
+
def text_editor_newline_binding(self, event: object = None, check_lines=True):
|
1882
1888
|
if not self.height_resizing_enabled:
|
1883
1889
|
return
|
1884
1890
|
curr_height = self.text_editor.window.winfo_height()
|
@@ -1892,6 +1898,7 @@ class RowIndex(tk.Canvas):
|
|
1892
1898
|
)
|
1893
1899
|
> curr_height
|
1894
1900
|
):
|
1901
|
+
r = self.text_editor.row
|
1895
1902
|
new_height = curr_height + self.MT.index_xtra_lines_increment
|
1896
1903
|
space_bot = self.MT.get_space_bot(r)
|
1897
1904
|
if new_height > space_bot:
|
@@ -1907,14 +1914,14 @@ class RowIndex(tk.Canvas):
|
|
1907
1914
|
if anchor == "nw":
|
1908
1915
|
self.coords(
|
1909
1916
|
self.dropdown.canvas_id,
|
1910
|
-
|
1917
|
+
0,
|
1911
1918
|
self.MT.row_positions[r] + text_editor_h - 1,
|
1912
1919
|
)
|
1913
1920
|
self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
1914
1921
|
elif anchor == "sw":
|
1915
1922
|
self.coords(
|
1916
1923
|
self.dropdown.canvas_id,
|
1917
|
-
|
1924
|
+
0,
|
1918
1925
|
self.MT.row_positions[r],
|
1919
1926
|
)
|
1920
1927
|
self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
@@ -1968,29 +1975,32 @@ class RowIndex(tk.Canvas):
|
|
1968
1975
|
self.focus_set()
|
1969
1976
|
|
1970
1977
|
# r is displayed row
|
1971
|
-
def close_text_editor(
|
1972
|
-
|
1973
|
-
|
1974
|
-
|
1975
|
-
|
1978
|
+
def close_text_editor(self, event: tk.Event) -> Literal["break"] | None:
|
1979
|
+
# checking if text editor should be closed or not
|
1980
|
+
# errors if __tk_filedialog is open
|
1981
|
+
try:
|
1982
|
+
focused = self.focus_get()
|
1983
|
+
except Exception:
|
1984
|
+
focused = None
|
1976
1985
|
try:
|
1977
1986
|
if focused == self.text_editor.tktext.rc_popup_menu:
|
1978
1987
|
return "break"
|
1979
1988
|
except Exception:
|
1980
1989
|
pass
|
1981
|
-
if focused is None
|
1990
|
+
if focused is None:
|
1982
1991
|
return "break"
|
1983
|
-
if
|
1992
|
+
if event.keysym == "Escape":
|
1984
1993
|
self.hide_text_editor_and_dropdown()
|
1985
1994
|
return
|
1986
1995
|
text_editor_value = self.text_editor.get()
|
1987
|
-
r =
|
1996
|
+
r = self.text_editor.row
|
1988
1997
|
datarn = r if self.MT.all_rows_displayed else self.MT.displayed_rows[r]
|
1989
1998
|
event_data = event_dict(
|
1990
1999
|
name="end_edit_index",
|
1991
2000
|
sheet=self.PAR.name,
|
2001
|
+
widget=self,
|
1992
2002
|
cells_index={datarn: self.get_cell_data(datarn)},
|
1993
|
-
key=
|
2003
|
+
key=event.keysym,
|
1994
2004
|
value=text_editor_value,
|
1995
2005
|
loc=r,
|
1996
2006
|
row=r,
|
@@ -2014,7 +2024,7 @@ class RowIndex(tk.Canvas):
|
|
2014
2024
|
try_binding(self.extra_end_edit_cell_func, event_data)
|
2015
2025
|
self.MT.recreate_all_selection_boxes()
|
2016
2026
|
self.hide_text_editor_and_dropdown()
|
2017
|
-
if
|
2027
|
+
if event.keysym != "FocusOut":
|
2018
2028
|
self.focus_set()
|
2019
2029
|
return "break"
|
2020
2030
|
|
@@ -2151,6 +2161,7 @@ class RowIndex(tk.Canvas):
|
|
2151
2161
|
event_data = event_dict(
|
2152
2162
|
name="end_edit_index",
|
2153
2163
|
sheet=self.PAR.name,
|
2164
|
+
widget=self,
|
2154
2165
|
cells_header={datarn: pre_edit_value},
|
2155
2166
|
key="??",
|
2156
2167
|
value=selection,
|
@@ -2182,7 +2193,7 @@ class RowIndex(tk.Canvas):
|
|
2182
2193
|
def mouseclick_outside_editor_or_dropdown(self, inside: bool = False):
|
2183
2194
|
closed_dd_coords = self.dropdown.get_coords()
|
2184
2195
|
if self.text_editor.open:
|
2185
|
-
self.close_text_editor((
|
2196
|
+
self.close_text_editor(new_tk_event("ButtonPress-1"))
|
2186
2197
|
if closed_dd_coords is not None:
|
2187
2198
|
self.hide_dropdown_window()
|
2188
2199
|
if inside:
|
@@ -2220,6 +2231,7 @@ class RowIndex(tk.Canvas):
|
|
2220
2231
|
event_data = event_dict(
|
2221
2232
|
name="edit_index",
|
2222
2233
|
sheet=self.PAR.name,
|
2234
|
+
widget=self,
|
2223
2235
|
cells_index={datarn: self.get_cell_data(datarn)},
|
2224
2236
|
boxes=self.MT.get_boxes(),
|
2225
2237
|
selected=self.MT.selected,
|
@@ -2374,6 +2386,7 @@ class RowIndex(tk.Canvas):
|
|
2374
2386
|
event_data = event_dict(
|
2375
2387
|
name="end_edit_index",
|
2376
2388
|
sheet=self.PAR.name,
|
2389
|
+
widget=self,
|
2377
2390
|
cells_index={datarn: pre_edit_value},
|
2378
2391
|
key="??",
|
2379
2392
|
value=value,
|
@@ -2427,7 +2440,7 @@ class RowIndex(tk.Canvas):
|
|
2427
2440
|
|
2428
2441
|
def get_treeview_indent(self, iid: str) -> int:
|
2429
2442
|
if isinstance(self.PAR.ops.treeview_indent, str):
|
2430
|
-
indent = self.MT.
|
2443
|
+
indent = self.MT.index_txt_width * int(self.PAR.ops.treeview_indent)
|
2431
2444
|
else:
|
2432
2445
|
indent = self.PAR.ops.treeview_indent
|
2433
2446
|
return indent * max(self.get_node_level(self.tree[iid]))
|