tksheet 7.4.4__py3-none-any.whl → 7.4.6__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 +1 -1
- tksheet/column_headers.py +84 -86
- tksheet/constants.py +4 -3
- tksheet/find_window.py +8 -8
- tksheet/formatters.py +58 -74
- tksheet/functions.py +65 -79
- tksheet/main_table.py +330 -448
- tksheet/other_classes.py +19 -25
- tksheet/row_index.py +114 -92
- tksheet/sheet.py +191 -208
- tksheet/sorting.py +23 -22
- tksheet/text_editor.py +18 -12
- tksheet/tksheet_types.py +187 -0
- tksheet/top_left_rectangle.py +18 -18
- {tksheet-7.4.4.dist-info → tksheet-7.4.6.dist-info}/METADATA +4 -2
- tksheet-7.4.6.dist-info/RECORD +22 -0
- {tksheet-7.4.4.dist-info → tksheet-7.4.6.dist-info}/WHEEL +1 -1
- tksheet-7.4.4.dist-info/RECORD +0 -22
- {tksheet-7.4.4.dist-info → tksheet-7.4.6.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.4.4.dist-info → tksheet-7.4.6.dist-info}/top_level.txt +0 -0
tksheet/sorting.py
CHANGED
@@ -4,6 +4,7 @@ from collections.abc import Callable, Generator, Iterable, Iterator
|
|
4
4
|
from datetime import datetime
|
5
5
|
from pathlib import Path
|
6
6
|
from re import split
|
7
|
+
from typing import Any
|
7
8
|
|
8
9
|
AnyIter = Iterable | Iterator
|
9
10
|
|
@@ -67,11 +68,11 @@ def _string_fallback(item: str) -> tuple[int, ...]:
|
|
67
68
|
5,
|
68
69
|
len(components),
|
69
70
|
tuple(int(e) if e.isdigit() else e.lower() for comp in components[:-1] for e in split(r"(\d+)", comp) if e),
|
70
|
-
|
71
|
+
(),
|
71
72
|
)
|
72
73
|
|
73
74
|
|
74
|
-
def version_sort_key(item:
|
75
|
+
def version_sort_key(item: Any) -> tuple[int, ...]:
|
75
76
|
"""
|
76
77
|
A key for natural sorting of various Python types.
|
77
78
|
|
@@ -117,7 +118,7 @@ def version_sort_key(item: object) -> tuple[int, ...]:
|
|
117
118
|
for e in split(r"(\d+)", comp)
|
118
119
|
if e
|
119
120
|
),
|
120
|
-
|
121
|
+
(),
|
121
122
|
)
|
122
123
|
else:
|
123
124
|
return (1, item)
|
@@ -144,7 +145,7 @@ def version_sort_key(item: object) -> tuple[int, ...]:
|
|
144
145
|
return (6, item)
|
145
146
|
|
146
147
|
|
147
|
-
def natural_sort_key(item:
|
148
|
+
def natural_sort_key(item: Any) -> tuple[int, ...]:
|
148
149
|
"""
|
149
150
|
A key for natural sorting of various Python types.
|
150
151
|
|
@@ -195,7 +196,7 @@ def natural_sort_key(item: object) -> tuple[int, ...]:
|
|
195
196
|
for e in split(r"(\d+)", comp)
|
196
197
|
if e
|
197
198
|
),
|
198
|
-
|
199
|
+
(),
|
199
200
|
)
|
200
201
|
else:
|
201
202
|
return (1, item)
|
@@ -222,7 +223,7 @@ def natural_sort_key(item: object) -> tuple[int, ...]:
|
|
222
223
|
return (6, item)
|
223
224
|
|
224
225
|
|
225
|
-
def fast_sort_key(item:
|
226
|
+
def fast_sort_key(item: Any) -> tuple[int, ...]:
|
226
227
|
"""
|
227
228
|
A faster key for natural sorting of various Python types.
|
228
229
|
|
@@ -268,11 +269,11 @@ def fast_sort_key(item: object) -> tuple[int, ...]:
|
|
268
269
|
|
269
270
|
|
270
271
|
def sort_selection(
|
271
|
-
data: list[list[
|
272
|
+
data: list[list[Any]],
|
272
273
|
reverse: bool = False,
|
273
274
|
key: Callable | None = None,
|
274
275
|
row_wise: bool = False,
|
275
|
-
) -> list[list[
|
276
|
+
) -> list[list[Any]]:
|
276
277
|
if not data or not isinstance(data[0], list):
|
277
278
|
raise ValueError("Data must be a list of lists.")
|
278
279
|
|
@@ -297,11 +298,11 @@ def sort_selection(
|
|
297
298
|
|
298
299
|
|
299
300
|
def sort_column(
|
300
|
-
data: list[list[
|
301
|
+
data: list[list[Any]] | list[Any] | AnyIter[Any],
|
301
302
|
column: int = 0,
|
302
303
|
reverse: bool = False,
|
303
304
|
key: Callable | None = None,
|
304
|
-
) -> list[list[
|
305
|
+
) -> list[list[Any]] | list[Any]:
|
305
306
|
if not data:
|
306
307
|
return data
|
307
308
|
|
@@ -315,11 +316,11 @@ def sort_column(
|
|
315
316
|
|
316
317
|
|
317
318
|
def sort_row(
|
318
|
-
data: list[list[
|
319
|
+
data: list[list[Any]] | list[Any] | AnyIter[Any],
|
319
320
|
row: int = 0,
|
320
321
|
reverse: bool = False,
|
321
322
|
key: Callable | None = None,
|
322
|
-
) -> list[list[
|
323
|
+
) -> list[list[Any]]:
|
323
324
|
if not data:
|
324
325
|
return data
|
325
326
|
|
@@ -337,11 +338,11 @@ def sort_row(
|
|
337
338
|
|
338
339
|
|
339
340
|
def sort_rows_by_column(
|
340
|
-
data: list[list[
|
341
|
+
data: list[list[Any]],
|
341
342
|
column: int = 0,
|
342
343
|
reverse: bool = False,
|
343
344
|
key: Callable | None = None,
|
344
|
-
) -> tuple[list[tuple[int, list[
|
345
|
+
) -> tuple[list[tuple[int, list[Any]]], dict[int, int]]:
|
345
346
|
if not data:
|
346
347
|
return data, {}
|
347
348
|
|
@@ -364,7 +365,7 @@ def sort_rows_by_column(
|
|
364
365
|
|
365
366
|
|
366
367
|
def sort_columns_by_row(
|
367
|
-
data: list[list[
|
368
|
+
data: list[list[Any]],
|
368
369
|
row: int = 0,
|
369
370
|
reverse: bool = False,
|
370
371
|
key: Callable | None = None,
|
@@ -393,15 +394,15 @@ def sort_columns_by_row(
|
|
393
394
|
unsorted_part = [elem for idx, elem in enumerate(row_data) if idx not in sort_indices_set]
|
394
395
|
new_data.append(sorted_part + unsorted_part)
|
395
396
|
|
396
|
-
return sort_indices,
|
397
|
+
return sort_indices, dict(zip(range(len(data[row])), sort_indices))
|
397
398
|
|
398
399
|
|
399
400
|
def _sort_node_children(
|
400
|
-
node:
|
401
|
-
tree: dict[str,
|
401
|
+
node: Any,
|
402
|
+
tree: dict[str, Any],
|
402
403
|
reverse: bool,
|
403
404
|
key: Callable,
|
404
|
-
) -> Generator[
|
405
|
+
) -> Generator[Any, None, None]:
|
405
406
|
sorted_children = sorted(
|
406
407
|
(tree[child_iid] for child_iid in node.children if child_iid in tree),
|
407
408
|
key=lambda child: key(child.text),
|
@@ -414,12 +415,12 @@ def _sort_node_children(
|
|
414
415
|
|
415
416
|
|
416
417
|
def sort_tree_view(
|
417
|
-
_row_index: list[
|
418
|
+
_row_index: list[Any],
|
418
419
|
tree_rns: dict[str, int],
|
419
|
-
tree: dict[str,
|
420
|
+
tree: dict[str, Any],
|
420
421
|
key: Callable | None = None,
|
421
422
|
reverse: bool = False,
|
422
|
-
) -> tuple[list[
|
423
|
+
) -> tuple[list[Any], dict[int, int]]:
|
423
424
|
if not _row_index or not tree_rns or not tree:
|
424
425
|
return [], {}
|
425
426
|
|
tksheet/text_editor.py
CHANGED
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
import tkinter as tk
|
4
4
|
from collections.abc import Callable
|
5
|
-
from typing import Literal
|
5
|
+
from typing import Any, Literal
|
6
6
|
|
7
7
|
from .constants import align_helper, ctrl_key, rc_binding
|
8
8
|
from .functions import convert_align
|
@@ -99,7 +99,7 @@ class TextEditorTkText(tk.Text):
|
|
99
99
|
self.tag_configure("align", justify=self.align)
|
100
100
|
self.tag_add("align", 1.0, "end")
|
101
101
|
|
102
|
-
def _proxy(self, command:
|
102
|
+
def _proxy(self, command: Any, *args) -> Any:
|
103
103
|
try:
|
104
104
|
result = self.tk.call((self._orig, command) + args)
|
105
105
|
except Exception:
|
@@ -111,16 +111,22 @@ class TextEditorTkText(tk.Text):
|
|
111
111
|
):
|
112
112
|
self.tag_add("align", 1.0, "end")
|
113
113
|
self.event_generate("<<TextModified>>")
|
114
|
-
if
|
115
|
-
|
116
|
-
|
114
|
+
if (
|
115
|
+
args
|
116
|
+
and len(args) > 1
|
117
|
+
and args[1] != "\n"
|
118
|
+
and args != ("1.0", "end")
|
119
|
+
and self.yview() != (0.0, 1.0)
|
120
|
+
and self.newline_bindng is not None
|
121
|
+
):
|
122
|
+
self.newline_bindng(check_lines=False)
|
117
123
|
return result
|
118
124
|
|
119
|
-
def rc(self, event:
|
125
|
+
def rc(self, event: Any) -> None:
|
120
126
|
self.focus_set()
|
121
127
|
self.rc_popup_menu.tk_popup(event.x_root, event.y_root)
|
122
128
|
|
123
|
-
def delete_key(self, event:
|
129
|
+
def delete_key(self, event: Any = None) -> None:
|
124
130
|
if self.editor_del_key == "forward":
|
125
131
|
return
|
126
132
|
elif not self.editor_del_key:
|
@@ -133,27 +139,27 @@ class TextEditorTkText(tk.Text):
|
|
133
139
|
self.delete("insert-1c")
|
134
140
|
return "break"
|
135
141
|
|
136
|
-
def select_all(self, event:
|
142
|
+
def select_all(self, event: Any = None) -> Literal["break"]:
|
137
143
|
self.tag_add(tk.SEL, "1.0", tk.END)
|
138
144
|
self.mark_set(tk.INSERT, tk.END)
|
139
145
|
# self.see(tk.INSERT)
|
140
146
|
return "break"
|
141
147
|
|
142
|
-
def cut(self, event:
|
148
|
+
def cut(self, event: Any = None) -> Literal["break"]:
|
143
149
|
self.event_generate(f"<{ctrl_key}-x>")
|
144
150
|
self.event_generate("<KeyRelease>")
|
145
151
|
return "break"
|
146
152
|
|
147
|
-
def copy(self, event:
|
153
|
+
def copy(self, event: Any = None) -> Literal["break"]:
|
148
154
|
self.event_generate(f"<{ctrl_key}-c>")
|
149
155
|
return "break"
|
150
156
|
|
151
|
-
def paste(self, event:
|
157
|
+
def paste(self, event: Any = None) -> Literal["break"]:
|
152
158
|
self.event_generate(f"<{ctrl_key}-v>")
|
153
159
|
self.event_generate("<KeyRelease>")
|
154
160
|
return "break"
|
155
161
|
|
156
|
-
def undo(self, event:
|
162
|
+
def undo(self, event: Any = None) -> Literal["break"]:
|
157
163
|
self.event_generate(f"<{ctrl_key}-z>")
|
158
164
|
self.event_generate("<KeyRelease>")
|
159
165
|
return "break"
|
tksheet/tksheet_types.py
CHANGED
@@ -27,3 +27,190 @@ CellPropertyKey = Literal[
|
|
27
27
|
]
|
28
28
|
|
29
29
|
AnyIter = Iterable | Iterator
|
30
|
+
|
31
|
+
Binding = Literal[
|
32
|
+
"all",
|
33
|
+
"single_select",
|
34
|
+
"toggle_select",
|
35
|
+
"drag_select",
|
36
|
+
"select_all",
|
37
|
+
"column_drag_and_drop",
|
38
|
+
"move_columns",
|
39
|
+
"row_drag_and_drop",
|
40
|
+
"move_rows",
|
41
|
+
"column_select",
|
42
|
+
"row_select",
|
43
|
+
"column_width_resize",
|
44
|
+
"double_click_column_resize",
|
45
|
+
"row_width_resize",
|
46
|
+
"column_height_resize",
|
47
|
+
"arrowkeys",
|
48
|
+
"up",
|
49
|
+
"down",
|
50
|
+
"left",
|
51
|
+
"right",
|
52
|
+
"prior",
|
53
|
+
"next",
|
54
|
+
"row_height_resize",
|
55
|
+
"double_click_row_resize",
|
56
|
+
"right_click_popup_menu",
|
57
|
+
"rc_popup_menu",
|
58
|
+
"rc_menu",
|
59
|
+
"rc_select",
|
60
|
+
"rc_insert_column",
|
61
|
+
"rc_delete_column",
|
62
|
+
"rc_insert_row",
|
63
|
+
"rc_delete_row",
|
64
|
+
"sort_cells",
|
65
|
+
"sort_row",
|
66
|
+
"sort_column",
|
67
|
+
"sort_col",
|
68
|
+
"sort_rows",
|
69
|
+
"sort_columns",
|
70
|
+
"sort_cols",
|
71
|
+
"ctrl_click_select",
|
72
|
+
"ctrl_select",
|
73
|
+
"copy",
|
74
|
+
"cut",
|
75
|
+
"paste",
|
76
|
+
"delete",
|
77
|
+
"undo",
|
78
|
+
"find",
|
79
|
+
"edit_cell",
|
80
|
+
"edit_header",
|
81
|
+
"edit_index",
|
82
|
+
]
|
83
|
+
|
84
|
+
ExtraBinding = Literal[
|
85
|
+
"begin_sort_cells",
|
86
|
+
"sort_cells",
|
87
|
+
"end_sort_cells",
|
88
|
+
"begin_sort_rows",
|
89
|
+
"sort_rows",
|
90
|
+
"end_sort_rows",
|
91
|
+
"begin_sort_columns",
|
92
|
+
"sort_columns",
|
93
|
+
"end_sort_columns",
|
94
|
+
"begin_copy",
|
95
|
+
"begin_ctrl_c",
|
96
|
+
"ctrl_c",
|
97
|
+
"end_copy",
|
98
|
+
"end_ctrl_c",
|
99
|
+
"copy",
|
100
|
+
"begin_cut",
|
101
|
+
"begin_ctrl_x",
|
102
|
+
"ctrl_x",
|
103
|
+
"end_cut",
|
104
|
+
"end_ctrl_x",
|
105
|
+
"cut",
|
106
|
+
"begin_paste",
|
107
|
+
"begin_ctrl_v",
|
108
|
+
"ctrl_v",
|
109
|
+
"end_paste",
|
110
|
+
"end_ctrl_v",
|
111
|
+
"paste",
|
112
|
+
"begin_undo",
|
113
|
+
"begin_ctrl_z",
|
114
|
+
"ctrl_z",
|
115
|
+
"end_undo",
|
116
|
+
"end_ctrl_z",
|
117
|
+
"undo",
|
118
|
+
"begin_delete_key",
|
119
|
+
"begin_delete",
|
120
|
+
"delete_key",
|
121
|
+
"end_delete",
|
122
|
+
"end_delete_key",
|
123
|
+
"delete",
|
124
|
+
"begin_edit_cell",
|
125
|
+
"begin_edit_table",
|
126
|
+
"end_edit_cell",
|
127
|
+
"edit_cell",
|
128
|
+
"edit_table",
|
129
|
+
"begin_edit_header",
|
130
|
+
"end_edit_header",
|
131
|
+
"edit_header",
|
132
|
+
"begin_edit_index",
|
133
|
+
"end_edit_index",
|
134
|
+
"edit_index",
|
135
|
+
"begin_row_index_drag_drop",
|
136
|
+
"begin_move_rows",
|
137
|
+
"row_index_drag_drop",
|
138
|
+
"move_rows",
|
139
|
+
"end_move_rows",
|
140
|
+
"end_row_index_drag_drop",
|
141
|
+
"begin_column_header_drag_drop",
|
142
|
+
"begin_move_columns",
|
143
|
+
"column_header_drag_drop",
|
144
|
+
"move_columns",
|
145
|
+
"end_move_columns",
|
146
|
+
"end_column_header_drag_drop",
|
147
|
+
"begin_rc_delete_row",
|
148
|
+
"begin_delete_rows",
|
149
|
+
"rc_delete_row",
|
150
|
+
"end_rc_delete_row",
|
151
|
+
"end_delete_rows",
|
152
|
+
"delete_rows",
|
153
|
+
"begin_rc_delete_column",
|
154
|
+
"begin_delete_columns",
|
155
|
+
"rc_delete_column",
|
156
|
+
"end_rc_delete_column",
|
157
|
+
"end_delete_columns",
|
158
|
+
"delete_columns",
|
159
|
+
"begin_rc_insert_column",
|
160
|
+
"begin_insert_column",
|
161
|
+
"begin_insert_columns",
|
162
|
+
"begin_add_column",
|
163
|
+
"begin_rc_add_column",
|
164
|
+
"begin_add_columns",
|
165
|
+
"rc_insert_column",
|
166
|
+
"end_rc_insert_column",
|
167
|
+
"end_insert_column",
|
168
|
+
"end_insert_columns",
|
169
|
+
"rc_add_column",
|
170
|
+
"end_rc_add_column",
|
171
|
+
"end_add_column",
|
172
|
+
"end_add_columns",
|
173
|
+
"add_columns",
|
174
|
+
"begin_rc_insert_row",
|
175
|
+
"begin_insert_row",
|
176
|
+
"begin_insert_rows",
|
177
|
+
"begin_rc_add_row",
|
178
|
+
"begin_add_row",
|
179
|
+
"begin_add_rows",
|
180
|
+
"rc_insert_row",
|
181
|
+
"end_rc_insert_row",
|
182
|
+
"end_insert_row",
|
183
|
+
"end_insert_rows",
|
184
|
+
"rc_add_row",
|
185
|
+
"end_rc_add_row",
|
186
|
+
"end_add_row",
|
187
|
+
"end_add_rows",
|
188
|
+
"add_rows",
|
189
|
+
"row_height_resize",
|
190
|
+
"column_width_resize",
|
191
|
+
"cell_select",
|
192
|
+
"select_all",
|
193
|
+
"row_select",
|
194
|
+
"column_select",
|
195
|
+
"drag_select_cells",
|
196
|
+
"drag_select_rows",
|
197
|
+
"drag_select_columns",
|
198
|
+
"shift_cell_select",
|
199
|
+
"shift_row_select",
|
200
|
+
"shift_column_select",
|
201
|
+
"ctrl_cell_select",
|
202
|
+
"ctrl_row_select",
|
203
|
+
"ctrl_column_select",
|
204
|
+
"deselect",
|
205
|
+
"all_select_events",
|
206
|
+
"select",
|
207
|
+
"selectevents",
|
208
|
+
"select_events",
|
209
|
+
"all_modified_events",
|
210
|
+
"sheetmodified",
|
211
|
+
"sheet_modified",
|
212
|
+
"modified_events",
|
213
|
+
"modified",
|
214
|
+
"bind_all",
|
215
|
+
"unbind_all",
|
216
|
+
]
|
tksheet/top_left_rectangle.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
import tkinter as tk
|
4
|
+
from typing import Any
|
4
5
|
|
5
6
|
from .constants import rc_binding
|
6
7
|
|
@@ -107,34 +108,34 @@ class TopLeftRectangle(tk.Canvas):
|
|
107
108
|
def sa_state(self, state: str = "normal") -> None:
|
108
109
|
self.itemconfig("sa", state=state)
|
109
110
|
|
110
|
-
def rw_enter(self, event:
|
111
|
+
def rw_enter(self, event: Any = None) -> None:
|
111
112
|
if self.RI.width_resizing_enabled:
|
112
113
|
self.itemconfig(
|
113
114
|
"rw",
|
114
115
|
fill=self.PAR.ops.top_left_fg_highlight,
|
115
116
|
)
|
116
117
|
|
117
|
-
def sa_enter(self, event:
|
118
|
+
def sa_enter(self, event: Any = None) -> None:
|
118
119
|
if self.MT.select_all_enabled:
|
119
120
|
self.itemconfig(
|
120
121
|
self.select_all_tri,
|
121
122
|
fill=self.PAR.ops.top_left_fg_highlight,
|
122
123
|
)
|
123
124
|
|
124
|
-
def rh_enter(self, event:
|
125
|
+
def rh_enter(self, event: Any = None) -> None:
|
125
126
|
if self.CH.height_resizing_enabled:
|
126
127
|
self.itemconfig(
|
127
128
|
"rh",
|
128
129
|
fill=self.PAR.ops.top_left_fg_highlight,
|
129
130
|
)
|
130
131
|
|
131
|
-
def rw_leave(self, event:
|
132
|
+
def rw_leave(self, event: Any = None) -> None:
|
132
133
|
self.itemconfig("rw", fill=self.PAR.ops.top_left_fg)
|
133
134
|
|
134
|
-
def rh_leave(self, event:
|
135
|
+
def rh_leave(self, event: Any = None) -> None:
|
135
136
|
self.itemconfig("rh", fill=self.PAR.ops.top_left_fg)
|
136
137
|
|
137
|
-
def sa_leave(self, event:
|
138
|
+
def sa_leave(self, event: Any = None) -> None:
|
138
139
|
self.itemconfig(
|
139
140
|
self.select_all_tri,
|
140
141
|
fill=self.PAR.ops.top_left_fg,
|
@@ -197,12 +198,12 @@ class TopLeftRectangle(tk.Canvas):
|
|
197
198
|
)
|
198
199
|
self.coords(self.select_all_box, 0, 0, w - 5, h - 5)
|
199
200
|
|
200
|
-
def mouse_motion(self, event:
|
201
|
+
def mouse_motion(self, event: Any = None) -> None:
|
201
202
|
self.MT.reset_mouse_motion_creations()
|
202
203
|
if self.extra_motion_func is not None:
|
203
204
|
self.extra_motion_func(event)
|
204
205
|
|
205
|
-
def b1_press(self, event:
|
206
|
+
def b1_press(self, event: Any = None) -> None:
|
206
207
|
self.focus_set()
|
207
208
|
rect = self.find_overlapping(event.x, event.y, event.x, event.y)
|
208
209
|
if not rect or rect[0] in (
|
@@ -220,12 +221,11 @@ class TopLeftRectangle(tk.Canvas):
|
|
220
221
|
self.PAR.ops.default_row_index_width,
|
221
222
|
set_TL=True,
|
222
223
|
)
|
223
|
-
elif rect[0] == self.rh_box:
|
224
|
-
|
225
|
-
self.
|
226
|
-
|
227
|
-
|
228
|
-
)
|
224
|
+
elif rect[0] == self.rh_box and self.CH.height_resizing_enabled:
|
225
|
+
self.CH.set_height(
|
226
|
+
self.MT.get_default_header_height(),
|
227
|
+
set_TL=True,
|
228
|
+
)
|
229
229
|
self.MT.main_table_redraw_grid_and_text(
|
230
230
|
redraw_header=True,
|
231
231
|
redraw_row_index=True,
|
@@ -233,22 +233,22 @@ class TopLeftRectangle(tk.Canvas):
|
|
233
233
|
if self.extra_b1_press_func is not None:
|
234
234
|
self.extra_b1_press_func(event)
|
235
235
|
|
236
|
-
def b1_motion(self, event:
|
236
|
+
def b1_motion(self, event: Any = None) -> None:
|
237
237
|
self.focus_set()
|
238
238
|
if self.extra_b1_motion_func is not None:
|
239
239
|
self.extra_b1_motion_func(event)
|
240
240
|
|
241
|
-
def b1_release(self, event:
|
241
|
+
def b1_release(self, event: Any = None) -> None:
|
242
242
|
self.focus_set()
|
243
243
|
if self.extra_b1_release_func is not None:
|
244
244
|
self.extra_b1_release_func(event)
|
245
245
|
|
246
|
-
def double_b1(self, event:
|
246
|
+
def double_b1(self, event: Any = None) -> None:
|
247
247
|
self.focus_set()
|
248
248
|
if self.extra_double_b1_func is not None:
|
249
249
|
self.extra_double_b1_func(event)
|
250
250
|
|
251
|
-
def rc(self, event:
|
251
|
+
def rc(self, event: Any = None) -> None:
|
252
252
|
self.focus_set()
|
253
253
|
if self.extra_rc_func is not None:
|
254
254
|
self.extra_rc_func(event)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: tksheet
|
3
|
-
Version: 7.4.
|
3
|
+
Version: 7.4.6
|
4
4
|
Summary: Tkinter table / sheet and treeview widget
|
5
5
|
Author-email: ragardner <github@ragardner.simplelogin.com>
|
6
6
|
License: Copyright (c) 2019 ragardner and open source contributors
|
@@ -24,7 +24,9 @@ License: Copyright (c) 2019 ragardner and open source contributors
|
|
24
24
|
SOFTWARE.
|
25
25
|
|
26
26
|
Project-URL: Homepage, https://github.com/ragardner/tksheet
|
27
|
-
Project-URL:
|
27
|
+
Project-URL: Documentation, https://github.com/ragardner/tksheet/wiki/Version-7
|
28
|
+
Project-URL: Changelog, https://github.com/ragardner/tksheet/blob/master/docs/CHANGELOG.md
|
29
|
+
Project-URL: Issues, https://github.com/ragardner/tksheet/issues
|
28
30
|
Project-URL: Funding, https://github.com/ragardner
|
29
31
|
Keywords: tkinter,table,widget,tree,treeview,sheet,grid,tk
|
30
32
|
Classifier: Development Status :: 5 - Production/Stable
|
@@ -0,0 +1,22 @@
|
|
1
|
+
tksheet/__init__.py,sha256=8h-1neNe1xXDjRkZSABB1JzRI_NkOk6DavPvKXla6Ng,2313
|
2
|
+
tksheet/colors.py,sha256=dHhmdFuQDlwohDHsAfT9VdrKoSl_R33L72a3HCin5zo,51591
|
3
|
+
tksheet/column_headers.py,sha256=uz3eRsJcKVj0fJd-cGrwXV1rA06asPENJvAibSGlHTM,103164
|
4
|
+
tksheet/constants.py,sha256=P2Bu4xzF82GGgZtoREdG-wBOyWOlY-2Pyvg_SNYXE6k,3941
|
5
|
+
tksheet/find_window.py,sha256=PNSQweZ2advYCfSYm4gWM7BQ8NaiwD822eiIZpSTyrw,8020
|
6
|
+
tksheet/formatters.py,sha256=DGcRiMsDJnySNpQcjfiX84oJ7TmOSMdU6u9injIhA4g,10095
|
7
|
+
tksheet/functions.py,sha256=uydf4DHuA74GWzjNUQh1Y0Ntp9XCA2PM_63SBiVCo8c,52747
|
8
|
+
tksheet/main_table.py,sha256=L-wKDluoSPp2fo6-JS1EV3VT2B2_6xaGrgVIRT3SYLs,354322
|
9
|
+
tksheet/other_classes.py,sha256=pe9_Cj6d3rdeMif9nGvUz0MEUChf0l4d669RNqcNhY4,16578
|
10
|
+
tksheet/row_index.py,sha256=BJW7_Bvk6ozyy-88ML9JmUwmR5tko7dWAINO6YwrkrA,134210
|
11
|
+
tksheet/sheet.py,sha256=Ki5XzCGonXDhn-fuRfgmotGJxWL1Ru_7Mym1tmnNu6M,283693
|
12
|
+
tksheet/sheet_options.py,sha256=A_cJEc6XirLO8YrWQHfb10lK2VhGbz28_3XgrKx3TfM,9753
|
13
|
+
tksheet/sorting.py,sha256=-x1ZBIYfaneRrQPhbb0Ehs70373o52ADXp481La3nOY,16806
|
14
|
+
tksheet/text_editor.py,sha256=rU8Fz0-ltkM63W9io2DoZJPyzUGzCc9Z0qBtc4D1H40,7404
|
15
|
+
tksheet/themes.py,sha256=AoNAxibnQi04MN0Zpbn9-kyDnkiiV8TDNWP9FYjpuf0,18473
|
16
|
+
tksheet/tksheet_types.py,sha256=8i3BlJrqCO9d4HD-XYl_mSSHQAeAzrRKRXneS6ZzorM,4624
|
17
|
+
tksheet/top_left_rectangle.py,sha256=M52IrPIeMoYE3jSpooZmqw_0W5Fz_R-Yu1ZqA685EZ8,8557
|
18
|
+
tksheet-7.4.6.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
19
|
+
tksheet-7.4.6.dist-info/METADATA,sha256=GTd6uG8ExWy-in5MpLpZkygKsRqnxU3xzXIv_qkZMSw,8005
|
20
|
+
tksheet-7.4.6.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
|
21
|
+
tksheet-7.4.6.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
22
|
+
tksheet-7.4.6.dist-info/RECORD,,
|
tksheet-7.4.4.dist-info/RECORD
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
tksheet/__init__.py,sha256=DJduXwiEFlPhe0uDqKUZCRGgf9pB-aubUvC_sXCpVp8,2313
|
2
|
-
tksheet/colors.py,sha256=dHhmdFuQDlwohDHsAfT9VdrKoSl_R33L72a3HCin5zo,51591
|
3
|
-
tksheet/column_headers.py,sha256=Dq3GqcUvBpereMdOTU3OqkfSkCb8nSUM18uHF2Vsrqo,103442
|
4
|
-
tksheet/constants.py,sha256=PkvAtdYXSOiOO5zuxqrObvGIVV2sEE0enN8YLhI8zCc,3922
|
5
|
-
tksheet/find_window.py,sha256=JfkgpGluSng3bKMBneDNQg-AJmBcmCW7JIhtYbSUZaE,8036
|
6
|
-
tksheet/formatters.py,sha256=21ZkMaDIJNUtjvtlAbPl8Y19I9nDxue-JJegw6hblz8,10551
|
7
|
-
tksheet/functions.py,sha256=KQe1AncAiVUxvcq9GAJ8TBXKaSAxk5-VDHDY6hHApLk,53183
|
8
|
-
tksheet/main_table.py,sha256=jWG9Of249O-bPujDG1umoXZUndM6wIsx8lqNWPqVTz4,358190
|
9
|
-
tksheet/other_classes.py,sha256=ADybikLipEG4NABXx8bGVAovJJhWcomQOWTorzS1CPU,16581
|
10
|
-
tksheet/row_index.py,sha256=NUpv_cpGDKO_tF4tICcK2BaW1Z0-w8sdE9NYVyHNHO8,133849
|
11
|
-
tksheet/sheet.py,sha256=s_9jyRok7AGanMZ9NzQYjkFxlwavjEMSBnOEN3uoJoQ,283724
|
12
|
-
tksheet/sheet_options.py,sha256=A_cJEc6XirLO8YrWQHfb10lK2VhGbz28_3XgrKx3TfM,9753
|
13
|
-
tksheet/sorting.py,sha256=xBSh_b7QyRRDzwqmKMPEevCZY1KpmMbyA6kl0yvcK6U,16887
|
14
|
-
tksheet/text_editor.py,sha256=ZLVF-0WxDin5qUAJ5r7dmsdwvhyEoxw0PlPvi_AGNPE,7328
|
15
|
-
tksheet/themes.py,sha256=AoNAxibnQi04MN0Zpbn9-kyDnkiiV8TDNWP9FYjpuf0,18473
|
16
|
-
tksheet/tksheet_types.py,sha256=8JQVlA6N9jEZTEAytbcyuhOGuNE4fUPxYhTqoidxEE0,588
|
17
|
-
tksheet/top_left_rectangle.py,sha256=KhTT-rBUwQTgaHjSwL83cL5_71k2L1B7gxkSxZlTSK8,8598
|
18
|
-
tksheet-7.4.4.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
19
|
-
tksheet-7.4.4.dist-info/METADATA,sha256=F4df5FisLoL6dkzwUbayE2Djt0fgD1bibXlVOFLaoDM,7839
|
20
|
-
tksheet-7.4.4.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
21
|
-
tksheet-7.4.4.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
22
|
-
tksheet-7.4.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|