tksheet 7.4.7__py3-none-any.whl → 7.4.9__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 CHANGED
@@ -4,7 +4,7 @@
4
4
  tksheet - A Python tkinter table widget
5
5
  """
6
6
 
7
- __version__ = "7.4.7"
7
+ __version__ = "7.4.9"
8
8
 
9
9
  from .colors import (
10
10
  color_map,
tksheet/column_headers.py CHANGED
@@ -899,6 +899,7 @@ class ColumnHeaders(tk.Canvas):
899
899
  value=val,
900
900
  event_data=event_data,
901
901
  )
902
+ event_data = self.MT.bulk_edit_validation(event_data)
902
903
  if event_data["cells"]["table"]:
903
904
  if undo and self.MT.undo_enabled:
904
905
  self.MT.undo_stack.append(stored_event_dict(event_data))
@@ -959,6 +960,7 @@ class ColumnHeaders(tk.Canvas):
959
960
  move_data=True,
960
961
  create_selections=False,
961
962
  event_data=event_data,
963
+ manage_tree=False,
962
964
  )
963
965
  else:
964
966
  data_new_idxs, disp_new_idxs, _ = self.PAR.mapping_move_rows(
@@ -1092,7 +1094,7 @@ class ColumnHeaders(tk.Canvas):
1092
1094
  self.itemconfig(item, state="hidden")
1093
1095
 
1094
1096
  def get_cell_dimensions(self, datacn: int) -> tuple[int, int]:
1095
- txt = self.get_valid_cell_data_as_str(datacn, fix=False)
1097
+ txt = self.cell_str(datacn, fix=False)
1096
1098
  if txt:
1097
1099
  self.MT.txt_measure_canvas.itemconfig(
1098
1100
  self.MT.txt_measure_canvas_text,
@@ -1148,7 +1150,7 @@ class ColumnHeaders(tk.Canvas):
1148
1150
  elif isinstance(self.MT._headers, int):
1149
1151
  datarn = self.MT._headers
1150
1152
  for datacn in iterable:
1151
- if txt := self.MT.get_valid_cell_data_as_str(datarn, datacn, get_displayed=True):
1153
+ if txt := self.MT.cell_str(datarn, datacn, get_displayed=True):
1152
1154
  qconf(qtxtm, text=txt, font=qfont)
1153
1155
  b = qbbox(qtxtm)
1154
1156
  th = b[3] - b[1] + 5
@@ -1195,7 +1197,7 @@ class ColumnHeaders(tk.Canvas):
1195
1197
  qtxth = self.MT.table_txt_height
1196
1198
  qfont = self.ops.table_font
1197
1199
  for datarn in iterable:
1198
- if txt := self.MT.get_valid_cell_data_as_str(datarn, datacn, get_displayed=True):
1200
+ if txt := self.MT.cell_str(datarn, datacn, get_displayed=True):
1199
1201
  qconf(qtxtm, text=txt, font=qfont)
1200
1202
  b = qbbox(qtxtm)
1201
1203
  if (
@@ -1627,7 +1629,7 @@ class ColumnHeaders(tk.Canvas):
1627
1629
  or (align.endswith("n") and cleftgridln + 5 > scrollpos_right)
1628
1630
  ):
1629
1631
  continue
1630
- text = self.get_valid_cell_data_as_str(datacn, fix=False)
1632
+ text = self.cell_str(datacn, fix=False)
1631
1633
  if not text:
1632
1634
  continue
1633
1635
  max_lines = int((self.current_height - top - 2) / txt_h)
@@ -2221,7 +2223,7 @@ class ColumnHeaders(tk.Canvas):
2221
2223
  edited = True
2222
2224
  if edited and cell_resize and self.ops.cell_auto_resize_enabled:
2223
2225
  if self.height_resizing_enabled:
2224
- self.set_height_of_header_to_text(self.get_valid_cell_data_as_str(datacn, fix=False))
2226
+ self.set_height_of_header_to_text(self.cell_str(datacn, fix=False))
2225
2227
  self.set_col_width_run_binding(c)
2226
2228
  if redraw:
2227
2229
  self.MT.refresh()
@@ -2268,7 +2270,7 @@ class ColumnHeaders(tk.Canvas):
2268
2270
  redirect_int: bool = False,
2269
2271
  ) -> Any:
2270
2272
  if get_displayed:
2271
- return self.get_valid_cell_data_as_str(datacn, fix=False)
2273
+ return self.cell_str(datacn, fix=False)
2272
2274
  if redirect_int and isinstance(self.MT._headers, int): # internal use
2273
2275
  return self.MT.get_cell_data(self.MT._headers, datacn, none_to_empty_str=True)
2274
2276
  if (
@@ -2280,7 +2282,7 @@ class ColumnHeaders(tk.Canvas):
2280
2282
  return ""
2281
2283
  return self.MT._headers[datacn]
2282
2284
 
2283
- def get_valid_cell_data_as_str(self, datacn: int, fix: bool = True) -> str:
2285
+ def cell_str(self, datacn: int, fix: bool = True) -> str:
2284
2286
  kwargs = self.get_cell_kwargs(datacn, key="dropdown")
2285
2287
  if kwargs:
2286
2288
  if kwargs["text"] is not None:
@@ -2290,7 +2292,7 @@ class ColumnHeaders(tk.Canvas):
2290
2292
  if kwargs:
2291
2293
  return f"{kwargs['text']}"
2292
2294
  if isinstance(self.MT._headers, int):
2293
- return self.MT.get_valid_cell_data_as_str(self.MT._headers, datacn, get_displayed=True)
2295
+ return self.MT.cell_str(self.MT._headers, datacn, get_displayed=True)
2294
2296
  if fix:
2295
2297
  self.fix_header(datacn)
2296
2298
  try:
tksheet/constants.py CHANGED
@@ -150,3 +150,198 @@ bind_del_rows: set[str] = {
150
150
  "delete rows",
151
151
  "del rows",
152
152
  }
153
+
154
+ BINDING_TO_ATTR = {
155
+ "replace_all": ("MT", "extra_end_replace_all_func"),
156
+ # begin sort cells
157
+ "begin_sort_cells": ("MT", "extra_begin_sort_cells_func"),
158
+ # end sort cells
159
+ "sort_cells": ("MT", "extra_end_sort_cells_func"),
160
+ "end_sort_cells": ("MT", "extra_end_sort_cells_func"),
161
+ # begin sort rows
162
+ "begin_sort_rows": ("CH", "ch_extra_begin_sort_rows_func"),
163
+ # end sort rows
164
+ "sort_rows": ("CH", "ch_extra_end_sort_rows_func"),
165
+ "end_sort_rows": ("CH", "ch_extra_end_sort_rows_func"),
166
+ # begin sort cols
167
+ "begin_sort_columns": ("RI", "ri_extra_begin_sort_cols_func"),
168
+ # end sort cols
169
+ "sort_columns": ("RI", "ri_extra_end_sort_cols_func"),
170
+ "end_sort_columns": ("RI", "ri_extra_end_sort_cols_func"),
171
+ # begin copy
172
+ "begin_copy": ("MT", "extra_begin_ctrl_c_func"),
173
+ "begin_ctrl_c": ("MT", "extra_begin_ctrl_c_func"),
174
+ # end copy
175
+ "ctrl_c": ("MT", "extra_end_ctrl_c_func"),
176
+ "end_copy": ("MT", "extra_end_ctrl_c_func"),
177
+ "end_ctrl_c": ("MT", "extra_end_ctrl_c_func"),
178
+ "copy": ("MT", "extra_end_ctrl_c_func"),
179
+ # begin cut
180
+ "begin_cut": ("MT", "extra_begin_ctrl_x_func"),
181
+ "begin_ctrl_x": ("MT", "extra_begin_ctrl_x_func"),
182
+ # end cut
183
+ "ctrl_x": ("MT", "extra_end_ctrl_x_func"),
184
+ "end_cut": ("MT", "extra_end_ctrl_x_func"),
185
+ "end_ctrl_x": ("MT", "extra_end_ctrl_x_func"),
186
+ "cut": ("MT", "extra_end_ctrl_x_func"),
187
+ # begin paste
188
+ "begin_paste": ("MT", "extra_begin_ctrl_v_func"),
189
+ "begin_ctrl_v": ("MT", "extra_begin_ctrl_v_func"),
190
+ # end paste
191
+ "ctrl_v": ("MT", "extra_end_ctrl_v_func"),
192
+ "end_paste": ("MT", "extra_end_ctrl_v_func"),
193
+ "end_ctrl_v": ("MT", "extra_end_ctrl_v_func"),
194
+ "paste": ("MT", "extra_end_ctrl_v_func"),
195
+ # begin undo/redo
196
+ "begin_undo": ("MT", "extra_begin_ctrl_z_func"),
197
+ "begin_ctrl_z": ("MT", "extra_begin_ctrl_z_func"),
198
+ # end undo/redo
199
+ "ctrl_z": ("MT", "extra_end_ctrl_z_func"),
200
+ "end_undo": ("MT", "extra_end_ctrl_z_func"),
201
+ "end_ctrl_z": ("MT", "extra_end_ctrl_z_func"),
202
+ "undo": ("MT", "extra_end_ctrl_z_func"),
203
+ # begin del key
204
+ "begin_delete_key": ("MT", "extra_begin_delete_key_func"),
205
+ "begin_delete": ("MT", "extra_begin_delete_key_func"),
206
+ # end del key
207
+ "delete_key": ("MT", "extra_end_delete_key_func"),
208
+ "end_delete": ("MT", "extra_end_delete_key_func"),
209
+ "end_delete_key": ("MT", "extra_end_delete_key_func"),
210
+ "delete": ("MT", "extra_end_delete_key_func"),
211
+ # begin edit table
212
+ "begin_edit_cell": ("MT", "extra_begin_edit_cell_func"),
213
+ "begin_edit_table": ("MT", "extra_begin_edit_cell_func"),
214
+ # end edit table
215
+ "end_edit_cell": ("MT", "extra_end_edit_cell_func"),
216
+ "edit_cell": ("MT", "extra_end_edit_cell_func"),
217
+ "edit_table": ("MT", "extra_end_edit_cell_func"),
218
+ # begin edit header
219
+ "begin_edit_header": ("CH", "extra_begin_edit_cell_func"),
220
+ # end edit header
221
+ "end_edit_header": ("CH", "extra_end_edit_cell_func"),
222
+ "edit_header": ("CH", "extra_end_edit_cell_func"),
223
+ # begin edit index
224
+ "begin_edit_index": ("RI", "extra_begin_edit_cell_func"),
225
+ # end edit index
226
+ "end_edit_index": ("RI", "extra_end_edit_cell_func"),
227
+ "edit_index": ("RI", "extra_end_edit_cell_func"),
228
+ # begin move rows
229
+ "begin_row_index_drag_drop": ("RI", "ri_extra_begin_drag_drop_func"),
230
+ "begin_move_rows": ("RI", "ri_extra_begin_drag_drop_func"),
231
+ # end move rows
232
+ "row_index_drag_drop": ("RI", "ri_extra_end_drag_drop_func"),
233
+ "move_rows": ("RI", "ri_extra_end_drag_drop_func"),
234
+ "end_move_rows": ("RI", "ri_extra_end_drag_drop_func"),
235
+ "end_row_index_drag_drop": ("RI", "ri_extra_end_drag_drop_func"),
236
+ # begin move cols
237
+ "begin_column_header_drag_drop": ("CH", "ch_extra_begin_drag_drop_func"),
238
+ "begin_move_columns": ("CH", "ch_extra_begin_drag_drop_func"),
239
+ # end move cols
240
+ "column_header_drag_drop": ("CH", "ch_extra_end_drag_drop_func"),
241
+ "move_columns": ("CH", "ch_extra_end_drag_drop_func"),
242
+ "end_move_columns": ("CH", "ch_extra_end_drag_drop_func"),
243
+ "end_column_header_drag_drop": ("CH", "ch_extra_end_drag_drop_func"),
244
+ # begin del rows
245
+ "begin_rc_delete_row": ("MT", "extra_begin_del_rows_rc_func"),
246
+ "begin_delete_rows": ("MT", "extra_begin_del_rows_rc_func"),
247
+ # end del rows
248
+ "rc_delete_row": ("MT", "extra_end_del_rows_rc_func"),
249
+ "end_rc_delete_row": ("MT", "extra_end_del_rows_rc_func"),
250
+ "end_delete_rows": ("MT", "extra_end_del_rows_rc_func"),
251
+ "delete_rows": ("MT", "extra_end_del_rows_rc_func"),
252
+ # begin del cols
253
+ "begin_rc_delete_column": ("MT", "extra_begin_del_cols_rc_func"),
254
+ "begin_delete_columns": ("MT", "extra_begin_del_cols_rc_func"),
255
+ # end del cols
256
+ "rc_delete_column": ("MT", "extra_end_del_cols_rc_func"),
257
+ "end_rc_delete_column": ("MT", "extra_end_del_cols_rc_func"),
258
+ "end_delete_columns": ("MT", "extra_end_del_cols_rc_func"),
259
+ "delete_columns": ("MT", "extra_end_del_cols_rc_func"),
260
+ # begin add cols
261
+ "begin_rc_insert_column": ("MT", "extra_begin_insert_cols_rc_func"),
262
+ "begin_insert_column": ("MT", "extra_begin_insert_cols_rc_func"),
263
+ "begin_insert_columns": ("MT", "extra_begin_insert_cols_rc_func"),
264
+ "begin_add_column": ("MT", "extra_begin_insert_cols_rc_func"),
265
+ "begin_rc_add_column": ("MT", "extra_begin_insert_cols_rc_func"),
266
+ "begin_add_columns": ("MT", "extra_begin_insert_cols_rc_func"),
267
+ # end add cols
268
+ "rc_insert_column": ("MT", "extra_end_insert_cols_rc_func"),
269
+ "end_rc_insert_column": ("MT", "extra_end_insert_cols_rc_func"),
270
+ "end_insert_column": ("MT", "extra_end_insert_cols_rc_func"),
271
+ "end_insert_columns": ("MT", "extra_end_insert_cols_rc_func"),
272
+ "rc_add_column": ("MT", "extra_end_insert_cols_rc_func"),
273
+ "end_rc_add_column": ("MT", "extra_end_insert_cols_rc_func"),
274
+ "end_add_column": ("MT", "extra_end_insert_cols_rc_func"),
275
+ "end_add_columns": ("MT", "extra_end_insert_cols_rc_func"),
276
+ "add_columns": ("MT", "extra_end_insert_cols_rc_func"),
277
+ # begin add rows
278
+ "begin_rc_insert_row": ("MT", "extra_begin_insert_rows_rc_func"),
279
+ "begin_insert_row": ("MT", "extra_begin_insert_rows_rc_func"),
280
+ "begin_insert_rows": ("MT", "extra_begin_insert_rows_rc_func"),
281
+ "begin_rc_add_row": ("MT", "extra_begin_insert_rows_rc_func"),
282
+ "begin_add_row": ("MT", "extra_begin_insert_rows_rc_func"),
283
+ "begin_add_rows": ("MT", "extra_begin_insert_rows_rc_func"),
284
+ # end add rows
285
+ "rc_insert_row": ("MT", "extra_end_insert_rows_rc_func"),
286
+ "end_rc_insert_row": ("MT", "extra_end_insert_rows_rc_func"),
287
+ "end_insert_row": ("MT", "extra_end_insert_rows_rc_func"),
288
+ "end_insert_rows": ("MT", "extra_end_insert_rows_rc_func"),
289
+ "rc_add_row": ("MT", "extra_end_insert_rows_rc_func"),
290
+ "end_rc_add_row": ("MT", "extra_end_insert_rows_rc_func"),
291
+ "end_add_row": ("MT", "extra_end_insert_rows_rc_func"),
292
+ "end_add_rows": ("MT", "extra_end_insert_rows_rc_func"),
293
+ "add_rows": ("MT", "extra_end_insert_rows_rc_func"),
294
+ # resize
295
+ "row_height_resize": ("RI", "row_height_resize_func"),
296
+ "column_width_resize": ("CH", "column_width_resize_func"),
297
+ # selection
298
+ "cell_select": ("MT", "selection_binding_func"),
299
+ "select_all": ("MT", "select_all_binding_func"),
300
+ "all_select": ("MT", "select_all_binding_func"),
301
+ "row_select": ("RI", "selection_binding_func"),
302
+ "column_select": ("CH", "selection_binding_func"),
303
+ "col_select": ("CH", "selection_binding_func"),
304
+ "drag_select_cells": ("MT", "drag_selection_binding_func"),
305
+ "drag_select_rows": ("RI", "drag_selection_binding_func"),
306
+ "drag_select_columns": ("CH", "drag_selection_binding_func"),
307
+ "shift_cell_select": ("MT", "shift_selection_binding_func"),
308
+ "shift_row_select": ("RI", "shift_selection_binding_func"),
309
+ "shift_column_select": ("CH", "shift_selection_binding_func"),
310
+ "ctrl_cell_select": ("MT", "ctrl_selection_binding_func"),
311
+ "ctrl_row_select": ("RI", "ctrl_selection_binding_func"),
312
+ "ctrl_column_select": ("CH", "ctrl_selection_binding_func"),
313
+ "deselect": ("MT", "deselection_binding_func"),
314
+ }
315
+
316
+ MODIFIED_BINDINGS = [
317
+ ("MT", "extra_end_replace_all_func"),
318
+ ("MT", "extra_end_sort_cells_func"),
319
+ ("CH", "ch_extra_end_sort_rows_func"),
320
+ ("RI", "ri_extra_end_sort_cols_func"),
321
+ ("MT", "extra_end_ctrl_c_func"),
322
+ ("MT", "extra_end_ctrl_x_func"),
323
+ ("MT", "extra_end_ctrl_v_func"),
324
+ ("MT", "extra_end_ctrl_z_func"),
325
+ ("MT", "extra_end_delete_key_func"),
326
+ ("RI", "ri_extra_end_drag_drop_func"),
327
+ ("CH", "ch_extra_end_drag_drop_func"),
328
+ ("MT", "extra_end_del_rows_rc_func"),
329
+ ("MT", "extra_end_del_cols_rc_func"),
330
+ ("MT", "extra_end_insert_cols_rc_func"),
331
+ ("MT", "extra_end_insert_rows_rc_func"),
332
+ ("MT", "extra_end_edit_cell_func"),
333
+ ("CH", "extra_end_edit_cell_func"),
334
+ ("RI", "extra_end_edit_cell_func"),
335
+ ]
336
+
337
+ visited = set()
338
+ ALL_BINDINGS = []
339
+ SELECT_BINDINGS = []
340
+ for o, b in BINDING_TO_ATTR.values():
341
+ if b not in visited:
342
+ ALL_BINDINGS.append((o, b))
343
+ visited.add(b)
344
+ if "select" in b and (o, b) not in visited:
345
+ SELECT_BINDINGS.append((o, b))
346
+ visited.add((o, b))
347
+ visited = set()