tksheet 7.1.4__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 +66 -54
- tksheet/functions.py +16 -0
- tksheet/main_table.py +134 -116
- tksheet/row_index.py +64 -60
- tksheet/sheet.py +81 -73
- tksheet/text_editor.py +8 -6
- {tksheet-7.1.4.dist-info → tksheet-7.1.5.dist-info}/METADATA +1 -1
- tksheet-7.1.5.dist-info/RECORD +20 -0
- tksheet-7.1.4.dist-info/RECORD +0 -20
- {tksheet-7.1.4.dist-info → tksheet-7.1.5.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.1.4.dist-info → tksheet-7.1.5.dist-info}/WHEEL +0 -0
- {tksheet-7.1.4.dist-info → tksheet-7.1.5.dist-info}/top_level.txt +0 -0
tksheet/__init__.py
CHANGED
tksheet/column_headers.py
CHANGED
@@ -272,7 +272,9 @@ class ColumnHeaders(tk.Canvas):
|
|
272
272
|
if self.MT.selected and self.MT.selected.type_ == "columns":
|
273
273
|
r_to_sel, c_to_sel = self.MT.selected.row, self.MT.selected.column
|
274
274
|
self.MT.deselect("all", redraw=False)
|
275
|
-
self.being_drawn_item = self.MT.create_selection_box(
|
275
|
+
self.being_drawn_item = self.MT.create_selection_box(
|
276
|
+
*self.get_shift_select_box(c, c_to_sel), "columns"
|
277
|
+
)
|
276
278
|
self.MT.set_currently_selected(r_to_sel, c_to_sel, self.being_drawn_item)
|
277
279
|
else:
|
278
280
|
self.being_drawn_item = self.select_col(c, run_binding_func=False)
|
@@ -854,8 +856,16 @@ class ColumnHeaders(tk.Canvas):
|
|
854
856
|
):
|
855
857
|
datacn = c if self.MT.all_columns_displayed else self.MT.displayed_columns[c]
|
856
858
|
canvasx = self.canvasx(event.x)
|
857
|
-
if self.event_over_dropdown(
|
858
|
-
c,
|
859
|
+
if self.event_over_dropdown(
|
860
|
+
c,
|
861
|
+
datacn,
|
862
|
+
event,
|
863
|
+
canvasx,
|
864
|
+
) or self.event_over_checkbox(
|
865
|
+
c,
|
866
|
+
datacn,
|
867
|
+
event,
|
868
|
+
canvasx,
|
859
869
|
):
|
860
870
|
self.open_cell(event)
|
861
871
|
else:
|
@@ -970,15 +980,15 @@ class ColumnHeaders(tk.Canvas):
|
|
970
980
|
qconf = self.MT.txt_measure_canvas.itemconfig
|
971
981
|
qbbox = self.MT.txt_measure_canvas.bbox
|
972
982
|
qtxtm = self.MT.txt_measure_canvas_text
|
983
|
+
qfont = self.PAR.ops.header_font
|
973
984
|
new_height = self.MT.min_header_height
|
974
985
|
default_header_height = self.MT.get_default_header_height()
|
975
986
|
self.fix_header()
|
976
987
|
if text is not None:
|
977
988
|
if text:
|
978
|
-
qconf(qtxtm, text=text)
|
989
|
+
qconf(qtxtm, text=text, font=qfont)
|
979
990
|
b = qbbox(qtxtm)
|
980
|
-
h
|
981
|
-
if h > new_height:
|
991
|
+
if (h := b[3] - b[1] + 5) > new_height:
|
982
992
|
new_height = h
|
983
993
|
else:
|
984
994
|
if self.MT.all_columns_displayed:
|
@@ -1002,7 +1012,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1002
1012
|
for datacn in iterable:
|
1003
1013
|
txt = self.MT.get_valid_cell_data_as_str(datarn, datacn, get_displayed=True)
|
1004
1014
|
if txt:
|
1005
|
-
qconf(qtxtm, text=txt)
|
1015
|
+
qconf(qtxtm, text=txt, font=qfont)
|
1006
1016
|
b = qbbox(qtxtm)
|
1007
1017
|
h = b[3] - b[1] + 5
|
1008
1018
|
else:
|
@@ -1014,7 +1024,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1014
1024
|
if h > new_height:
|
1015
1025
|
new_height = h
|
1016
1026
|
space_bot = self.MT.get_space_bot(0)
|
1017
|
-
if new_height > space_bot:
|
1027
|
+
if new_height > space_bot and space_bot > self.MT.min_header_height:
|
1018
1028
|
new_height = space_bot
|
1019
1029
|
if not only_increase or (only_increase and new_height > self.current_height):
|
1020
1030
|
self.set_height(new_height, set_TL=True)
|
@@ -1684,12 +1694,12 @@ class ColumnHeaders(tk.Canvas):
|
|
1684
1694
|
}
|
1685
1695
|
),
|
1686
1696
|
"sheet_ops": self.PAR.ops,
|
1687
|
-
"border_color": self.PAR.ops.
|
1697
|
+
"border_color": self.PAR.ops.header_selected_columns_bg,
|
1688
1698
|
"text": text,
|
1689
1699
|
"state": state,
|
1690
1700
|
"width": w,
|
1691
1701
|
"height": h,
|
1692
|
-
"show_border":
|
1702
|
+
"show_border": True,
|
1693
1703
|
"bg": bg,
|
1694
1704
|
"fg": fg,
|
1695
1705
|
"align": self.get_cell_align(c),
|
@@ -1735,31 +1745,34 @@ class ColumnHeaders(tk.Canvas):
|
|
1735
1745
|
|
1736
1746
|
# displayed indexes
|
1737
1747
|
def text_editor_newline_binding(self, r=0, c=0, event: object = None, check_lines=True):
|
1738
|
-
if self.height_resizing_enabled:
|
1739
|
-
|
1740
|
-
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1744
|
-
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1748
|
-
|
1749
|
-
|
1750
|
-
|
1751
|
-
|
1752
|
-
|
1753
|
-
|
1754
|
-
|
1755
|
-
|
1756
|
-
|
1757
|
-
|
1758
|
-
|
1759
|
-
|
1760
|
-
|
1761
|
-
|
1762
|
-
self.
|
1748
|
+
if not self.height_resizing_enabled:
|
1749
|
+
return
|
1750
|
+
curr_height = self.text_editor.window.winfo_height()
|
1751
|
+
if curr_height < self.MT.min_header_height:
|
1752
|
+
return
|
1753
|
+
if (
|
1754
|
+
not check_lines
|
1755
|
+
or self.MT.get_lines_cell_height(
|
1756
|
+
self.text_editor.window.get_num_lines() + 1,
|
1757
|
+
font=self.PAR.ops.header_font,
|
1758
|
+
)
|
1759
|
+
> curr_height
|
1760
|
+
):
|
1761
|
+
new_height = curr_height + self.MT.header_xtra_lines_increment
|
1762
|
+
space_bot = self.MT.get_space_bot(0)
|
1763
|
+
if new_height > space_bot:
|
1764
|
+
new_height = space_bot
|
1765
|
+
if new_height != curr_height:
|
1766
|
+
self.text_editor.window.config(height=new_height)
|
1767
|
+
self.set_height(new_height, set_TL=True)
|
1768
|
+
if self.dropdown.open and self.dropdown.get_coords() == c:
|
1769
|
+
win_h, anchor = self.get_dropdown_height_anchor(c, new_height)
|
1770
|
+
self.coords(
|
1771
|
+
self.dropdown.canvas_id,
|
1772
|
+
self.MT.col_positions[c],
|
1773
|
+
new_height - 1,
|
1774
|
+
)
|
1775
|
+
self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
1763
1776
|
|
1764
1777
|
def refresh_open_window_positions(self):
|
1765
1778
|
if self.text_editor.open:
|
@@ -1897,33 +1910,32 @@ class ColumnHeaders(tk.Canvas):
|
|
1897
1910
|
if not self.open_text_editor(event=event, c=c, dropdown=True):
|
1898
1911
|
return
|
1899
1912
|
win_h, anchor = self.get_dropdown_height_anchor(c)
|
1913
|
+
win_w = self.MT.col_positions[c + 1] - self.MT.col_positions[c] + 1
|
1900
1914
|
ypos = self.current_height - 1
|
1901
|
-
|
1902
|
-
|
1903
|
-
|
1904
|
-
|
1905
|
-
|
1906
|
-
self.
|
1907
|
-
|
1908
|
-
|
1915
|
+
reset_kwargs = {
|
1916
|
+
"r": 0,
|
1917
|
+
"c": c,
|
1918
|
+
"width": win_w,
|
1919
|
+
"height": win_h,
|
1920
|
+
"font": self.PAR.ops.header_font,
|
1921
|
+
"ops": self.PAR.ops,
|
1922
|
+
"outline_color": self.PAR.ops.popup_menu_fg,
|
1923
|
+
"align": self.get_cell_align(c),
|
1924
|
+
"values": kwargs["values"],
|
1925
|
+
}
|
1926
|
+
if self.dropdown.window:
|
1927
|
+
self.dropdown.window.reset(**reset_kwargs)
|
1928
|
+
self.itemconfig(self.dropdown.canvas_id, state="normal")
|
1909
1929
|
self.coords(self.dropdown.canvas_id, self.MT.col_positions[c], ypos)
|
1910
1930
|
else:
|
1911
1931
|
self.dropdown.window = self.PAR.dropdown_class(
|
1912
|
-
self.
|
1913
|
-
|
1914
|
-
c,
|
1915
|
-
width=self.MT.col_positions[c + 1] - self.MT.col_positions[c] + 1,
|
1916
|
-
height=win_h,
|
1917
|
-
font=self.PAR.ops.header_font,
|
1918
|
-
ops=self.PAR.ops,
|
1919
|
-
outline_color=self.PAR.ops.popup_menu_fg,
|
1920
|
-
values=kwargs["values"],
|
1932
|
+
self.winfo_toplevel(),
|
1933
|
+
**reset_kwargs,
|
1934
|
+
single_index="c",
|
1921
1935
|
close_dropdown_window=self.close_dropdown_window,
|
1922
1936
|
search_function=kwargs["search_function"],
|
1923
1937
|
arrowkey_RIGHT=self.MT.arrowkey_RIGHT,
|
1924
1938
|
arrowkey_LEFT=self.MT.arrowkey_LEFT,
|
1925
|
-
align="w",
|
1926
|
-
single_index="c",
|
1927
1939
|
)
|
1928
1940
|
self.dropdown.canvas_id = self.create_window(
|
1929
1941
|
(self.MT.col_positions[c], ypos),
|
tksheet/functions.py
CHANGED
@@ -1146,6 +1146,22 @@ def set_readonly(
|
|
1146
1146
|
return options
|
1147
1147
|
|
1148
1148
|
|
1149
|
+
def convert_align(align: str | None) -> str | None:
|
1150
|
+
if isinstance(align, str):
|
1151
|
+
a = align.lower()
|
1152
|
+
if a == "global":
|
1153
|
+
return None
|
1154
|
+
elif a in ("c", "center", "centre"):
|
1155
|
+
return "center"
|
1156
|
+
elif a in ("w", "west", "left"):
|
1157
|
+
return "w"
|
1158
|
+
elif a in ("e", "east", "right"):
|
1159
|
+
return "e"
|
1160
|
+
elif align is None:
|
1161
|
+
return None
|
1162
|
+
raise ValueError("Align must be one of the following values: c, center, w, west, left, e, east, right")
|
1163
|
+
|
1164
|
+
|
1149
1165
|
def set_align(
|
1150
1166
|
options: dict,
|
1151
1167
|
key: int | tuple[int, int],
|
tksheet/main_table.py
CHANGED
@@ -1803,7 +1803,7 @@ class MainTable(tk.Canvas):
|
|
1803
1803
|
cells=False,
|
1804
1804
|
):
|
1805
1805
|
self.hide_selection_box(item)
|
1806
|
-
elif r
|
1806
|
+
elif isinstance(r, int) and c is None and cell is None:
|
1807
1807
|
for item, box in self.get_selection_items(columns=False, cells=False):
|
1808
1808
|
r1, c1, r2, c2 = box.coords
|
1809
1809
|
if r >= r1 and r < r2:
|
@@ -1847,7 +1847,7 @@ class MainTable(tk.Canvas):
|
|
1847
1847
|
set_current=resel and to_sel >= r + 1 and to_sel < r2,
|
1848
1848
|
)
|
1849
1849
|
break
|
1850
|
-
elif c
|
1850
|
+
elif isinstance(c, int) and r is None and cell is None:
|
1851
1851
|
for item, box in self.get_selection_items(rows=False, cells=False):
|
1852
1852
|
r1, c1, r2, c2 = box.coords
|
1853
1853
|
if c >= c1 and c < c2:
|
@@ -1891,7 +1891,7 @@ class MainTable(tk.Canvas):
|
|
1891
1891
|
set_current=resel and to_sel >= c + 1 and to_sel < c2,
|
1892
1892
|
)
|
1893
1893
|
break
|
1894
|
-
elif (r
|
1894
|
+
elif (isinstance(r, int) and isinstance(c, int) and cell is None) or cell is not None:
|
1895
1895
|
if cell is not None:
|
1896
1896
|
r, c = cell[0], cell[1]
|
1897
1897
|
for item, box in self.get_selection_items(reverse=True):
|
@@ -1970,7 +1970,7 @@ class MainTable(tk.Canvas):
|
|
1970
1970
|
return
|
1971
1971
|
if self.selected.type_ == "rows":
|
1972
1972
|
r = self.selected.row
|
1973
|
-
if r
|
1973
|
+
if r and self.RI.row_selection_enabled:
|
1974
1974
|
if self.cell_completely_visible(r=r - 1, c=0):
|
1975
1975
|
self.RI.select_row(r - 1, redraw=True)
|
1976
1976
|
else:
|
@@ -1979,63 +1979,16 @@ class MainTable(tk.Canvas):
|
|
1979
1979
|
elif self.selected.type_ in ("cells", "columns"):
|
1980
1980
|
r = self.selected.row
|
1981
1981
|
c = self.selected.column
|
1982
|
-
if r
|
1982
|
+
if not r and self.CH.col_selection_enabled:
|
1983
1983
|
if not self.cell_completely_visible(r=r, c=0):
|
1984
|
-
self.see(r, c,
|
1985
|
-
elif r
|
1984
|
+
self.see(r, c, check_cell_visibility=False)
|
1985
|
+
elif r and (self.single_selection_enabled or self.toggle_selection_enabled):
|
1986
1986
|
if self.cell_completely_visible(r=r - 1, c=c):
|
1987
1987
|
self.select_cell(r - 1, c, redraw=True)
|
1988
1988
|
else:
|
1989
1989
|
self.select_cell(r - 1, c)
|
1990
1990
|
self.see(r - 1, c, keep_xscroll=True, check_cell_visibility=False)
|
1991
1991
|
|
1992
|
-
def arrowkey_RIGHT(self, event=None):
|
1993
|
-
if not self.selected:
|
1994
|
-
return
|
1995
|
-
if self.selected.type_ == "rows":
|
1996
|
-
r = self.selected.row
|
1997
|
-
if self.single_selection_enabled or self.toggle_selection_enabled:
|
1998
|
-
if self.cell_completely_visible(r=r, c=0):
|
1999
|
-
self.select_cell(r, 0, redraw=True)
|
2000
|
-
else:
|
2001
|
-
self.select_cell(r, 0)
|
2002
|
-
self.see(
|
2003
|
-
r,
|
2004
|
-
0,
|
2005
|
-
keep_yscroll=True,
|
2006
|
-
bottom_right_corner=True,
|
2007
|
-
check_cell_visibility=False,
|
2008
|
-
)
|
2009
|
-
elif self.selected.type_ == "columns":
|
2010
|
-
c = self.selected.column
|
2011
|
-
if c < len(self.col_positions) - 2 and self.CH.col_selection_enabled:
|
2012
|
-
if self.cell_completely_visible(r=0, c=c + 1):
|
2013
|
-
self.CH.select_col(c + 1, redraw=True)
|
2014
|
-
else:
|
2015
|
-
self.CH.select_col(c + 1)
|
2016
|
-
self.see(
|
2017
|
-
0,
|
2018
|
-
c + 1,
|
2019
|
-
keep_yscroll=True,
|
2020
|
-
bottom_right_corner=False if self.PAR.ops.arrow_key_down_right_scroll_page else True,
|
2021
|
-
check_cell_visibility=False,
|
2022
|
-
)
|
2023
|
-
else:
|
2024
|
-
r = self.selected.row
|
2025
|
-
c = self.selected.column
|
2026
|
-
if c < len(self.col_positions) - 2 and (self.single_selection_enabled or self.toggle_selection_enabled):
|
2027
|
-
if self.cell_completely_visible(r=r, c=c + 1):
|
2028
|
-
self.select_cell(r, c + 1, redraw=True)
|
2029
|
-
else:
|
2030
|
-
self.select_cell(r, c + 1)
|
2031
|
-
self.see(
|
2032
|
-
r,
|
2033
|
-
c + 1,
|
2034
|
-
keep_yscroll=True,
|
2035
|
-
bottom_right_corner=False if self.PAR.ops.arrow_key_down_right_scroll_page else True,
|
2036
|
-
check_cell_visibility=False,
|
2037
|
-
)
|
2038
|
-
|
2039
1992
|
def arrowkey_DOWN(self, event=None):
|
2040
1993
|
if not self.selected:
|
2041
1994
|
return
|
@@ -2071,15 +2024,17 @@ class MainTable(tk.Canvas):
|
|
2071
2024
|
elif self.selected.type_ == "columns":
|
2072
2025
|
c = self.selected.column
|
2073
2026
|
if self.single_selection_enabled or self.toggle_selection_enabled:
|
2074
|
-
if self.
|
2075
|
-
self.
|
2027
|
+
if self.selected.row == len(self.row_positions) - 2:
|
2028
|
+
r = self.selected.row
|
2076
2029
|
else:
|
2077
|
-
self.
|
2030
|
+
r = self.selected.row + 1
|
2031
|
+
if self.cell_completely_visible(r=r, c=c):
|
2032
|
+
self.select_cell(r, c, redraw=True)
|
2033
|
+
else:
|
2034
|
+
self.select_cell(r, c)
|
2078
2035
|
self.see(
|
2079
|
-
|
2036
|
+
r,
|
2080
2037
|
c,
|
2081
|
-
keep_xscroll=True,
|
2082
|
-
bottom_right_corner=True,
|
2083
2038
|
check_cell_visibility=False,
|
2084
2039
|
)
|
2085
2040
|
else:
|
@@ -2118,7 +2073,7 @@ class MainTable(tk.Canvas):
|
|
2118
2073
|
return
|
2119
2074
|
if self.selected.type_ == "columns":
|
2120
2075
|
c = self.selected.column
|
2121
|
-
if c
|
2076
|
+
if c and self.CH.col_selection_enabled:
|
2122
2077
|
if self.cell_completely_visible(r=0, c=c - 1):
|
2123
2078
|
self.CH.select_col(c - 1, redraw=True)
|
2124
2079
|
else:
|
@@ -2130,19 +2085,70 @@ class MainTable(tk.Canvas):
|
|
2130
2085
|
bottom_right_corner=True,
|
2131
2086
|
check_cell_visibility=False,
|
2132
2087
|
)
|
2088
|
+
elif self.selected.type_ == "rows" and self.selected.column:
|
2089
|
+
self.select_cell(self.selected.row, self.selected.column - 1)
|
2090
|
+
self.see(self.selected.row, self.selected.column, check_cell_visibility=True)
|
2133
2091
|
elif self.selected.type_ == "cells":
|
2134
2092
|
r = self.selected.row
|
2135
2093
|
c = self.selected.column
|
2136
|
-
if c
|
2137
|
-
|
2138
|
-
|
2139
|
-
elif c != 0 and (self.single_selection_enabled or self.toggle_selection_enabled):
|
2094
|
+
if not c and not self.cell_completely_visible(r=r, c=0):
|
2095
|
+
self.see(r, c, keep_yscroll=True, check_cell_visibility=False)
|
2096
|
+
elif c and (self.single_selection_enabled or self.toggle_selection_enabled):
|
2140
2097
|
if self.cell_completely_visible(r=r, c=c - 1):
|
2141
2098
|
self.select_cell(r, c - 1, redraw=True)
|
2142
2099
|
else:
|
2143
2100
|
self.select_cell(r, c - 1)
|
2144
2101
|
self.see(r, c - 1, keep_yscroll=True, check_cell_visibility=False)
|
2145
2102
|
|
2103
|
+
def arrowkey_RIGHT(self, event=None):
|
2104
|
+
if not self.selected:
|
2105
|
+
return
|
2106
|
+
if self.selected.type_ == "rows":
|
2107
|
+
r = self.selected.row
|
2108
|
+
if self.single_selection_enabled or self.toggle_selection_enabled:
|
2109
|
+
if self.selected.column == len(self.col_positions) - 2:
|
2110
|
+
c = self.selected.column
|
2111
|
+
else:
|
2112
|
+
c = self.selected.column + 1
|
2113
|
+
if self.cell_completely_visible(r=r, c=c):
|
2114
|
+
self.select_cell(r, c, redraw=True)
|
2115
|
+
else:
|
2116
|
+
self.select_cell(r, c)
|
2117
|
+
self.see(
|
2118
|
+
r,
|
2119
|
+
c,
|
2120
|
+
check_cell_visibility=False,
|
2121
|
+
)
|
2122
|
+
elif self.selected.type_ == "columns":
|
2123
|
+
c = self.selected.column
|
2124
|
+
if c < len(self.col_positions) - 2 and self.CH.col_selection_enabled:
|
2125
|
+
if self.cell_completely_visible(r=0, c=c + 1):
|
2126
|
+
self.CH.select_col(c + 1, redraw=True)
|
2127
|
+
else:
|
2128
|
+
self.CH.select_col(c + 1)
|
2129
|
+
self.see(
|
2130
|
+
0,
|
2131
|
+
c + 1,
|
2132
|
+
keep_yscroll=True,
|
2133
|
+
bottom_right_corner=False if self.PAR.ops.arrow_key_down_right_scroll_page else True,
|
2134
|
+
check_cell_visibility=False,
|
2135
|
+
)
|
2136
|
+
else:
|
2137
|
+
r = self.selected.row
|
2138
|
+
c = self.selected.column
|
2139
|
+
if c < len(self.col_positions) - 2 and (self.single_selection_enabled or self.toggle_selection_enabled):
|
2140
|
+
if self.cell_completely_visible(r=r, c=c + 1):
|
2141
|
+
self.select_cell(r, c + 1, redraw=True)
|
2142
|
+
else:
|
2143
|
+
self.select_cell(r, c + 1)
|
2144
|
+
self.see(
|
2145
|
+
r,
|
2146
|
+
c + 1,
|
2147
|
+
keep_yscroll=True,
|
2148
|
+
bottom_right_corner=False if self.PAR.ops.arrow_key_down_right_scroll_page else True,
|
2149
|
+
check_cell_visibility=False,
|
2150
|
+
)
|
2151
|
+
|
2146
2152
|
def key_bindings(self) -> None:
|
2147
2153
|
for widget in (self, self.RI, self.CH, self.TL):
|
2148
2154
|
for binding in self.PAR.ops.copy_bindings:
|
@@ -3376,7 +3382,7 @@ class MainTable(tk.Canvas):
|
|
3376
3382
|
def set_table_font_help(self):
|
3377
3383
|
self.table_txt_width, self.table_txt_height = self.get_txt_dimensions("|", self.PAR.ops.table_font)
|
3378
3384
|
self.table_half_txt_height = ceil(self.table_txt_height / 2)
|
3379
|
-
if self.table_half_txt_height % 2
|
3385
|
+
if not self.table_half_txt_height % 2:
|
3380
3386
|
self.table_first_ln_ins = self.table_half_txt_height + 2
|
3381
3387
|
else:
|
3382
3388
|
self.table_first_ln_ins = self.table_half_txt_height + 3
|
@@ -3404,7 +3410,7 @@ class MainTable(tk.Canvas):
|
|
3404
3410
|
def set_header_font_help(self):
|
3405
3411
|
self.header_txt_width, self.header_txt_height = self.get_txt_dimensions("|", self.PAR.ops.header_font)
|
3406
3412
|
self.header_half_txt_height = ceil(self.header_txt_height / 2)
|
3407
|
-
if self.header_half_txt_height % 2
|
3413
|
+
if not self.header_half_txt_height % 2:
|
3408
3414
|
self.header_first_ln_ins = self.header_half_txt_height + 2
|
3409
3415
|
else:
|
3410
3416
|
self.header_first_ln_ins = self.header_half_txt_height + 3
|
@@ -3435,7 +3441,7 @@ class MainTable(tk.Canvas):
|
|
3435
3441
|
def set_index_font_help(self):
|
3436
3442
|
self.index_txt_width, self.index_txt_height = self.get_txt_dimensions("|", self.PAR.ops.index_font)
|
3437
3443
|
self.index_half_txt_height = ceil(self.index_txt_height / 2)
|
3438
|
-
if self.index_half_txt_height % 2
|
3444
|
+
if not self.index_half_txt_height % 2:
|
3439
3445
|
self.index_first_ln_ins = self.index_half_txt_height + 2
|
3440
3446
|
else:
|
3441
3447
|
self.index_first_ln_ins = self.index_half_txt_height + 3
|
@@ -3562,19 +3568,22 @@ class MainTable(tk.Canvas):
|
|
3562
3568
|
else:
|
3563
3569
|
return False
|
3564
3570
|
|
3565
|
-
def set_all_cell_sizes_to_text(self,
|
3571
|
+
def set_all_cell_sizes_to_text(self, w: int | None = None) -> tuple[list[float], list[float]]:
|
3566
3572
|
min_column_width = int(self.min_column_width)
|
3567
3573
|
min_rh = int(self.min_row_height)
|
3568
|
-
w = min_column_width
|
3574
|
+
w = min_column_width if w is None else w
|
3569
3575
|
h = min_rh
|
3570
3576
|
rhs = defaultdict(lambda: int(min_rh))
|
3571
3577
|
cws = []
|
3572
|
-
|
3573
|
-
|
3574
|
-
|
3578
|
+
qconf = self.txt_measure_canvas.itemconfig
|
3579
|
+
qbbox = self.txt_measure_canvas.bbox
|
3580
|
+
qtxtm = self.txt_measure_canvas_text
|
3581
|
+
qtxth = self.table_txt_height
|
3582
|
+
qfont = self.PAR.ops.table_font
|
3575
3583
|
numrows = self.total_data_rows()
|
3584
|
+
numcols = self.total_data_cols()
|
3576
3585
|
if self.all_columns_displayed:
|
3577
|
-
itercols = range(
|
3586
|
+
itercols = range(numcols)
|
3578
3587
|
else:
|
3579
3588
|
itercols = self.displayed_columns
|
3580
3589
|
if self.all_rows_displayed:
|
@@ -3591,23 +3600,28 @@ class MainTable(tk.Canvas):
|
|
3591
3600
|
if h > rhs[datarn]:
|
3592
3601
|
rhs[datarn] = h
|
3593
3602
|
for datacn in itercols:
|
3594
|
-
|
3595
|
-
|
3596
|
-
iterrows = range(numrows)
|
3603
|
+
if (hw := self.CH.get_cell_dimensions(datacn)[0]) > w:
|
3604
|
+
w = hw
|
3597
3605
|
for datarn in iterrows:
|
3598
3606
|
txt = self.get_valid_cell_data_as_str(datarn, datacn, get_displayed=True)
|
3599
3607
|
if txt:
|
3600
|
-
|
3601
|
-
b =
|
3608
|
+
qconf(qtxtm, text=txt, font=qfont)
|
3609
|
+
b = qbbox(qtxtm)
|
3602
3610
|
tw = b[2] - b[0] + 7
|
3603
3611
|
h = b[3] - b[1] + 5
|
3604
3612
|
else:
|
3605
3613
|
tw = min_column_width
|
3606
3614
|
h = min_rh
|
3607
|
-
if self.get_cell_kwargs(
|
3608
|
-
datarn,
|
3615
|
+
if self.get_cell_kwargs(
|
3616
|
+
datarn,
|
3617
|
+
datacn,
|
3618
|
+
key="dropdown",
|
3619
|
+
) or self.get_cell_kwargs(
|
3620
|
+
datarn,
|
3621
|
+
datacn,
|
3622
|
+
key="checkbox",
|
3609
3623
|
):
|
3610
|
-
tw +=
|
3624
|
+
tw += qtxth
|
3611
3625
|
if tw > w:
|
3612
3626
|
w = tw
|
3613
3627
|
if h < min_rh:
|
@@ -3621,8 +3635,8 @@ class MainTable(tk.Canvas):
|
|
3621
3635
|
elif w > self.max_column_width:
|
3622
3636
|
w = int(self.max_column_width)
|
3623
3637
|
cws.append(w)
|
3624
|
-
self.set_row_positions(itr=
|
3625
|
-
self.set_col_positions(itr=
|
3638
|
+
self.set_row_positions(itr=rhs.values())
|
3639
|
+
self.set_col_positions(itr=cws)
|
3626
3640
|
self.recreate_all_selection_boxes()
|
3627
3641
|
return self.row_positions, self.col_positions
|
3628
3642
|
|
@@ -5689,6 +5703,7 @@ class MainTable(tk.Canvas):
|
|
5689
5703
|
c: int,
|
5690
5704
|
type_: Literal["cells", "rows", "columns"],
|
5691
5705
|
fill_iid: int,
|
5706
|
+
lower_selection_boxes: bool = True,
|
5692
5707
|
) -> int:
|
5693
5708
|
fill, outline = self.get_selected_box_bg_fg(type_=type_)
|
5694
5709
|
x1 = self.col_positions[c] + 1
|
@@ -5699,6 +5714,7 @@ class MainTable(tk.Canvas):
|
|
5699
5714
|
if self.PAR.ops.show_selected_cells_border:
|
5700
5715
|
fill = ""
|
5701
5716
|
else:
|
5717
|
+
fill = outline
|
5702
5718
|
outline = ""
|
5703
5719
|
iid = self.display_box(
|
5704
5720
|
x1,
|
@@ -5719,10 +5735,7 @@ class MainTable(tk.Canvas):
|
|
5719
5735
|
iid=iid,
|
5720
5736
|
fill_iid=fill_iid,
|
5721
5737
|
)
|
5722
|
-
if
|
5723
|
-
self.tag_raise(iid)
|
5724
|
-
else:
|
5725
|
-
self.tag_lower(iid)
|
5738
|
+
if lower_selection_boxes:
|
5726
5739
|
self.lower_selection_boxes()
|
5727
5740
|
return iid
|
5728
5741
|
|
@@ -5871,19 +5884,25 @@ class MainTable(tk.Canvas):
|
|
5871
5884
|
elif isinstance(set_current, tuple):
|
5872
5885
|
curr_r = set_current[0]
|
5873
5886
|
curr_c = set_current[1]
|
5874
|
-
self.create_currently_selected_box(curr_r, curr_c, type_, fill_iid)
|
5887
|
+
self.create_currently_selected_box(curr_r, curr_c, type_, fill_iid, lower_selection_boxes=False)
|
5875
5888
|
self.lower_selection_boxes()
|
5876
5889
|
if run_binding:
|
5877
5890
|
self.run_selection_binding(type_)
|
5878
5891
|
return fill_iid
|
5879
5892
|
|
5880
5893
|
def lower_selection_boxes(self) -> None:
|
5881
|
-
|
5882
|
-
self.
|
5883
|
-
|
5884
|
-
self.
|
5885
|
-
|
5886
|
-
self.
|
5894
|
+
if self.selected:
|
5895
|
+
if not self.PAR.ops.show_selected_cells_border:
|
5896
|
+
self.tag_lower(self.selected.iid)
|
5897
|
+
self.tag_lower("rows")
|
5898
|
+
self.tag_lower("columns")
|
5899
|
+
self.tag_lower("cells")
|
5900
|
+
self.RI.tag_lower("rows")
|
5901
|
+
self.RI.tag_lower("cells")
|
5902
|
+
self.CH.tag_lower("columns")
|
5903
|
+
self.CH.tag_lower("cells")
|
5904
|
+
if self.PAR.ops.show_selected_cells_border:
|
5905
|
+
self.tag_raise(self.selected.iid)
|
5887
5906
|
|
5888
5907
|
def recreate_selection_box(
|
5889
5908
|
self,
|
@@ -6418,12 +6437,12 @@ class MainTable(tk.Canvas):
|
|
6418
6437
|
}
|
6419
6438
|
),
|
6420
6439
|
"sheet_ops": self.PAR.ops,
|
6421
|
-
"border_color": self.PAR.ops.
|
6440
|
+
"border_color": self.PAR.ops.table_selected_box_cells_fg,
|
6422
6441
|
"text": text,
|
6423
6442
|
"state": state,
|
6424
6443
|
"width": w,
|
6425
6444
|
"height": h,
|
6426
|
-
"show_border":
|
6445
|
+
"show_border": True,
|
6427
6446
|
"bg": bg,
|
6428
6447
|
"fg": fg,
|
6429
6448
|
"align": self.get_cell_align(r, c),
|
@@ -6462,6 +6481,8 @@ class MainTable(tk.Canvas):
|
|
6462
6481
|
check_lines: bool = True,
|
6463
6482
|
) -> None:
|
6464
6483
|
curr_height = self.text_editor.window.winfo_height()
|
6484
|
+
if curr_height < self.min_row_height:
|
6485
|
+
return
|
6465
6486
|
if not check_lines or self.get_lines_cell_height(self.text_editor.window.get_num_lines() + 1) > curr_height:
|
6466
6487
|
new_height = curr_height + self.table_xtra_lines_increment
|
6467
6488
|
space_bot = self.get_space_bot(r)
|
@@ -6761,6 +6782,7 @@ class MainTable(tk.Canvas):
|
|
6761
6782
|
if not self.open_text_editor(event=event, r=r, c=c, dropdown=True):
|
6762
6783
|
return
|
6763
6784
|
win_h, anchor = self.get_dropdown_height_anchor(r, c)
|
6785
|
+
win_w = self.col_positions[c + 1] - self.col_positions[c] + 1
|
6764
6786
|
if anchor == "nw":
|
6765
6787
|
if kwargs["state"] == "normal":
|
6766
6788
|
ypos = self.row_positions[r] + self.text_editor.window.winfo_height() - 1
|
@@ -6768,33 +6790,29 @@ class MainTable(tk.Canvas):
|
|
6768
6790
|
ypos = self.row_positions[r + 1]
|
6769
6791
|
else:
|
6770
6792
|
ypos = self.row_positions[r]
|
6771
|
-
|
6772
|
-
|
6773
|
-
|
6774
|
-
|
6775
|
-
|
6776
|
-
self.
|
6777
|
-
self.
|
6778
|
-
|
6779
|
-
|
6793
|
+
reset_kwargs = {
|
6794
|
+
"r": r,
|
6795
|
+
"c": c,
|
6796
|
+
"width": win_w,
|
6797
|
+
"height": win_h,
|
6798
|
+
"font": self.PAR.ops.table_font,
|
6799
|
+
"ops": self.PAR.ops,
|
6800
|
+
"outline_color": self.get_selected_box_bg_fg(type_="cells")[1],
|
6801
|
+
"align": self.get_cell_align(r, c),
|
6802
|
+
"values": kwargs["values"],
|
6803
|
+
}
|
6804
|
+
if self.dropdown.window:
|
6805
|
+
self.dropdown.window.reset(**reset_kwargs)
|
6806
|
+
self.itemconfig(self.dropdown.canvas_id, state="normal")
|
6780
6807
|
self.coords(self.dropdown.canvas_id, self.col_positions[c], ypos)
|
6781
6808
|
else:
|
6782
6809
|
self.dropdown.window = self.PAR.dropdown_class(
|
6783
6810
|
self.winfo_toplevel(),
|
6784
|
-
|
6785
|
-
c,
|
6786
|
-
width=self.col_positions[c + 1] - self.col_positions[c] + 1,
|
6787
|
-
height=win_h,
|
6788
|
-
font=self.PAR.ops.table_font,
|
6789
|
-
ops=self.PAR.ops,
|
6790
|
-
outline_color=self.get_selected_box_bg_fg(type_="cells")[1],
|
6791
|
-
outline_thickness=2,
|
6792
|
-
values=kwargs["values"],
|
6811
|
+
**reset_kwargs,
|
6793
6812
|
close_dropdown_window=self.close_dropdown_window,
|
6794
6813
|
search_function=kwargs["search_function"],
|
6795
6814
|
arrowkey_RIGHT=self.arrowkey_RIGHT,
|
6796
6815
|
arrowkey_LEFT=self.arrowkey_LEFT,
|
6797
|
-
align="w", # self.get_cell_align(r, c)
|
6798
6816
|
)
|
6799
6817
|
self.dropdown.canvas_id = self.create_window(
|
6800
6818
|
(self.col_positions[c], ypos),
|
tksheet/row_index.py
CHANGED
@@ -266,7 +266,9 @@ class RowIndex(tk.Canvas):
|
|
266
266
|
if self.MT.selected and self.MT.selected.type_ == "rows":
|
267
267
|
r_to_sel, c_to_sel = self.MT.selected.row, self.MT.selected.column
|
268
268
|
self.MT.deselect("all", redraw=False)
|
269
|
-
self.being_drawn_item = self.MT.create_selection_box(
|
269
|
+
self.being_drawn_item = self.MT.create_selection_box(
|
270
|
+
*self.get_shift_select_box(r, r_to_sel), "rows"
|
271
|
+
)
|
270
272
|
self.MT.set_currently_selected(r_to_sel, c_to_sel, self.being_drawn_item)
|
271
273
|
else:
|
272
274
|
self.being_drawn_item = self.select_row(r, run_binding_func=False)
|
@@ -1756,9 +1758,9 @@ class RowIndex(tk.Canvas):
|
|
1756
1758
|
if not self.MT.see(r=r, c=0, keep_yscroll=True, check_cell_visibility=True):
|
1757
1759
|
self.MT.refresh()
|
1758
1760
|
x = 0
|
1759
|
-
y = self.MT.row_positions[r]
|
1761
|
+
y = self.MT.row_positions[r]
|
1760
1762
|
w = self.current_width + 1
|
1761
|
-
h = self.MT.row_positions[r + 1] - y
|
1763
|
+
h = self.MT.row_positions[r + 1] - y + 1
|
1762
1764
|
datarn = r if self.MT.all_rows_displayed else self.MT.displayed_rows[r]
|
1763
1765
|
if text is None:
|
1764
1766
|
text = self.get_cell_data(datarn, none_to_empty_str=True, redirect_int=True)
|
@@ -1774,12 +1776,12 @@ class RowIndex(tk.Canvas):
|
|
1774
1776
|
}
|
1775
1777
|
),
|
1776
1778
|
"sheet_ops": self.PAR.ops,
|
1777
|
-
"border_color": self.PAR.ops.
|
1779
|
+
"border_color": self.PAR.ops.index_selected_rows_bg,
|
1778
1780
|
"text": text,
|
1779
1781
|
"state": state,
|
1780
1782
|
"width": w,
|
1781
1783
|
"height": h,
|
1782
|
-
"show_border":
|
1784
|
+
"show_border": True,
|
1783
1785
|
"bg": bg,
|
1784
1786
|
"fg": fg,
|
1785
1787
|
"align": self.get_cell_align(r),
|
@@ -1809,42 +1811,45 @@ class RowIndex(tk.Canvas):
|
|
1809
1811
|
return True
|
1810
1812
|
|
1811
1813
|
def text_editor_newline_binding(self, r=0, c=0, event: object = None, check_lines=True):
|
1812
|
-
if self.height_resizing_enabled:
|
1813
|
-
|
1814
|
-
|
1815
|
-
|
1816
|
-
|
1817
|
-
|
1818
|
-
|
1819
|
-
|
1820
|
-
|
1821
|
-
|
1822
|
-
|
1823
|
-
|
1824
|
-
|
1825
|
-
|
1826
|
-
|
1827
|
-
|
1828
|
-
|
1829
|
-
|
1830
|
-
|
1831
|
-
|
1832
|
-
|
1833
|
-
|
1834
|
-
|
1835
|
-
|
1836
|
-
|
1837
|
-
|
1838
|
-
|
1839
|
-
|
1840
|
-
self.
|
1841
|
-
|
1842
|
-
|
1843
|
-
|
1844
|
-
|
1845
|
-
|
1846
|
-
|
1847
|
-
self.
|
1814
|
+
if not self.height_resizing_enabled:
|
1815
|
+
return
|
1816
|
+
curr_height = self.text_editor.window.winfo_height()
|
1817
|
+
if curr_height < self.MT.min_row_height:
|
1818
|
+
return
|
1819
|
+
if (
|
1820
|
+
not check_lines
|
1821
|
+
or self.MT.get_lines_cell_height(
|
1822
|
+
self.text_editor.window.get_num_lines() + 1,
|
1823
|
+
font=self.PAR.ops.index_font,
|
1824
|
+
)
|
1825
|
+
> curr_height
|
1826
|
+
):
|
1827
|
+
new_height = curr_height + self.MT.index_xtra_lines_increment
|
1828
|
+
space_bot = self.MT.get_space_bot(r)
|
1829
|
+
if new_height > space_bot:
|
1830
|
+
new_height = space_bot
|
1831
|
+
if new_height != curr_height:
|
1832
|
+
self.set_row_height(r, new_height)
|
1833
|
+
self.MT.refresh()
|
1834
|
+
self.text_editor.window.config(height=new_height)
|
1835
|
+
self.coords(self.text_editor.canvas_id, 0, self.MT.row_positions[r] + 1)
|
1836
|
+
if self.dropdown.open and self.dropdown.get_coords() == r:
|
1837
|
+
text_editor_h = self.text_editor.window.winfo_height()
|
1838
|
+
win_h, anchor = self.get_dropdown_height_anchor(r, text_editor_h)
|
1839
|
+
if anchor == "nw":
|
1840
|
+
self.coords(
|
1841
|
+
self.dropdown.canvas_id,
|
1842
|
+
self.MT.col_positions[c],
|
1843
|
+
self.MT.row_positions[r] + text_editor_h - 1,
|
1844
|
+
)
|
1845
|
+
self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
1846
|
+
elif anchor == "sw":
|
1847
|
+
self.coords(
|
1848
|
+
self.dropdown.canvas_id,
|
1849
|
+
self.MT.col_positions[c],
|
1850
|
+
self.MT.row_positions[r],
|
1851
|
+
)
|
1852
|
+
self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
1848
1853
|
|
1849
1854
|
def refresh_open_window_positions(self):
|
1850
1855
|
if self.text_editor.open:
|
@@ -1981,33 +1986,32 @@ class RowIndex(tk.Canvas):
|
|
1981
1986
|
if not self.open_text_editor(event=event, r=r, dropdown=True):
|
1982
1987
|
return
|
1983
1988
|
win_h, anchor = self.get_dropdown_height_anchor(r)
|
1989
|
+
win_w = self.current_width
|
1984
1990
|
ypos = self.MT.row_positions[r + 1]
|
1985
|
-
|
1986
|
-
|
1987
|
-
|
1988
|
-
|
1989
|
-
|
1990
|
-
self.
|
1991
|
-
|
1992
|
-
|
1991
|
+
reset_kwargs = {
|
1992
|
+
"r": r,
|
1993
|
+
"c": 0,
|
1994
|
+
"width": win_w,
|
1995
|
+
"height": win_h,
|
1996
|
+
"font": self.PAR.ops.index_font,
|
1997
|
+
"ops": self.PAR.ops,
|
1998
|
+
"outline_color": self.PAR.ops.popup_menu_fg,
|
1999
|
+
"align": self.get_cell_align(r),
|
2000
|
+
"values": kwargs["values"],
|
2001
|
+
}
|
2002
|
+
if self.dropdown.window:
|
2003
|
+
self.dropdown.window.reset(**reset_kwargs)
|
2004
|
+
self.itemconfig(self.dropdown.canvas_id, state="normal")
|
1993
2005
|
self.coords(self.dropdown.canvas_id, 0, ypos)
|
1994
2006
|
else:
|
1995
2007
|
self.dropdown.window = self.PAR.dropdown_class(
|
1996
|
-
self.
|
1997
|
-
|
1998
|
-
|
1999
|
-
width=self.current_width,
|
2000
|
-
height=win_h,
|
2001
|
-
font=self.PAR.ops.index_font,
|
2002
|
-
ops=self.PAR.ops,
|
2003
|
-
outline_color=self.PAR.ops.popup_menu_fg,
|
2004
|
-
values=kwargs["values"],
|
2008
|
+
self.winfo_toplevel(),
|
2009
|
+
**reset_kwargs,
|
2010
|
+
single_index="r",
|
2005
2011
|
close_dropdown_window=self.close_dropdown_window,
|
2006
2012
|
search_function=kwargs["search_function"],
|
2007
2013
|
arrowkey_RIGHT=self.MT.arrowkey_RIGHT,
|
2008
2014
|
arrowkey_LEFT=self.MT.arrowkey_LEFT,
|
2009
|
-
align="w",
|
2010
|
-
single_index="r",
|
2011
2015
|
)
|
2012
2016
|
self.dropdown.canvas_id = self.create_window(
|
2013
2017
|
(0, ypos),
|
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:
|
@@ -3169,7 +3155,7 @@ class Sheet(tk.Frame):
|
|
3169
3155
|
c1: int,
|
3170
3156
|
r2: int,
|
3171
3157
|
c2: int,
|
3172
|
-
type_:
|
3158
|
+
type_: Literal["cells", "rows", "columns", "cols"] = "cells",
|
3173
3159
|
) -> int:
|
3174
3160
|
return self.MT.create_selection_box(r1=r1, c1=c1, r2=r2, c2=c2, type_="columns" if type_ == "cols" else type_)
|
3175
3161
|
|
@@ -3179,9 +3165,9 @@ class Sheet(tk.Frame):
|
|
3179
3165
|
|
3180
3166
|
def deselect(
|
3181
3167
|
self,
|
3182
|
-
row: int | None |
|
3168
|
+
row: int | None | Literal["all"] = None,
|
3183
3169
|
column: int | None = None,
|
3184
|
-
cell: tuple | None = None,
|
3170
|
+
cell: tuple[int, int] | None = None,
|
3185
3171
|
redraw: bool = True,
|
3186
3172
|
) -> Sheet:
|
3187
3173
|
self.MT.deselect(r=row, c=column, cell=cell, redraw=False)
|
@@ -3216,8 +3202,12 @@ class Sheet(tk.Frame):
|
|
3216
3202
|
self.set_refresh_timer(redraw)
|
3217
3203
|
return self
|
3218
3204
|
|
3219
|
-
def set_all_cell_sizes_to_text(
|
3220
|
-
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)
|
3221
3211
|
self.set_refresh_timer(redraw)
|
3222
3212
|
return self.MT.row_positions, self.MT.col_positions
|
3223
3213
|
|
@@ -4580,8 +4570,9 @@ class Sheet(tk.Frame):
|
|
4580
4570
|
)
|
4581
4571
|
else:
|
4582
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)}
|
4583
4574
|
self.hide_rows(
|
4584
|
-
|
4575
|
+
rows,
|
4585
4576
|
redraw=False,
|
4586
4577
|
deselect_all=False,
|
4587
4578
|
data_indexes=True,
|
@@ -5526,13 +5517,13 @@ class Sheet(tk.Frame):
|
|
5526
5517
|
) -> None:
|
5527
5518
|
if isinstance(cells, dict):
|
5528
5519
|
for k, v in cells.items():
|
5529
|
-
set_align(self.MT.cell_options, k,
|
5520
|
+
set_align(self.MT.cell_options, k, convert_align(v))
|
5530
5521
|
elif cells:
|
5531
|
-
align =
|
5522
|
+
align = convert_align(align)
|
5532
5523
|
for k in cells:
|
5533
5524
|
set_align(self.MT.cell_options, k, align)
|
5534
5525
|
else:
|
5535
|
-
set_align(self.MT.cell_options, (row, column),
|
5526
|
+
set_align(self.MT.cell_options, (row, column), convert_align(align))
|
5536
5527
|
self.set_refresh_timer(redraw)
|
5537
5528
|
|
5538
5529
|
def align_rows(
|
@@ -5544,18 +5535,18 @@ class Sheet(tk.Frame):
|
|
5544
5535
|
) -> None:
|
5545
5536
|
if isinstance(rows, dict):
|
5546
5537
|
for k, v in rows.items():
|
5547
|
-
align =
|
5538
|
+
align = convert_align(v)
|
5548
5539
|
set_align(self.MT.row_options, k, align)
|
5549
5540
|
if align_index:
|
5550
5541
|
set_align(self.RI.cell_options, k, align)
|
5551
5542
|
elif is_iterable(rows):
|
5552
|
-
align =
|
5543
|
+
align = convert_align(align)
|
5553
5544
|
for k in rows:
|
5554
5545
|
set_align(self.MT.row_options, k, align)
|
5555
5546
|
if align_index:
|
5556
5547
|
set_align(self.RI.cell_options, k, align)
|
5557
5548
|
elif isinstance(rows, int):
|
5558
|
-
set_align(self.MT.row_options, rows,
|
5549
|
+
set_align(self.MT.row_options, rows, convert_align(align))
|
5559
5550
|
if align_index:
|
5560
5551
|
set_align(self.RI.cell_options, rows, align)
|
5561
5552
|
self.set_refresh_timer(redraw)
|
@@ -5569,18 +5560,18 @@ class Sheet(tk.Frame):
|
|
5569
5560
|
) -> None:
|
5570
5561
|
if isinstance(columns, dict):
|
5571
5562
|
for k, v in columns.items():
|
5572
|
-
align =
|
5563
|
+
align = convert_align(v)
|
5573
5564
|
set_align(self.MT.col_options, k, align)
|
5574
5565
|
if align_header:
|
5575
5566
|
set_align(self.CH.cell_options, k, align)
|
5576
5567
|
elif is_iterable(columns):
|
5577
|
-
align =
|
5568
|
+
align = convert_align(align)
|
5578
5569
|
for k in columns:
|
5579
5570
|
set_align(self.MT.col_options, k, align)
|
5580
5571
|
if align_header:
|
5581
5572
|
set_align(self.CH.cell_options, k, align)
|
5582
5573
|
elif isinstance(columns, int):
|
5583
|
-
set_align(self.MT.col_options, columns,
|
5574
|
+
set_align(self.MT.col_options, columns, convert_align(align))
|
5584
5575
|
if align_header:
|
5585
5576
|
set_align(self.CH.cell_options, columns, align)
|
5586
5577
|
self.set_refresh_timer(redraw)
|
@@ -5593,13 +5584,13 @@ class Sheet(tk.Frame):
|
|
5593
5584
|
) -> None:
|
5594
5585
|
if isinstance(columns, dict):
|
5595
5586
|
for k, v in columns.items():
|
5596
|
-
set_align(self.CH.cell_options, k,
|
5587
|
+
set_align(self.CH.cell_options, k, convert_align(v))
|
5597
5588
|
elif is_iterable(columns):
|
5598
|
-
align =
|
5589
|
+
align = convert_align(align)
|
5599
5590
|
for k in columns:
|
5600
5591
|
set_align(self.CH.cell_options, k, align)
|
5601
5592
|
elif isinstance(columns, int):
|
5602
|
-
set_align(self.CH.cell_options, columns,
|
5593
|
+
set_align(self.CH.cell_options, columns, convert_align(align))
|
5603
5594
|
self.set_refresh_timer(redraw)
|
5604
5595
|
|
5605
5596
|
def align_index(
|
@@ -5610,13 +5601,13 @@ class Sheet(tk.Frame):
|
|
5610
5601
|
) -> None:
|
5611
5602
|
if isinstance(rows, dict):
|
5612
5603
|
for k, v in rows.items():
|
5613
|
-
set_align(self.RI.cell_options, k,
|
5604
|
+
set_align(self.RI.cell_options, k, convert_align(v))
|
5614
5605
|
elif is_iterable(rows):
|
5615
|
-
align =
|
5606
|
+
align = convert_align(align)
|
5616
5607
|
for k in rows:
|
5617
5608
|
set_align(self.RI.cell_options, k, align)
|
5618
5609
|
elif isinstance(rows, int):
|
5619
|
-
set_align(self.RI.cell_options, rows,
|
5610
|
+
set_align(self.RI.cell_options, rows, convert_align(align))
|
5620
5611
|
self.set_refresh_timer(redraw)
|
5621
5612
|
|
5622
5613
|
def get_cell_alignments(self) -> dict:
|
@@ -6381,7 +6372,7 @@ class Dropdown(Sheet):
|
|
6381
6372
|
width: int | None = None,
|
6382
6373
|
height: int | None = None,
|
6383
6374
|
font: None | tuple[str, int, str] = None,
|
6384
|
-
outline_thickness: int =
|
6375
|
+
outline_thickness: int = 1,
|
6385
6376
|
values: list[object] = [],
|
6386
6377
|
close_dropdown_window: Callable | None = None,
|
6387
6378
|
search_function: Callable = dropdown_search_function,
|
@@ -6391,47 +6382,29 @@ class Dropdown(Sheet):
|
|
6391
6382
|
# False for using r, c
|
6392
6383
|
# "r" for r
|
6393
6384
|
# "c" for c
|
6394
|
-
single_index:
|
6385
|
+
single_index: Literal["r", "c"] | bool = False,
|
6395
6386
|
) -> None:
|
6396
6387
|
Sheet.__init__(
|
6397
6388
|
self,
|
6398
6389
|
parent=parent,
|
6399
6390
|
outline_thickness=outline_thickness,
|
6400
|
-
outline_color=outline_color,
|
6401
|
-
table_grid_fg=ops.popup_menu_fg,
|
6402
6391
|
show_horizontal_grid=True,
|
6403
6392
|
show_vertical_grid=False,
|
6404
6393
|
show_header=False,
|
6405
6394
|
show_row_index=False,
|
6406
6395
|
show_top_left=False,
|
6407
|
-
# alignments other than w for dropdown boxes are broken at the moment
|
6408
|
-
align="w",
|
6409
6396
|
empty_horizontal=0,
|
6410
6397
|
empty_vertical=0,
|
6411
6398
|
selected_rows_to_end_of_window=True,
|
6412
6399
|
horizontal_grid_to_end_of_window=True,
|
6413
6400
|
set_cell_sizes_on_zoom=True,
|
6414
6401
|
show_selected_cells_border=False,
|
6415
|
-
table_selected_cells_border_fg=ops.popup_menu_fg,
|
6416
|
-
table_selected_cells_bg=ops.popup_menu_highlight_bg,
|
6417
|
-
table_selected_rows_border_fg=ops.popup_menu_fg,
|
6418
|
-
table_selected_rows_bg=ops.popup_menu_highlight_bg,
|
6419
|
-
table_selected_rows_fg=ops.popup_menu_highlight_fg,
|
6420
|
-
width=width,
|
6421
|
-
height=height,
|
6422
|
-
font=font if font else self.ops.table_font,
|
6423
|
-
table_fg=ops.popup_menu_fg,
|
6424
|
-
table_bg=ops.popup_menu_bg,
|
6425
|
-
**{k: ops[k] for k in scrollbar_options_keys},
|
6426
6402
|
)
|
6427
6403
|
self.parent = parent
|
6428
6404
|
self.close_dropdown_window = close_dropdown_window
|
6429
6405
|
self.search_function = search_function
|
6430
6406
|
self.arrowkey_RIGHT = arrowkey_RIGHT
|
6431
6407
|
self.arrowkey_LEFT = arrowkey_LEFT
|
6432
|
-
self.r = r
|
6433
|
-
self.c = c
|
6434
|
-
self.row = -1
|
6435
6408
|
self.single_index = single_index
|
6436
6409
|
self.bind("<Motion>", self.mouse_motion)
|
6437
6410
|
self.bind("<ButtonPress-1>", self.b1)
|
@@ -6443,11 +6416,43 @@ class Dropdown(Sheet):
|
|
6443
6416
|
self.bind("<Prior>", self.arrowkey_UP)
|
6444
6417
|
self.bind("<Next>", self.arrowkey_DOWN)
|
6445
6418
|
self.bind("<Return>", self.b1)
|
6446
|
-
|
6447
|
-
|
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)
|
6448
6454
|
|
6449
6455
|
def arrowkey_UP(self, event: object = None) -> None:
|
6450
|
-
self.deselect("all")
|
6451
6456
|
if self.row > 0:
|
6452
6457
|
self.row -= 1
|
6453
6458
|
else:
|
@@ -6456,7 +6461,6 @@ class Dropdown(Sheet):
|
|
6456
6461
|
self.select_row(self.row)
|
6457
6462
|
|
6458
6463
|
def arrowkey_DOWN(self, event: object = None) -> None:
|
6459
|
-
self.deselect("all")
|
6460
6464
|
if len(self.MT.data) - 1 > self.row:
|
6461
6465
|
self.row += 1
|
6462
6466
|
self.see(self.row, 0, redraw=False)
|
@@ -6474,7 +6478,6 @@ class Dropdown(Sheet):
|
|
6474
6478
|
row = self.identify_row(event, exclude_index=True, allow_end=False)
|
6475
6479
|
if row is not None and row != self.row:
|
6476
6480
|
self.row = row
|
6477
|
-
self.deselect("all", redraw=False)
|
6478
6481
|
self.select_row(self.row)
|
6479
6482
|
|
6480
6483
|
def _reselect(self) -> None:
|
@@ -6514,7 +6517,12 @@ class Dropdown(Sheet):
|
|
6514
6517
|
return self.c
|
6515
6518
|
return self.r, self.c
|
6516
6519
|
|
6517
|
-
def values(
|
6520
|
+
def values(
|
6521
|
+
self,
|
6522
|
+
values: list = [],
|
6523
|
+
redraw: bool = True,
|
6524
|
+
width: int | None = None,
|
6525
|
+
) -> None:
|
6518
6526
|
self.set_sheet_data(
|
6519
6527
|
[[v] for v in values],
|
6520
6528
|
reset_col_positions=False,
|
@@ -6522,4 +6530,4 @@ class Dropdown(Sheet):
|
|
6522
6530
|
redraw=False,
|
6523
6531
|
verify=False,
|
6524
6532
|
)
|
6525
|
-
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.4.dist-info/RECORD
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
tksheet/__init__.py,sha256=RGoRjwh2ab3cYtclDJ-EoW9W_wdDZ2jJhWKAeeS7dyQ,1874
|
2
|
-
tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
|
3
|
-
tksheet/column_headers.py,sha256=CPP2a7LM4KA43ATm997rt3YL-EIhaeUycpVe-ev2fbA,99158
|
4
|
-
tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
|
5
|
-
tksheet/functions.py,sha256=7S4cQDIQ-1JqwQCgJSeVUA6bui_CK09zTHrtg2H7UeU,38714
|
6
|
-
tksheet/main_table.py,sha256=226s54StK5hBNpNigfO7R-DEuWdtdjCBRyqrJXecz3U,318142
|
7
|
-
tksheet/other_classes.py,sha256=Hjr7c0kD2_880xjtGuFn9gQ-7ED5kSiNahniBeXcf84,13604
|
8
|
-
tksheet/row_index.py,sha256=oov9iJmjONncmMnzV8dv23dgVKsBX0Fw4YWA28-Xl8o,104187
|
9
|
-
tksheet/sheet.py,sha256=z5kW5gdBVQMlwV8G-LI4nknINpGqSbyQ5M9FwX-SUI8,256939
|
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.4.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
|
17
|
-
tksheet-7.1.4.dist-info/METADATA,sha256=1zV1Vq3e2BEnWQCfQ1I3tu45765I0R7NF88K4pd-2gQ,6013
|
18
|
-
tksheet-7.1.4.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
19
|
-
tksheet-7.1.4.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
|
20
|
-
tksheet-7.1.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|