tksheet 7.4.24__py3-none-any.whl → 7.5.1__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/row_index.py CHANGED
@@ -160,6 +160,9 @@ class RowIndex(tk.Canvas):
160
160
  self.MT.recreate_all_selection_boxes()
161
161
  self.current_width = new_width
162
162
 
163
+ def is_readonly(self, datarn: int) -> bool:
164
+ return datarn in self.cell_options and "readonly" in self.cell_options[datarn]
165
+
163
166
  def rc(self, event: Any) -> None:
164
167
  self.mouseclick_outside_editor_or_dropdown_all_canvases(inside=True)
165
168
  self.focus_set()
@@ -185,6 +188,8 @@ class RowIndex(tk.Canvas):
185
188
  try_binding(self.extra_rc_func, event)
186
189
  if popup_menu is not None:
187
190
  self.popup_menu_loc = r
191
+ self.MT.popup_menu_disable_edit_if_readonly(popup_menu)
192
+ self.MT.popup_menu_disable_undo_redo(popup_menu)
188
193
  popup_menu.tk_popup(event.x_root, event.y_root)
189
194
 
190
195
  def ctrl_b1_press(self, event: Any) -> None:
tksheet/sheet.py CHANGED
@@ -329,7 +329,7 @@ class Sheet(tk.Frame):
329
329
  index_align = "w"
330
330
  auto_resize_row_index = True
331
331
  paste_can_expand_y = False
332
- for k, v in locals().items():
332
+ for k, v in chain(locals().items(), kwargs.items()):
333
333
  if (xk := backwards_compatibility_keys.get(k, k)) in self.ops and v != self.ops[xk]:
334
334
  self.ops[xk] = v
335
335
  self.ops.from_clipboard_delimiters = (
@@ -784,15 +784,19 @@ class Sheet(tk.Frame):
784
784
  index_menu: bool = True,
785
785
  header_menu: bool = True,
786
786
  empty_space_menu: bool = True,
787
+ image: tk.PhotoImage | Literal[""] = "",
788
+ compound: Literal["top", "bottom", "left", "right", "none"] | None = None,
789
+ accelerator: str | None = None,
787
790
  ) -> Sheet:
788
- if label not in self.MT.extra_table_rc_menu_funcs and table_menu:
789
- self.MT.extra_table_rc_menu_funcs[label] = func
790
- if label not in self.MT.extra_index_rc_menu_funcs and index_menu:
791
- self.MT.extra_index_rc_menu_funcs[label] = func
792
- if label not in self.MT.extra_header_rc_menu_funcs and header_menu:
793
- self.MT.extra_header_rc_menu_funcs[label] = func
794
- if label not in self.MT.extra_empty_space_rc_menu_funcs and empty_space_menu:
795
- self.MT.extra_empty_space_rc_menu_funcs[label] = func
791
+ dct = {"command": func, "image": image, "accelerator": accelerator, "compound": compound}
792
+ if table_menu:
793
+ self.MT.extra_table_rc_menu_funcs[label] = dct
794
+ if index_menu:
795
+ self.MT.extra_index_rc_menu_funcs[label] = dct
796
+ if header_menu:
797
+ self.MT.extra_header_rc_menu_funcs[label] = dct
798
+ if empty_space_menu:
799
+ self.MT.extra_empty_space_rc_menu_funcs[label] = dct
796
800
  self.MT.create_rc_menus()
797
801
  return self
798
802
 
@@ -2699,6 +2703,11 @@ class Sheet(tk.Frame):
2699
2703
  def index_font(self, newfont: tuple[str, int, str] | None = None) -> tuple[str, int, str]:
2700
2704
  return self.MT.set_index_font(newfont)
2701
2705
 
2706
+ def popup_menu_font(self, newfont: tuple[str, int, str] | None = None) -> tuple[str, int, str]:
2707
+ if newfont:
2708
+ self.ops.popup_menu_font = FontTuple(*(newfont[0], int(round(newfont[1])), newfont[2]))
2709
+ return self.ops.popup_menu_font
2710
+
2702
2711
  def table_align(
2703
2712
  self,
2704
2713
  align: str | None = None,
@@ -4137,6 +4146,8 @@ class Sheet(tk.Frame):
4137
4146
  self.ops.paste_can_expand_y = kwargs["expand_sheet_if_paste_too_big"]
4138
4147
  if "show_top_left" in kwargs:
4139
4148
  self.show("top_left")
4149
+ if "popup_menu_font" in kwargs:
4150
+ self.popup_menu_font(self.ops.popup_menu_font)
4140
4151
  if "font" in kwargs:
4141
4152
  self.MT.set_table_font(kwargs["font"])
4142
4153
  elif "table_font" in kwargs:
@@ -4170,10 +4181,10 @@ class Sheet(tk.Frame):
4170
4181
  )
4171
4182
  if any(k in kwargs for k in scrollbar_options_keys):
4172
4183
  self.set_scrollbar_options()
4173
- self.MT.create_rc_menus()
4174
4184
  if "treeview" in kwargs:
4175
4185
  self.index_align("nw", redraw=False)
4176
4186
  self.ops.paste_can_expand_y = False
4187
+ self.MT.create_rc_menus()
4177
4188
  return self.set_refresh_timer(redraw)
4178
4189
 
4179
4190
  def set_scrollbar_options(self) -> Sheet:
tksheet/sheet_options.py CHANGED
@@ -1,6 +1,23 @@
1
1
  from __future__ import annotations
2
2
 
3
- from .constants import USER_OS, ctrl_key
3
+ import tkinter as tk
4
+
5
+ from .constants import ( # noqa: F401
6
+ ICON_ADD,
7
+ ICON_CLEAR,
8
+ ICON_COPY,
9
+ ICON_CUT,
10
+ ICON_DEL,
11
+ ICON_EDIT,
12
+ ICON_PASTE,
13
+ ICON_REDO,
14
+ ICON_SELECT_ALL,
15
+ ICON_SORT_ASC,
16
+ ICON_SORT_DESC,
17
+ ICON_UNDO,
18
+ USER_OS,
19
+ ctrl_key,
20
+ )
4
21
  from .other_classes import DotDict, FontTuple
5
22
  from .sorting import fast_sort_key, natural_sort_key, version_sort_key # noqa: F401
6
23
  from .themes import theme_light_blue
@@ -30,62 +47,111 @@ def new_sheet_options() -> DotDict:
30
47
  13 if USER_OS == "darwin" else 11,
31
48
  "normal",
32
49
  ),
33
- # cell editing
50
+ # edit header
34
51
  "edit_header_label": "Edit header",
35
52
  "edit_header_accelerator": "",
53
+ "edit_header_image": tk.PhotoImage(data=ICON_EDIT),
54
+ "edit_header_compound": "left",
55
+ # edit index
36
56
  "edit_index_label": "Edit index",
37
57
  "edit_index_accelerator": "",
58
+ "edit_index_image": tk.PhotoImage(data=ICON_EDIT),
59
+ "edit_index_compound": "left",
60
+ # edit cell
38
61
  "edit_cell_label": "Edit cell",
39
62
  "edit_cell_accelerator": "",
40
- # cut/copy/paste
63
+ "edit_cell_image": tk.PhotoImage(data=ICON_EDIT),
64
+ "edit_cell_compound": "left",
65
+ # cut
41
66
  "cut_label": "Cut",
42
67
  "cut_accelerator": "Ctrl+X",
68
+ "cut_image": tk.PhotoImage(data=ICON_CUT),
69
+ "cut_compound": "left",
70
+ # cut contents
43
71
  "cut_contents_label": "Cut contents",
44
72
  "cut_contents_accelerator": "Ctrl+X",
73
+ "cut_contents_image": tk.PhotoImage(data=ICON_CUT),
74
+ "cut_contents_compound": "left",
75
+ # copy
45
76
  "copy_label": "Copy",
46
77
  "copy_accelerator": "Ctrl+C",
78
+ "copy_image": tk.PhotoImage(data=ICON_COPY),
79
+ "copy_compound": "left",
80
+ # copy contents
47
81
  "copy_contents_label": "Copy contents",
48
82
  "copy_contents_accelerator": "Ctrl+C",
83
+ "copy_contents_image": tk.PhotoImage(data=ICON_COPY),
84
+ "copy_contents_compound": "left",
85
+ # paste
49
86
  "paste_label": "Paste",
50
87
  "paste_accelerator": "Ctrl+V",
51
- # clear/del
88
+ "paste_image": tk.PhotoImage(data=ICON_PASTE),
89
+ "paste_compound": "left",
90
+ # delete
52
91
  "delete_label": "Delete",
53
92
  "delete_accelerator": "Del",
93
+ "delete_image": tk.PhotoImage(data=ICON_CLEAR),
94
+ "delete_compound": "left",
95
+ # clear contents
54
96
  "clear_contents_label": "Clear contents",
55
97
  "clear_contents_accelerator": "Del",
56
- # del/insert columns
98
+ "clear_contents_image": tk.PhotoImage(data=ICON_CLEAR),
99
+ "clear_contents_compound": "left",
100
+ # del columns
57
101
  "delete_columns_label": "Delete columns",
58
102
  "delete_columns_accelerator": "",
103
+ "delete_columns_image": tk.PhotoImage(data=ICON_DEL),
104
+ "delete_columns_compound": "left",
105
+ # insert columns left
59
106
  "insert_columns_left_label": "Insert columns left",
60
107
  "insert_columns_left_accelerator": "",
61
- "insert_column_label": "Insert column",
62
- "insert_column_accelerator": "",
108
+ "insert_columns_left_image": tk.PhotoImage(data=ICON_ADD),
109
+ "insert_columns_left_compound": "left",
110
+ # insert columns right
63
111
  "insert_columns_right_label": "Insert columns right",
64
112
  "insert_columns_right_accelerator": "",
65
- # del/insert rows
113
+ "insert_columns_right_image": tk.PhotoImage(data=ICON_ADD),
114
+ "insert_columns_right_compound": "left",
115
+ # insert single column
116
+ "insert_column_label": "Insert column",
117
+ "insert_column_accelerator": "",
118
+ "insert_column_image": tk.PhotoImage(data=ICON_ADD),
119
+ "insert_column_compound": "left",
120
+ # del rows
66
121
  "delete_rows_label": "Delete rows",
67
122
  "delete_rows_accelerator": "",
123
+ "delete_rows_image": tk.PhotoImage(data=ICON_DEL),
124
+ "delete_rows_compound": "left",
125
+ # insert rows above
68
126
  "insert_rows_above_label": "Insert rows above",
69
127
  "insert_rows_above_accelerator": "",
128
+ "insert_rows_above_image": tk.PhotoImage(data=ICON_ADD),
129
+ "insert_rows_above_compound": "left",
130
+ # insert rows below
70
131
  "insert_rows_below_label": "Insert rows below",
71
132
  "insert_rows_below_accelerator": "",
133
+ "insert_rows_below_image": tk.PhotoImage(data=ICON_ADD),
134
+ "insert_rows_below_compound": "left",
135
+ # insert single row
72
136
  "insert_row_label": "Insert row",
73
137
  "insert_row_accelerator": "",
138
+ "insert_row_image": tk.PhotoImage(data=ICON_ADD),
139
+ "insert_row_compound": "left",
74
140
  # sorting
75
141
  # labels
76
- "sort_cells_label": "Sort ",
77
- "sort_cells_x_label": "Sort ",
78
- "sort_row_label": "Sort values ",
79
- "sort_column_label": "Sort values ",
80
- "sort_rows_label": "Sort rows ",
81
- "sort_columns_label": "Sort columns ",
142
+ "sort_cells_label": "Sort Asc.",
143
+ "sort_cells_x_label": "Sort row-wise Asc.",
144
+ "sort_row_label": "Sort values Asc.",
145
+ "sort_column_label": "Sort values Asc.",
146
+ "sort_rows_label": "Sort rows Asc.",
147
+ "sort_columns_label": "Sort columns Asc.",
82
148
  # reverse labels
83
- "sort_cells_reverse_label": "Sort ",
84
- "sort_cells_x_reverse_label": "Sort ",
85
- "sort_row_reverse_label": "Sort values ",
86
- "sort_column_reverse_label": "Sort values ",
87
- "sort_rows_reverse_label": "Sort rows ",
88
- "sort_columns_reverse_label": "Sort columns ",
149
+ "sort_cells_reverse_label": "Sort Desc.",
150
+ "sort_cells_x_reverse_label": "Sort row-wise Desc.",
151
+ "sort_row_reverse_label": "Sort values Desc.",
152
+ "sort_column_reverse_label": "Sort values Desc.",
153
+ "sort_rows_reverse_label": "Sort rows Desc.",
154
+ "sort_columns_reverse_label": "Sort columns Desc.",
89
155
  # accelerators
90
156
  "sort_cells_accelerator": "",
91
157
  "sort_cells_x_accelerator": "",
@@ -100,12 +166,49 @@ def new_sheet_options() -> DotDict:
100
166
  "sort_column_reverse_accelerator": "",
101
167
  "sort_rows_reverse_accelerator": "",
102
168
  "sort_columns_reverse_accelerator": "",
169
+ # images
170
+ "sort_cells_image": tk.PhotoImage(data=ICON_SORT_ASC),
171
+ "sort_cells_x_image": tk.PhotoImage(data=ICON_SORT_ASC),
172
+ "sort_row_image": tk.PhotoImage(data=ICON_SORT_ASC),
173
+ "sort_column_image": tk.PhotoImage(data=ICON_SORT_ASC),
174
+ "sort_rows_image": tk.PhotoImage(data=ICON_SORT_ASC),
175
+ "sort_columns_image": tk.PhotoImage(data=ICON_SORT_ASC),
176
+ # compounds
177
+ "sort_cells_compound": "left",
178
+ "sort_cells_x_compound": "left",
179
+ "sort_row_compound": "left",
180
+ "sort_column_compound": "left",
181
+ "sort_rows_compound": "left",
182
+ "sort_columns_compound": "left",
183
+ # reverse images
184
+ "sort_cells_reverse_image": tk.PhotoImage(data=ICON_SORT_DESC),
185
+ "sort_cells_x_reverse_image": tk.PhotoImage(data=ICON_SORT_DESC),
186
+ "sort_row_reverse_image": tk.PhotoImage(data=ICON_SORT_DESC),
187
+ "sort_column_reverse_image": tk.PhotoImage(data=ICON_SORT_DESC),
188
+ "sort_rows_reverse_image": tk.PhotoImage(data=ICON_SORT_DESC),
189
+ "sort_columns_reverse_image": tk.PhotoImage(data=ICON_SORT_DESC),
190
+ # reverse compounds
191
+ "sort_cells_reverse_compound": "left",
192
+ "sort_cells_x_reverse_compound": "left",
193
+ "sort_row_reverse_compound": "left",
194
+ "sort_column_reverse_compound": "left",
195
+ "sort_rows_reverse_compound": "left",
196
+ "sort_columns_reverse_compound": "left",
103
197
  # select all
104
198
  "select_all_label": "Select all",
105
199
  "select_all_accelerator": "Ctrl+A",
200
+ "select_all_image": tk.PhotoImage(data=ICON_SELECT_ALL),
201
+ "select_all_compound": "left",
106
202
  # undo
107
203
  "undo_label": "Undo",
108
204
  "undo_accelerator": "Ctrl+Z",
205
+ "undo_image": tk.PhotoImage(data=ICON_UNDO),
206
+ "undo_compound": "left",
207
+ # redo
208
+ "redo_label": "Redo",
209
+ "redo_accelerator": "Ctrl+Shift+Z",
210
+ "redo_image": tk.PhotoImage(data=ICON_REDO),
211
+ "redo_compound": "left",
109
212
  # bindings
110
213
  "copy_bindings": [
111
214
  f"<{ctrl_key}-c>",
tksheet/text_editor.py CHANGED
@@ -65,39 +65,58 @@ class TextEditorTkText(tk.Text):
65
65
  self.rc_popup_menu.add_command(
66
66
  label=sheet_ops.select_all_label,
67
67
  accelerator=sheet_ops.select_all_accelerator,
68
+ image=sheet_ops.select_all_image,
69
+ compound=sheet_ops.select_all_compound,
68
70
  command=self.select_all,
69
71
  **menu_kwargs,
70
72
  )
71
73
  self.rc_popup_menu.add_command(
72
74
  label=sheet_ops.cut_label,
73
75
  accelerator=sheet_ops.cut_accelerator,
76
+ image=sheet_ops.cut_image,
77
+ compound=sheet_ops.cut_compound,
74
78
  command=self.cut,
75
79
  **menu_kwargs,
76
80
  )
77
81
  self.rc_popup_menu.add_command(
78
82
  label=sheet_ops.copy_label,
79
83
  accelerator=sheet_ops.copy_accelerator,
84
+ image=sheet_ops.copy_image,
85
+ compound=sheet_ops.copy_compound,
80
86
  command=self.copy,
81
87
  **menu_kwargs,
82
88
  )
83
89
  self.rc_popup_menu.add_command(
84
90
  label=sheet_ops.paste_label,
85
91
  accelerator=sheet_ops.paste_accelerator,
92
+ image=sheet_ops.paste_image,
93
+ compound=sheet_ops.paste_compound,
86
94
  command=self.paste,
87
95
  **menu_kwargs,
88
96
  )
89
97
  self.rc_popup_menu.add_command(
90
98
  label=sheet_ops.undo_label,
91
99
  accelerator=sheet_ops.undo_accelerator,
100
+ image=sheet_ops.undo_image,
101
+ compound=sheet_ops.undo_compound,
92
102
  command=self.undo,
93
103
  **menu_kwargs,
94
104
  )
105
+ self.rc_popup_menu.add_command(
106
+ label=sheet_ops.redo_label,
107
+ accelerator=sheet_ops.redo_accelerator,
108
+ image=sheet_ops.redo_image,
109
+ compound=sheet_ops.redo_compound,
110
+ command=self.redo,
111
+ **menu_kwargs,
112
+ )
95
113
  self.align = align_helper[convert_align(align)]
96
114
  self.delete(1.0, "end")
97
115
  self.insert(1.0, text)
98
116
  self.yview_moveto(1)
99
117
  self.tag_configure("align", justify=self.align)
100
118
  self.tag_add("align", 1.0, "end")
119
+ self.edit_reset()
101
120
 
102
121
  def _proxy(self, command: Any, *args) -> Any:
103
122
  try:
@@ -140,8 +159,8 @@ class TextEditorTkText(tk.Text):
140
159
  return "break"
141
160
 
142
161
  def select_all(self, event: Any = None) -> Literal["break"]:
143
- self.tag_add(tk.SEL, "1.0", tk.END)
144
- self.mark_set(tk.INSERT, tk.END)
162
+ self.tag_add(tk.SEL, "1.0", "end-1c")
163
+ self.mark_set(tk.INSERT, "end-1c")
145
164
  # self.see(tk.INSERT)
146
165
  return "break"
147
166
 
@@ -164,6 +183,11 @@ class TextEditorTkText(tk.Text):
164
183
  self.event_generate("<KeyRelease>")
165
184
  return "break"
166
185
 
186
+ def redo(self, event: Any = None) -> Literal["break"]:
187
+ self.event_generate(f"<{ctrl_key}-Shift-z>")
188
+ self.event_generate("<KeyRelease>")
189
+ return "break"
190
+
167
191
 
168
192
  class TextEditor(tk.Frame):
169
193
  def __init__(
tksheet/themes.py CHANGED
@@ -183,8 +183,8 @@ theme_light_green: dict[str, str] = DotDict(
183
183
  theme_dark: dict[str, str] = DotDict(
184
184
  {
185
185
  "popup_menu_fg": "white",
186
- "popup_menu_bg": "gray15",
187
- "popup_menu_highlight_bg": "gray40",
186
+ "popup_menu_bg": "gray5",
187
+ "popup_menu_highlight_bg": "gray20",
188
188
  "popup_menu_highlight_fg": "white",
189
189
  "index_hidden_rows_expander_bg": "gray30",
190
190
  "header_hidden_columns_expander_bg": "gray30",
@@ -272,8 +272,8 @@ theme_dark: dict[str, str] = DotDict(
272
272
  theme_black: dict[str, str] = DotDict(
273
273
  {
274
274
  "popup_menu_fg": "white",
275
- "popup_menu_bg": "gray15",
276
- "popup_menu_highlight_bg": "gray40",
275
+ "popup_menu_bg": "gray5",
276
+ "popup_menu_highlight_bg": "gray20",
277
277
  "popup_menu_highlight_fg": "white",
278
278
  "index_hidden_rows_expander_bg": "gray30",
279
279
  "header_hidden_columns_expander_bg": "gray30",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tksheet
3
- Version: 7.4.24
3
+ Version: 7.5.1
4
4
  Summary: Tkinter table / sheet and treeview widget
5
5
  Author-email: ragardner <github@ragardner.simplelogin.com>
6
6
  License: Copyright (c) 2019 ragardner and open source contributors
@@ -23,6 +23,28 @@ License: Copyright (c) 2019 ragardner and open source contributors
23
23
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24
24
  SOFTWARE.
25
25
 
26
+ ---
27
+
28
+ ### Third-Party Assets: Icons from Lucide Icons
29
+
30
+ Icons used in tksheet are sourced from Lucide Icons (https://lucide.dev) and are licensed under the ISC License. This license applies only to the icon assets and not to the rest of the tksheet software, which remains under the MIT License above.
31
+
32
+ ISC License
33
+
34
+ Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2022.
35
+
36
+ Permission to use, copy, modify, and/or distribute this software for any
37
+ purpose with or without fee is hereby granted, provided that the above
38
+ copyright notice and this permission notice appear in all copies.
39
+
40
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
41
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
42
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
43
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
44
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
45
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
46
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
47
+
26
48
  Project-URL: Homepage, https://github.com/ragardner/tksheet
27
49
  Project-URL: Documentation, https://github.com/ragardner/tksheet/wiki/Version-7
28
50
  Project-URL: Changelog, https://github.com/ragardner/tksheet/blob/master/docs/CHANGELOG.md
@@ -0,0 +1,22 @@
1
+ tksheet/__init__.py,sha256=F7uCYLIy7aoFG0OTPxNeNrMTLdXNzic5D5I4xj3Azvs,2532
2
+ tksheet/colors.py,sha256=dHhmdFuQDlwohDHsAfT9VdrKoSl_R33L72a3HCin5zo,51591
3
+ tksheet/column_headers.py,sha256=S-5AQ-kmywDMsL061iWyHTVKNmikNBfHxML3zFnUD-o,103609
4
+ tksheet/constants.py,sha256=f-w31-cmBt2PNcCYWYnpWgi7vNzqpFqJKqZoE9HXlRs,25454
5
+ tksheet/find_window.py,sha256=P27qQsj9BxjALgfVfWV5tyRTDlnws-rCjnmZmoGzq1c,20917
6
+ tksheet/formatters.py,sha256=DGcRiMsDJnySNpQcjfiX84oJ7TmOSMdU6u9injIhA4g,10095
7
+ tksheet/functions.py,sha256=8d5T8UgNrJ3XmDFLGWXw19yVZQclLgMkinnTi5aDaLo,53163
8
+ tksheet/main_table.py,sha256=-Vt7N4r2Ijom1MNMf3c-hwGJbkJDlbs3s_lgkZ_YbME,378814
9
+ tksheet/other_classes.py,sha256=4VcAxiPH8SxuNbbLSve5ynqfnLwMUGSUs1ZQp0Yc1Gc,18177
10
+ tksheet/row_index.py,sha256=EHn6FJB6I5EawX0EPpz0lxqeBAPlT4EXCIh1XHB1R1g,141881
11
+ tksheet/sheet.py,sha256=j6mBRFjG_u-cWvMJs3mADevWCC01hFrnw32BOFGxixY,270167
12
+ tksheet/sheet_options.py,sha256=bB-XBs1sL2w9a47wSM6GD960ZKbvQuU2VvYIK2JRSjE,14567
13
+ tksheet/sorting.py,sha256=zcZPpRtP1h_xJGtGkG3E43H7deKQFnh9cMwZ1B2-aGc,17502
14
+ tksheet/text_editor.py,sha256=bkVRWYE3fCIo5xvwUBkmkBJ6nBGV2X1VsZ4LhQ5146I,8366
15
+ tksheet/themes.py,sha256=kUUCUmvgu8vUlzfVNk9a3BEbeBcU3asNwPB_u-OejCY,18471
16
+ tksheet/tksheet_types.py,sha256=1MjXR34EmvP1KfHlLTvKKVnf0VMz_LU_WOM2q4o5hfI,4598
17
+ tksheet/top_left_rectangle.py,sha256=A4wWL8PFl57Pn2Ek71rASCE1-bW844cTl7bgt4tLWzI,8499
18
+ tksheet-7.5.1.dist-info/licenses/LICENSE.txt,sha256=n1UvJHBr-AYNOf6ExICDsEggh9R7U4V4m_gH7FD-y-o,2305
19
+ tksheet-7.5.1.dist-info/METADATA,sha256=EkfOrjSukmE7ZUCsRf8FD0SC_PGFk5Z5hsaUWUcsync,9474
20
+ tksheet-7.5.1.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
21
+ tksheet-7.5.1.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
22
+ tksheet-7.5.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.1.0)
2
+ Generator: setuptools (80.3.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1,41 @@
1
+ Copyright (c) 2019 ragardner and open source contributors
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
20
+
21
+ ---
22
+
23
+ ### Third-Party Assets: Icons from Lucide Icons
24
+
25
+ Icons used in tksheet are sourced from Lucide Icons (https://lucide.dev) and are licensed under the ISC License. This license applies only to the icon assets and not to the rest of the tksheet software, which remains under the MIT License above.
26
+
27
+ ISC License
28
+
29
+ Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2022.
30
+
31
+ Permission to use, copy, modify, and/or distribute this software for any
32
+ purpose with or without fee is hereby granted, provided that the above
33
+ copyright notice and this permission notice appear in all copies.
34
+
35
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
36
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
37
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
38
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
39
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
40
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
41
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -1,22 +0,0 @@
1
- tksheet/__init__.py,sha256=WfT3DhWZu7l_NqGdTEofioaUu9jaN-lGhCci1VKEYGE,2327
2
- tksheet/colors.py,sha256=dHhmdFuQDlwohDHsAfT9VdrKoSl_R33L72a3HCin5zo,51591
3
- tksheet/column_headers.py,sha256=cP0RImb-EgHdVLSfNmU42k5GwCol7akKgMH6xq1sZfY,103339
4
- tksheet/constants.py,sha256=aiDvUSaPtl_TSNtRRJ_p87c9iTBz9ksMd5IsSXzz4Hk,13316
5
- tksheet/find_window.py,sha256=w6S0FZFLRNHiM57Oq97avALT_PctIBPegSxnkNUwkwk,19982
6
- tksheet/formatters.py,sha256=DGcRiMsDJnySNpQcjfiX84oJ7TmOSMdU6u9injIhA4g,10095
7
- tksheet/functions.py,sha256=gwf9X9ENHmoikjbXtoj-00uUVQGRJVffkeJHoR7yB2E,52993
8
- tksheet/main_table.py,sha256=22uUDpB1CBHRASvQUnEvhzsaZEXA580omFBJhzP98us,368944
9
- tksheet/other_classes.py,sha256=4VcAxiPH8SxuNbbLSve5ynqfnLwMUGSUs1ZQp0Yc1Gc,18177
10
- tksheet/row_index.py,sha256=8zuNU00ATmz5oumEqSyB_nOUAIuCS23mUfTpq3R1WOM,141611
11
- tksheet/sheet.py,sha256=0He8YJqBO6SpC3jbXsL3prXMGIR9RoZUyb3tAU5eFa0,269718
12
- tksheet/sheet_options.py,sha256=ob-XYgGfBoi2TaFAvUUmlWUkw9xB-yXmJw17gu9__Lw,9948
13
- tksheet/sorting.py,sha256=zcZPpRtP1h_xJGtGkG3E43H7deKQFnh9cMwZ1B2-aGc,17502
14
- tksheet/text_editor.py,sha256=rU8Fz0-ltkM63W9io2DoZJPyzUGzCc9Z0qBtc4D1H40,7404
15
- tksheet/themes.py,sha256=AoNAxibnQi04MN0Zpbn9-kyDnkiiV8TDNWP9FYjpuf0,18473
16
- tksheet/tksheet_types.py,sha256=1MjXR34EmvP1KfHlLTvKKVnf0VMz_LU_WOM2q4o5hfI,4598
17
- tksheet/top_left_rectangle.py,sha256=A4wWL8PFl57Pn2Ek71rASCE1-bW844cTl7bgt4tLWzI,8499
18
- tksheet-7.4.24.dist-info/licenses/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
19
- tksheet-7.4.24.dist-info/METADATA,sha256=Xmd2MJHPcpUFTYrtte0qAcBN1Wjwi8VODJkgBzHDbOY,8117
20
- tksheet-7.4.24.dist-info/WHEEL,sha256=wXxTzcEDnjrTwFYjLPcsW_7_XihufBwmpiBeiXNBGEA,91
21
- tksheet-7.4.24.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
22
- tksheet-7.4.24.dist-info/RECORD,,
@@ -1,19 +0,0 @@
1
- Copyright (c) 2019 ragardner and open source contributors
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining a copy
4
- of this software and associated documentation files (the "Software"), to deal
5
- in the Software without restriction, including without limitation the rights
6
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- copies of the Software, and to permit persons to whom the Software is
8
- furnished to do so, subject to the following conditions:
9
-
10
- The above copyright notice and this permission notice shall be included in all
11
- copies or substantial portions of the Software.
12
-
13
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
- SOFTWARE.