tksheet 7.1.3__py3-none-any.whl → 7.1.5__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 +91 -91
- tksheet/functions.py +16 -0
- tksheet/main_table.py +155 -133
- tksheet/other_classes.py +4 -0
- tksheet/row_index.py +89 -97
- tksheet/sheet.py +123 -82
- tksheet/text_editor.py +8 -6
- {tksheet-7.1.3.dist-info → tksheet-7.1.5.dist-info}/METADATA +1 -1
- tksheet-7.1.5.dist-info/RECORD +20 -0
- tksheet-7.1.3.dist-info/RECORD +0 -20
- {tksheet-7.1.3.dist-info → tksheet-7.1.5.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.1.3.dist-info → tksheet-7.1.5.dist-info}/WHEEL +0 -0
- {tksheet-7.1.3.dist-info → tksheet-7.1.5.dist-info}/top_level.txt +0 -0
tksheet/sheet.py
CHANGED
@@ -14,6 +14,7 @@ from .column_headers import ColumnHeaders
|
|
14
14
|
from .functions import (
|
15
15
|
add_highlight,
|
16
16
|
add_to_options,
|
17
|
+
convert_align,
|
17
18
|
data_to_displayed_idxs,
|
18
19
|
del_from_options,
|
19
20
|
del_named_span_options,
|
@@ -314,14 +315,14 @@ class Sheet(tk.Frame):
|
|
314
315
|
self.RI = RowIndex(
|
315
316
|
parent=self,
|
316
317
|
row_index_align=(
|
317
|
-
|
318
|
+
convert_align(row_index_align) if row_index_align is not None else convert_align(index_align)
|
318
319
|
),
|
319
320
|
default_row_index=default_row_index,
|
320
321
|
)
|
321
322
|
self.CH = ColumnHeaders(
|
322
323
|
parent=self,
|
323
324
|
default_header=default_header,
|
324
|
-
header_align=
|
325
|
+
header_align=convert_align(header_align),
|
325
326
|
)
|
326
327
|
self.MT = MainTable(
|
327
328
|
parent=self,
|
@@ -341,7 +342,7 @@ class Sheet(tk.Frame):
|
|
341
342
|
row_index=row_index,
|
342
343
|
index=index,
|
343
344
|
zoom=zoom,
|
344
|
-
align=
|
345
|
+
align=convert_align(align),
|
345
346
|
displayed_columns=displayed_columns,
|
346
347
|
all_columns_displayed=all_columns_displayed,
|
347
348
|
displayed_rows=displayed_rows,
|
@@ -2796,21 +2797,6 @@ class Sheet(tk.Frame):
|
|
2796
2797
|
def header_font(self, newfont: tuple[str, int, str] | None = None) -> tuple[str, int, str]:
|
2797
2798
|
return self.MT.set_header_font(newfont)
|
2798
2799
|
|
2799
|
-
def convert_align(self, align: str | None) -> str | None:
|
2800
|
-
if isinstance(align, str):
|
2801
|
-
a = align.lower()
|
2802
|
-
if a == "global":
|
2803
|
-
return None
|
2804
|
-
elif a in ("c", "center", "centre"):
|
2805
|
-
return "center"
|
2806
|
-
elif a in ("w", "west", "left"):
|
2807
|
-
return "w"
|
2808
|
-
elif a in ("e", "east", "right"):
|
2809
|
-
return "e"
|
2810
|
-
elif align is None:
|
2811
|
-
return None
|
2812
|
-
raise ValueError("Align must be one of the following values: c, center, w, west, left, e, east, right")
|
2813
|
-
|
2814
2800
|
def table_align(
|
2815
2801
|
self,
|
2816
2802
|
align: str = None,
|
@@ -2818,8 +2804,8 @@ class Sheet(tk.Frame):
|
|
2818
2804
|
) -> str | Sheet:
|
2819
2805
|
if align is None:
|
2820
2806
|
return self.MT.align
|
2821
|
-
elif
|
2822
|
-
self.MT.align =
|
2807
|
+
elif convert_align(align):
|
2808
|
+
self.MT.align = convert_align(align)
|
2823
2809
|
else:
|
2824
2810
|
raise ValueError("Align must be one of the following values: c, center, w, west, e, east")
|
2825
2811
|
self.set_refresh_timer(redraw)
|
@@ -2832,8 +2818,8 @@ class Sheet(tk.Frame):
|
|
2832
2818
|
) -> str | Sheet:
|
2833
2819
|
if align is None:
|
2834
2820
|
return self.CH.align
|
2835
|
-
elif
|
2836
|
-
self.CH.align =
|
2821
|
+
elif convert_align(align):
|
2822
|
+
self.CH.align = convert_align(align)
|
2837
2823
|
else:
|
2838
2824
|
raise ValueError("Align must be one of the following values: c, center, w, west, e, east")
|
2839
2825
|
self.set_refresh_timer(redraw)
|
@@ -2846,8 +2832,8 @@ class Sheet(tk.Frame):
|
|
2846
2832
|
) -> str | Sheet:
|
2847
2833
|
if align is None:
|
2848
2834
|
return self.RI.align
|
2849
|
-
elif
|
2850
|
-
self.RI.align =
|
2835
|
+
elif convert_align(align):
|
2836
|
+
self.RI.align = convert_align(align)
|
2851
2837
|
else:
|
2852
2838
|
raise ValueError("Align must be one of the following values: c, center, w, west, e, east")
|
2853
2839
|
self.set_refresh_timer(redraw)
|
@@ -2869,7 +2855,7 @@ class Sheet(tk.Frame):
|
|
2869
2855
|
span = self.span_from_key(*key)
|
2870
2856
|
rows, cols = self.ranges_from_span(span)
|
2871
2857
|
table, index, header = span.table, span.index, span.header
|
2872
|
-
align =
|
2858
|
+
align = convert_align(align)
|
2873
2859
|
if span.kind == "cell":
|
2874
2860
|
if header:
|
2875
2861
|
for c in cols:
|
@@ -2967,14 +2953,24 @@ class Sheet(tk.Frame):
|
|
2967
2953
|
def get_all_selection_boxes_with_types(self) -> list[tuple[tuple[int, int, int, int], str]]:
|
2968
2954
|
return self.MT.get_all_selection_boxes_with_types()
|
2969
2955
|
|
2970
|
-
|
2971
|
-
|
2956
|
+
@property
|
2957
|
+
def boxes(self) -> list[tuple[tuple[int, int, int, int], str]]:
|
2958
|
+
return self.MT.get_all_selection_boxes_with_types()
|
2959
|
+
|
2960
|
+
def cell_selected(
|
2961
|
+
self,
|
2962
|
+
r: int,
|
2963
|
+
c: int,
|
2964
|
+
rows: bool = False,
|
2965
|
+
columns: bool = False,
|
2966
|
+
) -> bool:
|
2967
|
+
return self.MT.cell_selected(r, c, inc_cols=columns, inc_rows=rows)
|
2972
2968
|
|
2973
|
-
def row_selected(self, r: int) -> bool:
|
2974
|
-
return self.MT.row_selected(r)
|
2969
|
+
def row_selected(self, r: int, cells: bool = False) -> bool:
|
2970
|
+
return self.MT.row_selected(r, cells=cells)
|
2975
2971
|
|
2976
|
-
def column_selected(self, c: int) -> bool:
|
2977
|
-
return self.MT.col_selected(c)
|
2972
|
+
def column_selected(self, c: int, cells: bool = False) -> bool:
|
2973
|
+
return self.MT.col_selected(c, cells=cells)
|
2978
2974
|
|
2979
2975
|
def anything_selected(
|
2980
2976
|
self,
|
@@ -3159,7 +3155,7 @@ class Sheet(tk.Frame):
|
|
3159
3155
|
c1: int,
|
3160
3156
|
r2: int,
|
3161
3157
|
c2: int,
|
3162
|
-
type_:
|
3158
|
+
type_: Literal["cells", "rows", "columns", "cols"] = "cells",
|
3163
3159
|
) -> int:
|
3164
3160
|
return self.MT.create_selection_box(r1=r1, c1=c1, r2=r2, c2=c2, type_="columns" if type_ == "cols" else type_)
|
3165
3161
|
|
@@ -3169,9 +3165,9 @@ class Sheet(tk.Frame):
|
|
3169
3165
|
|
3170
3166
|
def deselect(
|
3171
3167
|
self,
|
3172
|
-
row: int | None |
|
3168
|
+
row: int | None | Literal["all"] = None,
|
3173
3169
|
column: int | None = None,
|
3174
|
-
cell: tuple | None = None,
|
3170
|
+
cell: tuple[int, int] | None = None,
|
3175
3171
|
redraw: bool = True,
|
3176
3172
|
) -> Sheet:
|
3177
3173
|
self.MT.deselect(r=row, c=column, cell=cell, redraw=False)
|
@@ -3206,8 +3202,12 @@ class Sheet(tk.Frame):
|
|
3206
3202
|
self.set_refresh_timer(redraw)
|
3207
3203
|
return self
|
3208
3204
|
|
3209
|
-
def set_all_cell_sizes_to_text(
|
3210
|
-
self
|
3205
|
+
def set_all_cell_sizes_to_text(
|
3206
|
+
self,
|
3207
|
+
redraw: bool = True,
|
3208
|
+
width: int | None = None,
|
3209
|
+
) -> tuple[list[float], list[float]]:
|
3210
|
+
self.MT.set_all_cell_sizes_to_text(w=width)
|
3211
3211
|
self.set_refresh_timer(redraw)
|
3212
3212
|
return self.MT.row_positions, self.MT.col_positions
|
3213
3213
|
|
@@ -3603,6 +3603,7 @@ class Sheet(tk.Frame):
|
|
3603
3603
|
return c if self.MT.all_columns_displayed else self.MT.displayed_columns[c]
|
3604
3604
|
|
3605
3605
|
data_c = displayed_column_to_data
|
3606
|
+
dcol = displayed_column_to_data
|
3606
3607
|
|
3607
3608
|
def display_columns(
|
3608
3609
|
self,
|
@@ -3710,6 +3711,7 @@ class Sheet(tk.Frame):
|
|
3710
3711
|
return r if self.MT.all_rows_displayed else self.MT.displayed_rows[r]
|
3711
3712
|
|
3712
3713
|
data_r = displayed_row_to_data
|
3714
|
+
drow = displayed_row_to_data
|
3713
3715
|
|
3714
3716
|
def display_rows(
|
3715
3717
|
self,
|
@@ -4104,6 +4106,25 @@ class Sheet(tk.Frame):
|
|
4104
4106
|
)
|
4105
4107
|
return self
|
4106
4108
|
|
4109
|
+
def event_widget_is_sheet(
|
4110
|
+
self,
|
4111
|
+
event: object,
|
4112
|
+
table: bool = True,
|
4113
|
+
index: bool = True,
|
4114
|
+
header: bool = True,
|
4115
|
+
top_left: bool = True,
|
4116
|
+
) -> bool:
|
4117
|
+
return (
|
4118
|
+
table
|
4119
|
+
and event.widget == self.MT
|
4120
|
+
or index
|
4121
|
+
and event.widget == self.RI
|
4122
|
+
or header
|
4123
|
+
and event.widget == self.CH
|
4124
|
+
or top_left
|
4125
|
+
and event.widget == self.TL
|
4126
|
+
)
|
4127
|
+
|
4107
4128
|
def get_cell_options(
|
4108
4129
|
self,
|
4109
4130
|
key: None | str = None,
|
@@ -4549,8 +4570,9 @@ class Sheet(tk.Frame):
|
|
4549
4570
|
)
|
4550
4571
|
else:
|
4551
4572
|
self.RI.tree_open_ids.discard(item)
|
4573
|
+
rows = {self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item, check_open=True)}
|
4552
4574
|
self.hide_rows(
|
4553
|
-
|
4575
|
+
rows,
|
4554
4576
|
redraw=False,
|
4555
4577
|
deselect_all=False,
|
4556
4578
|
data_indexes=True,
|
@@ -4786,12 +4808,14 @@ class Sheet(tk.Frame):
|
|
4786
4808
|
self.display_item(item)
|
4787
4809
|
self.see(row=bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]), keep_xscroll=True)
|
4788
4810
|
|
4789
|
-
def selection(self) -> list[str]:
|
4811
|
+
def selection(self, cells: bool = False) -> list[str]:
|
4790
4812
|
"""
|
4791
4813
|
Get currently selected item ids
|
4792
|
-
- Only includes selected rows
|
4793
4814
|
"""
|
4794
|
-
return [
|
4815
|
+
return [
|
4816
|
+
self.MT._row_index[self.displayed_row_to_data(rn)].iid
|
4817
|
+
for rn in self.get_selected_rows(get_cells_as_rows=cells)
|
4818
|
+
]
|
4795
4819
|
|
4796
4820
|
def selection_set(self, *items) -> Sheet:
|
4797
4821
|
self.deselect()
|
@@ -5493,13 +5517,13 @@ class Sheet(tk.Frame):
|
|
5493
5517
|
) -> None:
|
5494
5518
|
if isinstance(cells, dict):
|
5495
5519
|
for k, v in cells.items():
|
5496
|
-
set_align(self.MT.cell_options, k,
|
5520
|
+
set_align(self.MT.cell_options, k, convert_align(v))
|
5497
5521
|
elif cells:
|
5498
|
-
align =
|
5522
|
+
align = convert_align(align)
|
5499
5523
|
for k in cells:
|
5500
5524
|
set_align(self.MT.cell_options, k, align)
|
5501
5525
|
else:
|
5502
|
-
set_align(self.MT.cell_options, (row, column),
|
5526
|
+
set_align(self.MT.cell_options, (row, column), convert_align(align))
|
5503
5527
|
self.set_refresh_timer(redraw)
|
5504
5528
|
|
5505
5529
|
def align_rows(
|
@@ -5511,18 +5535,18 @@ class Sheet(tk.Frame):
|
|
5511
5535
|
) -> None:
|
5512
5536
|
if isinstance(rows, dict):
|
5513
5537
|
for k, v in rows.items():
|
5514
|
-
align =
|
5538
|
+
align = convert_align(v)
|
5515
5539
|
set_align(self.MT.row_options, k, align)
|
5516
5540
|
if align_index:
|
5517
5541
|
set_align(self.RI.cell_options, k, align)
|
5518
5542
|
elif is_iterable(rows):
|
5519
|
-
align =
|
5543
|
+
align = convert_align(align)
|
5520
5544
|
for k in rows:
|
5521
5545
|
set_align(self.MT.row_options, k, align)
|
5522
5546
|
if align_index:
|
5523
5547
|
set_align(self.RI.cell_options, k, align)
|
5524
5548
|
elif isinstance(rows, int):
|
5525
|
-
set_align(self.MT.row_options, rows,
|
5549
|
+
set_align(self.MT.row_options, rows, convert_align(align))
|
5526
5550
|
if align_index:
|
5527
5551
|
set_align(self.RI.cell_options, rows, align)
|
5528
5552
|
self.set_refresh_timer(redraw)
|
@@ -5536,18 +5560,18 @@ class Sheet(tk.Frame):
|
|
5536
5560
|
) -> None:
|
5537
5561
|
if isinstance(columns, dict):
|
5538
5562
|
for k, v in columns.items():
|
5539
|
-
align =
|
5563
|
+
align = convert_align(v)
|
5540
5564
|
set_align(self.MT.col_options, k, align)
|
5541
5565
|
if align_header:
|
5542
5566
|
set_align(self.CH.cell_options, k, align)
|
5543
5567
|
elif is_iterable(columns):
|
5544
|
-
align =
|
5568
|
+
align = convert_align(align)
|
5545
5569
|
for k in columns:
|
5546
5570
|
set_align(self.MT.col_options, k, align)
|
5547
5571
|
if align_header:
|
5548
5572
|
set_align(self.CH.cell_options, k, align)
|
5549
5573
|
elif isinstance(columns, int):
|
5550
|
-
set_align(self.MT.col_options, columns,
|
5574
|
+
set_align(self.MT.col_options, columns, convert_align(align))
|
5551
5575
|
if align_header:
|
5552
5576
|
set_align(self.CH.cell_options, columns, align)
|
5553
5577
|
self.set_refresh_timer(redraw)
|
@@ -5560,13 +5584,13 @@ class Sheet(tk.Frame):
|
|
5560
5584
|
) -> None:
|
5561
5585
|
if isinstance(columns, dict):
|
5562
5586
|
for k, v in columns.items():
|
5563
|
-
set_align(self.CH.cell_options, k,
|
5587
|
+
set_align(self.CH.cell_options, k, convert_align(v))
|
5564
5588
|
elif is_iterable(columns):
|
5565
|
-
align =
|
5589
|
+
align = convert_align(align)
|
5566
5590
|
for k in columns:
|
5567
5591
|
set_align(self.CH.cell_options, k, align)
|
5568
5592
|
elif isinstance(columns, int):
|
5569
|
-
set_align(self.CH.cell_options, columns,
|
5593
|
+
set_align(self.CH.cell_options, columns, convert_align(align))
|
5570
5594
|
self.set_refresh_timer(redraw)
|
5571
5595
|
|
5572
5596
|
def align_index(
|
@@ -5577,13 +5601,13 @@ class Sheet(tk.Frame):
|
|
5577
5601
|
) -> None:
|
5578
5602
|
if isinstance(rows, dict):
|
5579
5603
|
for k, v in rows.items():
|
5580
|
-
set_align(self.RI.cell_options, k,
|
5604
|
+
set_align(self.RI.cell_options, k, convert_align(v))
|
5581
5605
|
elif is_iterable(rows):
|
5582
|
-
align =
|
5606
|
+
align = convert_align(align)
|
5583
5607
|
for k in rows:
|
5584
5608
|
set_align(self.RI.cell_options, k, align)
|
5585
5609
|
elif isinstance(rows, int):
|
5586
|
-
set_align(self.RI.cell_options, rows,
|
5610
|
+
set_align(self.RI.cell_options, rows, convert_align(align))
|
5587
5611
|
self.set_refresh_timer(redraw)
|
5588
5612
|
|
5589
5613
|
def get_cell_alignments(self) -> dict:
|
@@ -6348,7 +6372,7 @@ class Dropdown(Sheet):
|
|
6348
6372
|
width: int | None = None,
|
6349
6373
|
height: int | None = None,
|
6350
6374
|
font: None | tuple[str, int, str] = None,
|
6351
|
-
outline_thickness: int =
|
6375
|
+
outline_thickness: int = 1,
|
6352
6376
|
values: list[object] = [],
|
6353
6377
|
close_dropdown_window: Callable | None = None,
|
6354
6378
|
search_function: Callable = dropdown_search_function,
|
@@ -6358,47 +6382,29 @@ class Dropdown(Sheet):
|
|
6358
6382
|
# False for using r, c
|
6359
6383
|
# "r" for r
|
6360
6384
|
# "c" for c
|
6361
|
-
single_index:
|
6385
|
+
single_index: Literal["r", "c"] | bool = False,
|
6362
6386
|
) -> None:
|
6363
6387
|
Sheet.__init__(
|
6364
6388
|
self,
|
6365
6389
|
parent=parent,
|
6366
6390
|
outline_thickness=outline_thickness,
|
6367
|
-
outline_color=outline_color,
|
6368
|
-
table_grid_fg=ops.popup_menu_fg,
|
6369
6391
|
show_horizontal_grid=True,
|
6370
6392
|
show_vertical_grid=False,
|
6371
6393
|
show_header=False,
|
6372
6394
|
show_row_index=False,
|
6373
6395
|
show_top_left=False,
|
6374
|
-
# alignments other than w for dropdown boxes are broken at the moment
|
6375
|
-
align="w",
|
6376
6396
|
empty_horizontal=0,
|
6377
6397
|
empty_vertical=0,
|
6378
6398
|
selected_rows_to_end_of_window=True,
|
6379
6399
|
horizontal_grid_to_end_of_window=True,
|
6380
6400
|
set_cell_sizes_on_zoom=True,
|
6381
6401
|
show_selected_cells_border=False,
|
6382
|
-
table_selected_cells_border_fg=ops.popup_menu_fg,
|
6383
|
-
table_selected_cells_bg=ops.popup_menu_highlight_bg,
|
6384
|
-
table_selected_rows_border_fg=ops.popup_menu_fg,
|
6385
|
-
table_selected_rows_bg=ops.popup_menu_highlight_bg,
|
6386
|
-
table_selected_rows_fg=ops.popup_menu_highlight_fg,
|
6387
|
-
width=width,
|
6388
|
-
height=height,
|
6389
|
-
font=font if font else self.ops.table_font,
|
6390
|
-
table_fg=ops.popup_menu_fg,
|
6391
|
-
table_bg=ops.popup_menu_bg,
|
6392
|
-
**{k: ops[k] for k in scrollbar_options_keys},
|
6393
6402
|
)
|
6394
6403
|
self.parent = parent
|
6395
6404
|
self.close_dropdown_window = close_dropdown_window
|
6396
6405
|
self.search_function = search_function
|
6397
6406
|
self.arrowkey_RIGHT = arrowkey_RIGHT
|
6398
6407
|
self.arrowkey_LEFT = arrowkey_LEFT
|
6399
|
-
self.r = r
|
6400
|
-
self.c = c
|
6401
|
-
self.row = -1
|
6402
6408
|
self.single_index = single_index
|
6403
6409
|
self.bind("<Motion>", self.mouse_motion)
|
6404
6410
|
self.bind("<ButtonPress-1>", self.b1)
|
@@ -6410,11 +6416,43 @@ class Dropdown(Sheet):
|
|
6410
6416
|
self.bind("<Prior>", self.arrowkey_UP)
|
6411
6417
|
self.bind("<Next>", self.arrowkey_DOWN)
|
6412
6418
|
self.bind("<Return>", self.b1)
|
6413
|
-
|
6414
|
-
|
6419
|
+
self.reset(r, c, width, height, font, ops, outline_color, align, values)
|
6420
|
+
|
6421
|
+
def reset(
|
6422
|
+
self,
|
6423
|
+
r: int,
|
6424
|
+
c: int,
|
6425
|
+
width: int,
|
6426
|
+
height: int,
|
6427
|
+
font: tuple[str, int, str],
|
6428
|
+
ops: DotDict,
|
6429
|
+
outline_color: str,
|
6430
|
+
align: str,
|
6431
|
+
values: list[object] | None = None,
|
6432
|
+
) -> None:
|
6433
|
+
self.r = r
|
6434
|
+
self.c = c
|
6435
|
+
self.row = -1
|
6436
|
+
self.height_and_width(height=height, width=width)
|
6437
|
+
self.table_align(align)
|
6438
|
+
self.set_options(
|
6439
|
+
outline_color=outline_color,
|
6440
|
+
table_grid_fg=ops.popup_menu_fg,
|
6441
|
+
table_selected_cells_border_fg=ops.popup_menu_fg,
|
6442
|
+
table_selected_cells_bg=ops.popup_menu_highlight_bg,
|
6443
|
+
table_selected_rows_border_fg=ops.popup_menu_fg,
|
6444
|
+
table_selected_rows_bg=ops.popup_menu_highlight_bg,
|
6445
|
+
table_selected_rows_fg=ops.popup_menu_highlight_fg,
|
6446
|
+
table_selected_box_cells_fg=ops.popup_menu_highlight_bg,
|
6447
|
+
table_selected_box_rows_fg=ops.popup_menu_highlight_bg,
|
6448
|
+
font=font,
|
6449
|
+
table_fg=ops.popup_menu_fg,
|
6450
|
+
table_bg=ops.popup_menu_bg,
|
6451
|
+
**{k: ops[k] for k in scrollbar_options_keys},
|
6452
|
+
)
|
6453
|
+
self.values(values, width=width - self.yscroll.winfo_width() - 4)
|
6415
6454
|
|
6416
6455
|
def arrowkey_UP(self, event: object = None) -> None:
|
6417
|
-
self.deselect("all")
|
6418
6456
|
if self.row > 0:
|
6419
6457
|
self.row -= 1
|
6420
6458
|
else:
|
@@ -6423,7 +6461,6 @@ class Dropdown(Sheet):
|
|
6423
6461
|
self.select_row(self.row)
|
6424
6462
|
|
6425
6463
|
def arrowkey_DOWN(self, event: object = None) -> None:
|
6426
|
-
self.deselect("all")
|
6427
6464
|
if len(self.MT.data) - 1 > self.row:
|
6428
6465
|
self.row += 1
|
6429
6466
|
self.see(self.row, 0, redraw=False)
|
@@ -6441,7 +6478,6 @@ class Dropdown(Sheet):
|
|
6441
6478
|
row = self.identify_row(event, exclude_index=True, allow_end=False)
|
6442
6479
|
if row is not None and row != self.row:
|
6443
6480
|
self.row = row
|
6444
|
-
self.deselect("all", redraw=False)
|
6445
6481
|
self.select_row(self.row)
|
6446
6482
|
|
6447
6483
|
def _reselect(self) -> None:
|
@@ -6481,7 +6517,12 @@ class Dropdown(Sheet):
|
|
6481
6517
|
return self.c
|
6482
6518
|
return self.r, self.c
|
6483
6519
|
|
6484
|
-
def values(
|
6520
|
+
def values(
|
6521
|
+
self,
|
6522
|
+
values: list = [],
|
6523
|
+
redraw: bool = True,
|
6524
|
+
width: int | None = None,
|
6525
|
+
) -> None:
|
6485
6526
|
self.set_sheet_data(
|
6486
6527
|
[[v] for v in values],
|
6487
6528
|
reset_col_positions=False,
|
@@ -6489,4 +6530,4 @@ class Dropdown(Sheet):
|
|
6489
6530
|
redraw=False,
|
6490
6531
|
verify=False,
|
6491
6532
|
)
|
6492
|
-
self.set_all_cell_sizes_to_text(redraw=redraw)
|
6533
|
+
self.set_all_cell_sizes_to_text(redraw=redraw, width=width)
|
tksheet/text_editor.py
CHANGED
@@ -4,6 +4,9 @@ import tkinter as tk
|
|
4
4
|
from collections.abc import Callable
|
5
5
|
from typing import Literal
|
6
6
|
|
7
|
+
from .functions import (
|
8
|
+
convert_align,
|
9
|
+
)
|
7
10
|
from .other_classes import (
|
8
11
|
DotDict,
|
9
12
|
)
|
@@ -91,16 +94,15 @@ class TextEditorTkText(tk.Text):
|
|
91
94
|
command=self.undo,
|
92
95
|
**menu_kwargs,
|
93
96
|
)
|
94
|
-
|
95
|
-
self.insert(1.0, text)
|
96
|
-
self.yview_moveto(1)
|
97
|
-
self.tag_configure("align", justify=self.align)
|
97
|
+
align = convert_align(align)
|
98
98
|
if align == "w":
|
99
99
|
self.align = "left"
|
100
|
-
elif align == "center":
|
101
|
-
self.align = "center"
|
102
100
|
elif align == "e":
|
103
101
|
self.align = "right"
|
102
|
+
self.delete(1.0, "end")
|
103
|
+
self.insert(1.0, text)
|
104
|
+
self.yview_moveto(1)
|
105
|
+
self.tag_configure("align", justify=self.align)
|
104
106
|
self.tag_add("align", 1.0, "end")
|
105
107
|
|
106
108
|
def _proxy(self, command: object, *args) -> object:
|
@@ -0,0 +1,20 @@
|
|
1
|
+
tksheet/__init__.py,sha256=bzXUATwg31SEbu5F3bS-MFBDpi4MAuMZ0TPh49RAonU,1874
|
2
|
+
tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
|
3
|
+
tksheet/column_headers.py,sha256=9LOi8-Xr7_h0UlF277VDVg_UWQ3UGVwD9fufwq3SbMU,99272
|
4
|
+
tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
|
5
|
+
tksheet/functions.py,sha256=PN2qanv32V4Hg221b-999fEH4yxYNoze925txUP5kA4,39245
|
6
|
+
tksheet/main_table.py,sha256=QHFqCkCWkiecHBjbiGBJSJ0SoMp2htXBCpkLIMQEeWI,318511
|
7
|
+
tksheet/other_classes.py,sha256=Hjr7c0kD2_880xjtGuFn9gQ-7ED5kSiNahniBeXcf84,13604
|
8
|
+
tksheet/row_index.py,sha256=ZPBiKNB5NghU_Q-LEqWrC9-VqaVYj__DodenDSR_oeA,103990
|
9
|
+
tksheet/sheet.py,sha256=ho4dGIco8GTCJluFZcJhOJNgnJTA_S_dMm-xU4cJPGo,256866
|
10
|
+
tksheet/sheet_options.py,sha256=Vcy4RxTKvf2HM-Yc53ex0lpBe6ATXc_pdx4oLhfjDgU,11906
|
11
|
+
tksheet/text_editor.py,sha256=81_IZKrTVa2KIx2cJ4n3cFvFMAwvbHIQYgqtyat-97I,6681
|
12
|
+
tksheet/themes.py,sha256=OwUe31NRbosjw3ZoZsMyB8lNVyYin9YcKLhCturi5q8,13398
|
13
|
+
tksheet/top_left_rectangle.py,sha256=-2u9GfOvcqhkKwHEtbqdFvXCY3RbvL5k2Sh9l3r_k04,8275
|
14
|
+
tksheet/types.py,sha256=IgoEHMbceKpakcZtanxKaKJ4RdCq7UW6EoEIIz5O59k,340
|
15
|
+
tksheet/vars.py,sha256=Iukk7-MMT9X7vv0m3nQPKzbp2Iw2Pg1wJEW7js919Mo,2092
|
16
|
+
tksheet-7.1.5.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
17
|
+
tksheet-7.1.5.dist-info/METADATA,sha256=WBm8p-qBsL207lJ6_tznMJE9Vo62iKaZmj-nmyj-UbE,6013
|
18
|
+
tksheet-7.1.5.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
19
|
+
tksheet-7.1.5.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
20
|
+
tksheet-7.1.5.dist-info/RECORD,,
|
tksheet-7.1.3.dist-info/RECORD
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
tksheet/__init__.py,sha256=12WUGUlSqVLgEpsMVTdgp8OZ60dVldHopXMgu4ZY_FU,1874
|
2
|
-
tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
|
3
|
-
tksheet/column_headers.py,sha256=1I49CQS4unBcJ-y044R-DtYhJ4zUplrOfImOk8qHIj8,99396
|
4
|
-
tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
|
5
|
-
tksheet/functions.py,sha256=7S4cQDIQ-1JqwQCgJSeVUA6bui_CK09zTHrtg2H7UeU,38714
|
6
|
-
tksheet/main_table.py,sha256=Di80IjcLbHtS0_G6iLYst1Uj-jD7FURLYYnZJwNqNNk,317950
|
7
|
-
tksheet/other_classes.py,sha256=s559IxoFEeAgxTKrrHZnAeXUXWIEmiP4tBncIdQIXSQ,13544
|
8
|
-
tksheet/row_index.py,sha256=GzK6Gfi4v6zwALn5IvBz22SdSFLUgxS1yLX4bm7z3sg,104428
|
9
|
-
tksheet/sheet.py,sha256=mEb_DHSkp_eRri0Lk7CHnaXRj_0FR7luIxy_Tl4A3wg,255991
|
10
|
-
tksheet/sheet_options.py,sha256=Vcy4RxTKvf2HM-Yc53ex0lpBe6ATXc_pdx4oLhfjDgU,11906
|
11
|
-
tksheet/text_editor.py,sha256=7xsEbgIyAWHDBWroh2wk1VeoVftFALlPZC9OANgD6LA,6662
|
12
|
-
tksheet/themes.py,sha256=OwUe31NRbosjw3ZoZsMyB8lNVyYin9YcKLhCturi5q8,13398
|
13
|
-
tksheet/top_left_rectangle.py,sha256=-2u9GfOvcqhkKwHEtbqdFvXCY3RbvL5k2Sh9l3r_k04,8275
|
14
|
-
tksheet/types.py,sha256=IgoEHMbceKpakcZtanxKaKJ4RdCq7UW6EoEIIz5O59k,340
|
15
|
-
tksheet/vars.py,sha256=Iukk7-MMT9X7vv0m3nQPKzbp2Iw2Pg1wJEW7js919Mo,2092
|
16
|
-
tksheet-7.1.3.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
17
|
-
tksheet-7.1.3.dist-info/METADATA,sha256=P0uPdX4DxlWtwLB-i_3uqzndcS06_-UnyWDDBuU0FWI,6013
|
18
|
-
tksheet-7.1.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
19
|
-
tksheet-7.1.3.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
20
|
-
tksheet-7.1.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|