tksheet 7.3.1__py3-none-any.whl → 7.3.3__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 -2
- tksheet/column_headers.py +22 -36
- tksheet/find_window.py +251 -0
- tksheet/formatters.py +1 -1
- tksheet/functions.py +154 -45
- tksheet/main_table.py +458 -284
- tksheet/other_classes.py +6 -9
- tksheet/row_index.py +23 -35
- tksheet/sheet.py +75 -21
- tksheet/sheet_options.py +16 -1
- tksheet/text_editor.py +1 -1
- tksheet/top_left_rectangle.py +1 -1
- {tksheet-7.3.1.dist-info → tksheet-7.3.3.dist-info}/METADATA +10 -11
- tksheet-7.3.3.dist-info/RECORD +21 -0
- {tksheet-7.3.1.dist-info → tksheet-7.3.3.dist-info}/WHEEL +1 -1
- tksheet-7.3.1.dist-info/RECORD +0 -20
- /tksheet/{vars.py → constants.py} +0 -0
- {tksheet-7.3.1.dist-info → tksheet-7.3.3.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.3.1.dist-info → tksheet-7.3.3.dist-info}/top_level.txt +0 -0
tksheet/other_classes.py
CHANGED
@@ -457,7 +457,7 @@ class Node:
|
|
457
457
|
return self.text
|
458
458
|
|
459
459
|
|
460
|
-
class
|
460
|
+
class StorageBase:
|
461
461
|
__slots__ = ("canvas_id", "window", "open")
|
462
462
|
|
463
463
|
def __init__(self) -> None:
|
@@ -465,6 +465,8 @@ class DropdownStorage:
|
|
465
465
|
self.window = None
|
466
466
|
self.open = False
|
467
467
|
|
468
|
+
|
469
|
+
class DropdownStorage(StorageBase):
|
468
470
|
def get_coords(self) -> int | tuple[int, int] | None:
|
469
471
|
"""
|
470
472
|
Returns None if not open or window is None
|
@@ -474,14 +476,7 @@ class DropdownStorage:
|
|
474
476
|
return None
|
475
477
|
|
476
478
|
|
477
|
-
class
|
478
|
-
__slots__ = ("canvas_id", "window", "open")
|
479
|
-
|
480
|
-
def __init__(self) -> None:
|
481
|
-
self.canvas_id = None
|
482
|
-
self.window = None
|
483
|
-
self.open = False
|
484
|
-
|
479
|
+
class EditorStorageBase(StorageBase):
|
485
480
|
def focus(self) -> None:
|
486
481
|
if self.window:
|
487
482
|
self.window.tktext.focus_set()
|
@@ -516,6 +511,8 @@ class TextEditorStorage:
|
|
516
511
|
return self.window.tktext
|
517
512
|
return self.window
|
518
513
|
|
514
|
+
|
515
|
+
class TextEditorStorage(EditorStorageBase):
|
519
516
|
@property
|
520
517
|
def coords(self) -> tuple[int, int]:
|
521
518
|
return self.window.r, self.window.c
|
tksheet/row_index.py
CHANGED
@@ -28,6 +28,12 @@ from typing import Literal
|
|
28
28
|
from .colors import (
|
29
29
|
color_map,
|
30
30
|
)
|
31
|
+
from .constants import (
|
32
|
+
rc_binding,
|
33
|
+
text_editor_close_bindings,
|
34
|
+
text_editor_newline_bindings,
|
35
|
+
text_editor_to_unbind,
|
36
|
+
)
|
31
37
|
from .formatters import (
|
32
38
|
is_bool_like,
|
33
39
|
try_to_bool,
|
@@ -36,6 +42,8 @@ from .functions import (
|
|
36
42
|
consecutive_chunks,
|
37
43
|
consecutive_ranges,
|
38
44
|
event_dict,
|
45
|
+
event_has_char_key,
|
46
|
+
event_opens_dropdown_or_checkbox,
|
39
47
|
get_n2a,
|
40
48
|
int_x_tuple,
|
41
49
|
is_contiguous,
|
@@ -58,13 +66,6 @@ from .text_editor import (
|
|
58
66
|
from .types import (
|
59
67
|
AnyIter,
|
60
68
|
)
|
61
|
-
from .vars import (
|
62
|
-
rc_binding,
|
63
|
-
symbols_set,
|
64
|
-
text_editor_close_bindings,
|
65
|
-
text_editor_newline_bindings,
|
66
|
-
text_editor_to_unbind,
|
67
|
-
)
|
68
69
|
|
69
70
|
|
70
71
|
class RowIndex(tk.Canvas):
|
@@ -1214,6 +1215,8 @@ class RowIndex(tk.Canvas):
|
|
1214
1215
|
if new_w is not None and (sheet_w_x := floor(self.PAR.winfo_width() * 0.7)) < new_w:
|
1215
1216
|
new_w = sheet_w_x
|
1216
1217
|
if new_w and (self.current_width - new_w > 20 or new_w - self.current_width > 3):
|
1218
|
+
if self.MT.find_window.open:
|
1219
|
+
self.MT.itemconfig(self.MT.find_window.canvas_id, state="hidden")
|
1217
1220
|
self.set_width(new_w, set_TL=True, recreate_selection_boxes=False)
|
1218
1221
|
return True
|
1219
1222
|
return False
|
@@ -1827,8 +1830,8 @@ class RowIndex(tk.Canvas):
|
|
1827
1830
|
|
1828
1831
|
def get_redraw_selections(self, startr: int, endr: int) -> dict[str, set[int]]:
|
1829
1832
|
d = defaultdict(set)
|
1830
|
-
for
|
1831
|
-
r1,
|
1833
|
+
for _, box in self.MT.get_selection_items():
|
1834
|
+
r1, _, r2, _ = box.coords
|
1832
1835
|
for r in range(startr, endr):
|
1833
1836
|
if r1 <= r and r2 > r:
|
1834
1837
|
d[box.type_ if box.type_ != "columns" else "cells"].add(r)
|
@@ -1844,7 +1847,7 @@ class RowIndex(tk.Canvas):
|
|
1844
1847
|
if self.get_cell_kwargs(datarn, key="readonly"):
|
1845
1848
|
return
|
1846
1849
|
elif self.get_cell_kwargs(datarn, key="dropdown") or self.get_cell_kwargs(datarn, key="checkbox"):
|
1847
|
-
if
|
1850
|
+
if event_opens_dropdown_or_checkbox(event):
|
1848
1851
|
if self.get_cell_kwargs(datarn, key="dropdown"):
|
1849
1852
|
self.open_dropdown_window(r, event=event)
|
1850
1853
|
elif self.get_cell_kwargs(datarn, key="checkbox"):
|
@@ -1870,28 +1873,16 @@ class RowIndex(tk.Canvas):
|
|
1870
1873
|
state: str = "normal",
|
1871
1874
|
dropdown: bool = False,
|
1872
1875
|
) -> bool:
|
1873
|
-
text =
|
1876
|
+
text = f"{self.get_cell_data(self.MT.datarn(r), none_to_empty_str=True, redirect_int=True)}"
|
1874
1877
|
extra_func_key = "??"
|
1875
|
-
if
|
1876
|
-
if event
|
1877
|
-
|
1878
|
-
|
1879
|
-
|
1880
|
-
|
1881
|
-
|
1882
|
-
elif event is not None
|
1883
|
-
(hasattr(event, "keysym") and event.keysym == "BackSpace") or event.keycode in (8, 855638143)
|
1884
|
-
):
|
1885
|
-
extra_func_key = "BackSpace"
|
1886
|
-
text = ""
|
1887
|
-
elif event is not None and (
|
1888
|
-
(hasattr(event, "char") and event.char.isalpha())
|
1889
|
-
or (hasattr(event, "char") and event.char.isdigit())
|
1890
|
-
or (hasattr(event, "char") and event.char in symbols_set)
|
1891
|
-
):
|
1892
|
-
extra_func_key = event.char
|
1893
|
-
text = event.char
|
1894
|
-
else:
|
1878
|
+
if event_opens_dropdown_or_checkbox(event):
|
1879
|
+
if hasattr(event, "keysym") and event.keysym in ("Return", "F2", "BackSpace"):
|
1880
|
+
extra_func_key = event.keysym
|
1881
|
+
if event.keysym == "BackSpace":
|
1882
|
+
text = ""
|
1883
|
+
elif event_has_char_key(event):
|
1884
|
+
extra_func_key = text = event.char
|
1885
|
+
elif event is not None:
|
1895
1886
|
return False
|
1896
1887
|
if self.extra_begin_edit_cell_func:
|
1897
1888
|
try:
|
@@ -1913,12 +1904,11 @@ class RowIndex(tk.Canvas):
|
|
1913
1904
|
return False
|
1914
1905
|
else:
|
1915
1906
|
text = text if isinstance(text, str) else f"{text}"
|
1916
|
-
text = "" if text is None else text
|
1917
1907
|
if self.PAR.ops.cell_auto_resize_enabled:
|
1918
1908
|
self.set_row_height_run_binding(r)
|
1919
1909
|
if self.text_editor.open and r == self.text_editor.row:
|
1920
1910
|
self.text_editor.set_text(self.text_editor.get() + "" if not isinstance(text, str) else text)
|
1921
|
-
return
|
1911
|
+
return False
|
1922
1912
|
self.hide_text_editor()
|
1923
1913
|
if not self.MT.see(r=r, c=0, keep_yscroll=True, check_cell_visibility=True):
|
1924
1914
|
self.MT.refresh()
|
@@ -1926,8 +1916,6 @@ class RowIndex(tk.Canvas):
|
|
1926
1916
|
y = self.MT.row_positions[r]
|
1927
1917
|
w = self.current_width + 1
|
1928
1918
|
h = self.MT.row_positions[r + 1] - y + 1
|
1929
|
-
if text is None:
|
1930
|
-
text = self.get_cell_data(self.MT.datarn(r), none_to_empty_str=True, redirect_int=True)
|
1931
1919
|
kwargs = {
|
1932
1920
|
"menu_kwargs": DotDict(
|
1933
1921
|
{
|
tksheet/sheet.py
CHANGED
@@ -86,7 +86,7 @@ from .types import (
|
|
86
86
|
AnyIter,
|
87
87
|
CreateSpanTypes,
|
88
88
|
)
|
89
|
-
from .
|
89
|
+
from .constants import (
|
90
90
|
USER_OS,
|
91
91
|
backwards_compatibility_keys,
|
92
92
|
emitted_events,
|
@@ -310,6 +310,7 @@ class Sheet(tk.Frame):
|
|
310
310
|
highlightbackground=outline_color,
|
311
311
|
highlightcolor=outline_color,
|
312
312
|
)
|
313
|
+
self._startup_complete = False
|
313
314
|
self.ops = new_sheet_options()
|
314
315
|
if column_width is not None:
|
315
316
|
default_column_width = column_width
|
@@ -509,10 +510,14 @@ class Sheet(tk.Frame):
|
|
509
510
|
self.see(0, startup_select[0])
|
510
511
|
except Exception:
|
511
512
|
pass
|
512
|
-
|
513
513
|
self.refresh()
|
514
514
|
if startup_focus:
|
515
515
|
self.MT.focus_set()
|
516
|
+
self.after_idle(self.startup_complete)
|
517
|
+
|
518
|
+
def startup_complete(self, _mod: bool = True) -> bool:
|
519
|
+
self._startup_complete = _mod
|
520
|
+
return self._startup_complete
|
516
521
|
|
517
522
|
# Sheet Colors
|
518
523
|
|
@@ -653,6 +658,7 @@ class Sheet(tk.Frame):
|
|
653
658
|
- "paste"
|
654
659
|
- "delete"
|
655
660
|
- "undo"
|
661
|
+
- "find"
|
656
662
|
- "edit_cell"
|
657
663
|
- "edit_header"
|
658
664
|
- "edit_index"
|
@@ -661,6 +667,47 @@ class Sheet(tk.Frame):
|
|
661
667
|
return self
|
662
668
|
|
663
669
|
def disable_bindings(self, *bindings: str) -> Sheet:
|
670
|
+
"""
|
671
|
+
List of available bindings:
|
672
|
+
- "all"
|
673
|
+
- "single_select"
|
674
|
+
- "toggle_select"
|
675
|
+
- "drag_select"
|
676
|
+
- "select_all"
|
677
|
+
- "column_drag_and_drop" / "move_columns"
|
678
|
+
- "row_drag_and_drop" / "move_rows"
|
679
|
+
- "column_select"
|
680
|
+
- "row_select"
|
681
|
+
- "column_width_resize"
|
682
|
+
- "double_click_column_resize"
|
683
|
+
- "row_width_resize"
|
684
|
+
- "column_height_resize"
|
685
|
+
- "arrowkeys" # all arrowkeys including page up and down
|
686
|
+
- "up"
|
687
|
+
- "down"
|
688
|
+
- "left"
|
689
|
+
- "right"
|
690
|
+
- "prior" # page up
|
691
|
+
- "next" # page down
|
692
|
+
- "row_height_resize"
|
693
|
+
- "double_click_row_resize"
|
694
|
+
- "right_click_popup_menu" / "rc_popup_menu" / "rc_menu"
|
695
|
+
- "rc_select"
|
696
|
+
- "rc_insert_column"
|
697
|
+
- "rc_delete_column"
|
698
|
+
- "rc_insert_row"
|
699
|
+
- "rc_delete_row"
|
700
|
+
- "ctrl_click_select" / "ctrl_select"
|
701
|
+
- "copy"
|
702
|
+
- "cut"
|
703
|
+
- "paste"
|
704
|
+
- "delete"
|
705
|
+
- "undo"
|
706
|
+
- "find"
|
707
|
+
- "edit_cell"
|
708
|
+
- "edit_header"
|
709
|
+
- "edit_index"
|
710
|
+
"""
|
664
711
|
self.MT.disable_bindings(bindings)
|
665
712
|
return self
|
666
713
|
|
@@ -716,7 +763,7 @@ class Sheet(tk.Frame):
|
|
716
763
|
- "ctrl_column_select"
|
717
764
|
- "deselect"
|
718
765
|
- "all_select_events", "select", "selectevents", "select_events"
|
719
|
-
- "all_modified_events", "sheetmodified", "sheet_modified" "modified_events", "modified"
|
766
|
+
- "all_modified_events", "sheetmodified", "sheet_modified", "modified_events", "modified"
|
720
767
|
- "bind_all"
|
721
768
|
- "unbind_all"
|
722
769
|
"""
|
@@ -793,7 +840,8 @@ class Sheet(tk.Frame):
|
|
793
840
|
"unbind_all",
|
794
841
|
"all_modified_events",
|
795
842
|
"sheetmodified",
|
796
|
-
"sheet_modified"
|
843
|
+
"sheet_modified",
|
844
|
+
"modified_events",
|
797
845
|
"modified",
|
798
846
|
):
|
799
847
|
self.MT.extra_end_ctrl_c_func = f
|
@@ -3183,22 +3231,25 @@ class Sheet(tk.Frame):
|
|
3183
3231
|
get_columns: bool = False,
|
3184
3232
|
sort_by_row: bool = False,
|
3185
3233
|
sort_by_column: bool = False,
|
3234
|
+
reverse: bool = False,
|
3186
3235
|
) -> list[tuple[int, int]] | set[tuple[int, int]]:
|
3187
3236
|
if sort_by_row and sort_by_column:
|
3188
|
-
|
3237
|
+
return sorted(
|
3189
3238
|
self.MT.get_selected_cells(get_rows=get_rows, get_cols=get_columns),
|
3190
|
-
key=lambda t: t
|
3239
|
+
key=lambda t: t,
|
3240
|
+
reverse=reverse,
|
3191
3241
|
)
|
3192
|
-
return sorted(sels, key=lambda t: t[0])
|
3193
3242
|
elif sort_by_row:
|
3194
3243
|
return sorted(
|
3195
3244
|
self.MT.get_selected_cells(get_rows=get_rows, get_cols=get_columns),
|
3196
3245
|
key=lambda t: t[0],
|
3246
|
+
reverse=reverse,
|
3197
3247
|
)
|
3198
3248
|
elif sort_by_column:
|
3199
3249
|
return sorted(
|
3200
3250
|
self.MT.get_selected_cells(get_rows=get_rows, get_cols=get_columns),
|
3201
3251
|
key=lambda t: t[1],
|
3252
|
+
reverse=reverse,
|
3202
3253
|
)
|
3203
3254
|
return self.MT.get_selected_cells(get_rows=get_rows, get_cols=get_columns)
|
3204
3255
|
|
@@ -3252,13 +3303,13 @@ class Sheet(tk.Frame):
|
|
3252
3303
|
exclude_rows: bool = False,
|
3253
3304
|
exclude_cells: bool = False,
|
3254
3305
|
) -> bool:
|
3255
|
-
|
3256
|
-
|
3257
|
-
|
3258
|
-
|
3259
|
-
|
3260
|
-
|
3261
|
-
|
3306
|
+
return bool(
|
3307
|
+
self.MT.anything_selected(
|
3308
|
+
exclude_columns=exclude_columns,
|
3309
|
+
exclude_rows=exclude_rows,
|
3310
|
+
exclude_cells=exclude_cells,
|
3311
|
+
)
|
3312
|
+
)
|
3262
3313
|
|
3263
3314
|
def all_selected(self) -> bool:
|
3264
3315
|
return self.MT.all_selected()
|
@@ -5407,6 +5458,8 @@ class Sheet(tk.Frame):
|
|
5407
5458
|
to_show = []
|
5408
5459
|
item_node = self.RI.tree[item]
|
5409
5460
|
item_r = self.RI.tree_rns[item]
|
5461
|
+
item_descendants = tuple(self.RI.get_iid_descendants(item))
|
5462
|
+
num_item_descendants = len(item_descendants)
|
5410
5463
|
if parent:
|
5411
5464
|
if self.RI.move_pid_causes_recursive_loop(item, parent):
|
5412
5465
|
raise ValueError(f"iid '{item}' causes a recursive loop with parent '{parent}'.")
|
@@ -5419,7 +5472,7 @@ class Sheet(tk.Frame):
|
|
5419
5472
|
# index is on end
|
5420
5473
|
# item row is less than move to row
|
5421
5474
|
if item_r < new_r:
|
5422
|
-
r_ctr = new_r -
|
5475
|
+
r_ctr = new_r - num_item_descendants
|
5423
5476
|
|
5424
5477
|
# new parent has children
|
5425
5478
|
# index is on end
|
@@ -5436,10 +5489,10 @@ class Sheet(tk.Frame):
|
|
5436
5489
|
r_ctr = (
|
5437
5490
|
new_r
|
5438
5491
|
+ sum(1 for _ in self.RI.get_iid_descendants(parent_node.children[index].iid))
|
5439
|
-
-
|
5492
|
+
- num_item_descendants
|
5440
5493
|
)
|
5441
5494
|
else:
|
5442
|
-
r_ctr = new_r -
|
5495
|
+
r_ctr = new_r - num_item_descendants - 1
|
5443
5496
|
|
5444
5497
|
# new parent has children
|
5445
5498
|
# index is not end
|
@@ -5454,7 +5507,7 @@ class Sheet(tk.Frame):
|
|
5454
5507
|
# index always start
|
5455
5508
|
# item row is less than move to row
|
5456
5509
|
if item_r < new_r:
|
5457
|
-
r_ctr = new_r -
|
5510
|
+
r_ctr = new_r - num_item_descendants
|
5458
5511
|
|
5459
5512
|
# new parent doesn't have children
|
5460
5513
|
# index always start
|
@@ -5465,7 +5518,7 @@ class Sheet(tk.Frame):
|
|
5465
5518
|
if parent in self.RI.tree_open_ids and self.item_displayed(parent):
|
5466
5519
|
to_show.append(r_ctr)
|
5467
5520
|
r_ctr += 1
|
5468
|
-
for did in
|
5521
|
+
for did in item_descendants:
|
5469
5522
|
mapping[self.RI.tree_rns[did]] = r_ctr
|
5470
5523
|
if to_show and self.RI.ancestors_all_open(did, item_node.parent):
|
5471
5524
|
to_show.append(r_ctr)
|
@@ -5484,14 +5537,14 @@ class Sheet(tk.Frame):
|
|
5484
5537
|
r_ctr = (
|
5485
5538
|
new_r
|
5486
5539
|
+ sum(1 for _ in self.RI.get_iid_descendants(self.rowitem(new_r, data_index=True)))
|
5487
|
-
-
|
5540
|
+
- num_item_descendants
|
5488
5541
|
)
|
5489
5542
|
else:
|
5490
5543
|
r_ctr = new_r
|
5491
5544
|
mapping[item_r] = r_ctr
|
5492
5545
|
to_show.append(r_ctr)
|
5493
5546
|
r_ctr += 1
|
5494
|
-
for did in
|
5547
|
+
for did in item_descendants:
|
5495
5548
|
mapping[self.RI.tree_rns[did]] = r_ctr
|
5496
5549
|
if to_show and self.RI.ancestors_all_open(did, item_node.parent):
|
5497
5550
|
to_show.append(r_ctr)
|
@@ -7295,6 +7348,7 @@ class Dropdown(Sheet):
|
|
7295
7348
|
search_function: Callable = dropdown_search_function,
|
7296
7349
|
modified_function: None | Callable = None,
|
7297
7350
|
) -> None:
|
7351
|
+
self.set_yview(0.0)
|
7298
7352
|
self.deselect(redraw=False)
|
7299
7353
|
self.r = r
|
7300
7354
|
self.c = c
|
tksheet/sheet_options.py
CHANGED
@@ -7,7 +7,7 @@ from .other_classes import (
|
|
7
7
|
from .themes import (
|
8
8
|
theme_light_blue,
|
9
9
|
)
|
10
|
-
from .
|
10
|
+
from .constants import (
|
11
11
|
USER_OS,
|
12
12
|
ctrl_key,
|
13
13
|
)
|
@@ -151,6 +151,21 @@ def new_sheet_options() -> DotDict:
|
|
151
151
|
"next_bindings": [
|
152
152
|
"<Next>",
|
153
153
|
],
|
154
|
+
"find_bindings": [
|
155
|
+
f"<{ctrl_key}-f>",
|
156
|
+
f"<{ctrl_key}-F>",
|
157
|
+
],
|
158
|
+
"find_next_bindings": [
|
159
|
+
f"<{ctrl_key}-g>",
|
160
|
+
f"<{ctrl_key}-G>",
|
161
|
+
],
|
162
|
+
"find_previous_bindings": [
|
163
|
+
f"<{ctrl_key}-Shift-g>",
|
164
|
+
f"<{ctrl_key}-Shift-G>",
|
165
|
+
],
|
166
|
+
"escape_bindings": [
|
167
|
+
"<Escape>",
|
168
|
+
],
|
154
169
|
"vertical_scroll_borderwidth": 1,
|
155
170
|
"horizontal_scroll_borderwidth": 1,
|
156
171
|
"vertical_scroll_gripcount": 0,
|
tksheet/text_editor.py
CHANGED
tksheet/top_left_rectangle.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.2
|
2
2
|
Name: tksheet
|
3
|
-
Version: 7.3.
|
3
|
+
Version: 7.3.3
|
4
4
|
Summary: Tkinter table / sheet widget
|
5
5
|
Author-email: ragardner <github@ragardner.simplelogin.com>
|
6
6
|
License: Copyright (c) 2019 ragardner and open source contributors
|
@@ -95,22 +95,21 @@ This library is maintained with the help of **[others](https://github.com/ragard
|
|
95
95
|
|
96
96
|
## **Features**
|
97
97
|
|
98
|
-
-
|
99
|
-
-
|
100
|
-
- Runs smoothly even with millions of rows/columns
|
101
|
-
- Edit cells directly
|
98
|
+
- Smoothly display and modify tabular data
|
99
|
+
- [Edit cells directly](https://github.com/ragardner/tksheet/wiki/Version-7#table-functionality-and-bindings)
|
102
100
|
- Cell values can potentially be [any class](https://github.com/ragardner/tksheet/wiki/Version-7#data-formatting), the default is any class with a `__str__` method
|
103
|
-
- Drag and drop columns and rows
|
101
|
+
- [Drag and drop columns and rows](https://github.com/ragardner/tksheet/wiki/Version-7#table-functionality-and-bindings)
|
104
102
|
- Multiple line header and index cells
|
105
|
-
- Expand row heights and column widths
|
106
|
-
- Change fonts and font size (not for individual cells)
|
107
|
-
- Change any colors in the sheet
|
103
|
+
- [Expand row heights and column widths](https://github.com/ragardner/tksheet/wiki/Version-7#table-functionality-and-bindings)
|
104
|
+
- [Change fonts and font size (not for individual cells)](https://github.com/ragardner/tksheet/wiki/Version-7#text-font-and-alignment)
|
105
|
+
- [Change any colors in the sheet](https://github.com/ragardner/tksheet/wiki/Version-7#sheet-appearance)
|
108
106
|
- [Treeview mode](https://github.com/ragardner/tksheet/wiki/Version-7#treeview-mode)
|
109
107
|
- [Dropdown boxes](https://github.com/ragardner/tksheet/wiki/Version-7#dropdown-boxes)
|
110
108
|
- [Check boxes](https://github.com/ragardner/tksheet/wiki/Version-7#check-boxes)
|
111
109
|
- [Progress bars](https://github.com/ragardner/tksheet/wiki/Version-7#progress-bars)
|
112
110
|
- [Hide rows and/or columns](https://github.com/ragardner/tksheet/wiki/Version-7#example-header-dropdown-boxes-and-row-filtering)
|
113
|
-
- Left `"w"`, Center `"center"` or Right `"e"` text alignment for any cell/row/column
|
111
|
+
- [Left `"w"`, Center `"center"` or Right `"e"` text alignment for any cell/row/column](https://github.com/ragardner/tksheet/wiki/Version-7#text-font-and-alignment)
|
112
|
+
- [Optional built-in find window](https://github.com/ragardner/tksheet/wiki/Version-7#table-functionality-and-bindings)
|
114
113
|
|
115
114
|
```python
|
116
115
|
"""
|
@@ -0,0 +1,21 @@
|
|
1
|
+
tksheet/__init__.py,sha256=iBvftirYxhwiMRHzQhm0jJaaZIDt4BGwr8dXUE3hL5s,2241
|
2
|
+
tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
|
3
|
+
tksheet/column_headers.py,sha256=JoNtGsepsEho_uJq5K-yhKrO-z0qTGt4yWYE4J7Wz5w,102212
|
4
|
+
tksheet/constants.py,sha256=-NWaHEEpcQ0YHn4yGDf8SSffjceiEOayGqnEYw6VwPM,3507
|
5
|
+
tksheet/find_window.py,sha256=PcFPHLBLIeydqDTXCZwdCUAnipmA0i35oIyV3G0NnT0,8085
|
6
|
+
tksheet/formatters.py,sha256=21ZkMaDIJNUtjvtlAbPl8Y19I9nDxue-JJegw6hblz8,10551
|
7
|
+
tksheet/functions.py,sha256=Xg2T7AQ6O3VtDFqEJ0KhkQ6F3XDX86jWGcrmmFQiw_c,46625
|
8
|
+
tksheet/main_table.py,sha256=LjhYxEVVxklzz_oCxJnrbi-R5yTzbTiDesIJBWg014A,344770
|
9
|
+
tksheet/other_classes.py,sha256=wKSd30orLNIdlo9YV1nbyFy1HO8-kaey0wPUbstX5Tk,16411
|
10
|
+
tksheet/row_index.py,sha256=bduDpX2uiqH3oQWzDdKUIgOeF7LdT0ta8bHapxe6Rx0,111127
|
11
|
+
tksheet/sheet.py,sha256=gr4b7Gc5bnrHU7kcqRvti52auMCLdnXqYz8jP873rfo,290494
|
12
|
+
tksheet/sheet_options.py,sha256=zpTWAA_Sk0OaGvcxDVY5OyD8uRMWML1PLQr9eE07ztU,7899
|
13
|
+
tksheet/text_editor.py,sha256=3hVz8YKxf3-hZdVALjvlcaXkip-ZRANj7LyXfPxroXs,7454
|
14
|
+
tksheet/themes.py,sha256=AoNAxibnQi04MN0Zpbn9-kyDnkiiV8TDNWP9FYjpuf0,18473
|
15
|
+
tksheet/top_left_rectangle.py,sha256=KhTT-rBUwQTgaHjSwL83cL5_71k2L1B7gxkSxZlTSK8,8598
|
16
|
+
tksheet/types.py,sha256=4NIFPmq64g1vcbApWzLJrOZ8xhcRcOh2wCAzdn5LS2w,475
|
17
|
+
tksheet-7.3.3.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
18
|
+
tksheet-7.3.3.dist-info/METADATA,sha256=P-xVza5ntCFwJBSu_EI94lVvtGTyejRWxiKv0GrPpLY,7781
|
19
|
+
tksheet-7.3.3.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
20
|
+
tksheet-7.3.3.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
21
|
+
tksheet-7.3.3.dist-info/RECORD,,
|
tksheet-7.3.1.dist-info/RECORD
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
tksheet/__init__.py,sha256=D2eEiYomTgytJd1HZ-b4qwbtJnpbRa5Dh-EcE_EsYWE,2236
|
2
|
-
tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
|
3
|
-
tksheet/column_headers.py,sha256=9HcSz_rEPM3pelnYfrQr4AI7LR1C8Ae3GTQY9eNhMOw,102876
|
4
|
-
tksheet/formatters.py,sha256=_exO2KnjtcnE_MVWLG1ngOZ-wmrXZhuh7uEi2iPs1Tk,10546
|
5
|
-
tksheet/functions.py,sha256=egowBJuShOPuNiX46v9M8E5pzPiX2FrobCqVgKLBKWo,43482
|
6
|
-
tksheet/main_table.py,sha256=9SDXmEc-uqM58iovq52s_VgI_Ykt4i42-65-YzxDviU,337745
|
7
|
-
tksheet/other_classes.py,sha256=cYcu8TYgGdsJ6ZGG51AQFVrzj7Lu0LwAn62V7iUh_mc,16488
|
8
|
-
tksheet/row_index.py,sha256=RiIfxCfDZgDEPb7OwwCSo8O4hY1Lkh8P6p_YkHE7bWc,111666
|
9
|
-
tksheet/sheet.py,sha256=dI8tg6fLZH2Zvmm5q1NhYDd_RH6jghUA8BMuPeeazus,289010
|
10
|
-
tksheet/sheet_options.py,sha256=YzZWhqmZgrZqdR4NZV8Xe8xRgs5_2MHpUlBSDUhXHzY,7429
|
11
|
-
tksheet/text_editor.py,sha256=zrBdURBFNBbnl8GmZ4vQMFZ3UmvAvfBZ7KSJi_WtrNI,7449
|
12
|
-
tksheet/themes.py,sha256=AoNAxibnQi04MN0Zpbn9-kyDnkiiV8TDNWP9FYjpuf0,18473
|
13
|
-
tksheet/top_left_rectangle.py,sha256=0vzhYK7oGe9M_v7mlxFLh595XuXuXDOjooCDuR5sqnM,8593
|
14
|
-
tksheet/types.py,sha256=4NIFPmq64g1vcbApWzLJrOZ8xhcRcOh2wCAzdn5LS2w,475
|
15
|
-
tksheet/vars.py,sha256=-NWaHEEpcQ0YHn4yGDf8SSffjceiEOayGqnEYw6VwPM,3507
|
16
|
-
tksheet-7.3.1.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
17
|
-
tksheet-7.3.1.dist-info/METADATA,sha256=5Xbqc5dFTlp-UFOdDr1g7zmoFI7JE9moRklUMsm1_m8,7282
|
18
|
-
tksheet-7.3.1.dist-info/WHEEL,sha256=A3WOREP4zgxI0fKrHUG8DC8013e3dK3n7a6HDbcEIwE,91
|
19
|
-
tksheet-7.3.1.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
20
|
-
tksheet-7.3.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|