tksheet 7.1.4__tar.gz → 7.1.5__tar.gz
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-7.1.4/tksheet.egg-info → tksheet-7.1.5}/PKG-INFO +1 -1
- {tksheet-7.1.4 → tksheet-7.1.5}/pyproject.toml +1 -1
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/__init__.py +1 -1
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/column_headers.py +66 -54
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/functions.py +16 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/main_table.py +134 -116
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/row_index.py +64 -60
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/sheet.py +81 -73
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/text_editor.py +8 -6
- {tksheet-7.1.4 → tksheet-7.1.5/tksheet.egg-info}/PKG-INFO +1 -1
- {tksheet-7.1.4 → tksheet-7.1.5}/LICENSE.txt +0 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/README.md +0 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/setup.cfg +0 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/colors.py +0 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/formatters.py +0 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/other_classes.py +0 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/sheet_options.py +0 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/themes.py +0 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/top_left_rectangle.py +0 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/types.py +0 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet/vars.py +0 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet.egg-info/SOURCES.txt +0 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet.egg-info/dependency_links.txt +0 -0
- {tksheet-7.1.4 → tksheet-7.1.5}/tksheet.egg-info/top_level.txt +0 -0
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
|
|
6
6
|
name = "tksheet"
|
7
7
|
description = "Tkinter table / sheet widget"
|
8
8
|
readme = "README.md"
|
9
|
-
version = "7.1.
|
9
|
+
version = "7.1.5"
|
10
10
|
authors = [{ name = "ragardner", email = "github@ragardner.simplelogin.com" }]
|
11
11
|
requires-python = ">=3.8"
|
12
12
|
license = {file = "LICENSE.txt"}
|
@@ -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),
|
@@ -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],
|