tksheet 7.1.21__py3-none-any.whl → 7.1.23__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/main_table.py CHANGED
@@ -67,6 +67,7 @@ from .functions import (
67
67
  mod_span,
68
68
  mod_span_widget,
69
69
  move_elements_by_mapping,
70
+ new_tk_event,
70
71
  pickle_obj,
71
72
  pickled_event_dict,
72
73
  rounded_box_coords,
@@ -99,6 +100,8 @@ from .vars import (
99
100
  ctrl_key,
100
101
  rc_binding,
101
102
  symbols_set,
103
+ text_editor_close_bindings,
104
+ text_editor_newline_bindings,
102
105
  text_editor_to_unbind,
103
106
  val_modifying_options,
104
107
  )
@@ -127,6 +130,15 @@ class MainTable(tk.Canvas):
127
130
  self.synced_scrolls = set()
128
131
  self.dropdown = DropdownStorage()
129
132
  self.text_editor = TextEditorStorage()
133
+ self.event_linker = {
134
+ "<<Copy>>": self.ctrl_c,
135
+ "<<Cut>>": self.ctrl_x,
136
+ "<<Paste>>": self.ctrl_v,
137
+ "<<Delete>>": self.delete_key,
138
+ "<<Undo>>": self.undo,
139
+ "<<Redo>>": self.redo,
140
+ "<<SelectAll>>": self.select_all,
141
+ }
130
142
 
131
143
  self.disp_ctrl_outline = {}
132
144
  self.disp_text = {}
@@ -341,6 +353,13 @@ class MainTable(tk.Canvas):
341
353
  self.basic_bindings()
342
354
  self.create_rc_menus()
343
355
 
356
+ def event_generate(self, *args, **kwargs) -> None:
357
+ for arg in args:
358
+ if arg in self.event_linker:
359
+ self.event_linker[arg]()
360
+ else:
361
+ super().event_generate(*args, **kwargs)
362
+
344
363
  def refresh(self, event: object = None) -> None:
345
364
  self.main_table_redraw_grid_and_text(True, True)
346
365
 
@@ -532,10 +551,11 @@ class MainTable(tk.Canvas):
532
551
  if not self.selected:
533
552
  return
534
553
  event_data = event_dict(
554
+ name="begin_ctrl_c",
535
555
  sheet=self.PAR.name,
556
+ widget=self,
536
557
  selected=self.selected,
537
558
  )
538
- event_data["eventname"] = "begin_ctrl_c"
539
559
  boxes, maxrows = self.get_ctrl_x_c_boxes()
540
560
  event_data["selection_boxes"] = boxes
541
561
  s, writer = self.io_csv_writer()
@@ -573,7 +593,8 @@ class MainTable(tk.Canvas):
573
593
  else:
574
594
  self.clipboard_append(s.getvalue())
575
595
  self.update_idletasks()
576
- try_binding(self.extra_end_ctrl_c_func, event_data, "end_ctrl_c")
596
+ try_binding(self.extra_end_ctrl_c_func, event_data, new_name="end_ctrl_c")
597
+ self.PAR.emit_event("<<Copy>>", EventDataDict({**event_data, **{"eventname": "copy"}}))
577
598
  return event_data
578
599
 
579
600
  def ctrl_x(self, event=None, validation: bool = True) -> None | EventDataDict:
@@ -582,6 +603,7 @@ class MainTable(tk.Canvas):
582
603
  event_data = event_dict(
583
604
  name="edit_table",
584
605
  sheet=self.PAR.name,
606
+ widget=self,
585
607
  selected=self.selected,
586
608
  )
587
609
  boxes, maxrows = self.get_ctrl_x_c_boxes()
@@ -657,6 +679,7 @@ class MainTable(tk.Canvas):
657
679
  if event_data["cells"]["table"]:
658
680
  try_binding(self.extra_end_ctrl_x_func, event_data, "end_ctrl_x")
659
681
  self.sheet_modified(event_data)
682
+ self.PAR.emit_event("<<Cut>>", event_data)
660
683
  return event_data
661
684
 
662
685
  def ctrl_v(self, event: object = None, validation: bool = True) -> None | EventDataDict:
@@ -667,6 +690,7 @@ class MainTable(tk.Canvas):
667
690
  event_data = event_dict(
668
691
  name="edit_table",
669
692
  sheet=self.PAR.name,
693
+ widget=self,
670
694
  selected=self.selected,
671
695
  )
672
696
  if self.selected:
@@ -893,6 +917,7 @@ class MainTable(tk.Canvas):
893
917
  if event_data["cells"]["table"] or event_data["added"]["rows"] or event_data["added"]["columns"]:
894
918
  try_binding(self.extra_end_ctrl_v_func, event_data, "end_ctrl_v")
895
919
  self.sheet_modified(event_data)
920
+ self.PAR.emit_event("<<Paste>>", event_data)
896
921
  return event_data
897
922
 
898
923
  def delete_key(self, event: object = None, validation: bool = True) -> None | EventDataDict:
@@ -901,6 +926,7 @@ class MainTable(tk.Canvas):
901
926
  event_data = event_dict(
902
927
  name="edit_table",
903
928
  sheet=self.PAR.name,
929
+ widget=self,
904
930
  selected=self.selected,
905
931
  )
906
932
  boxes = self.get_boxes()
@@ -931,6 +957,7 @@ class MainTable(tk.Canvas):
931
957
  try_binding(self.extra_end_delete_key_func, event_data, "end_delete")
932
958
  self.refresh()
933
959
  self.sheet_modified(event_data)
960
+ self.PAR.emit_event("<<Delete>>", event_data)
934
961
  return event_data
935
962
 
936
963
  def event_data_set_cell(self, datarn: int, datacn: int, value: object, event_data: dict) -> EventDataDict:
@@ -958,11 +985,18 @@ class MainTable(tk.Canvas):
958
985
  data_new_idxs = get_new_indexes(seqlen=totalcols, move_to=move_to, to_move=to_move)
959
986
  elif not self.all_columns_displayed and not data_indexes:
960
987
  data_new_idxs = get_new_indexes(seqlen=len(self.displayed_columns), move_to=move_to, to_move=to_move)
961
- data_old_idxs = dict(zip(data_new_idxs.values(), data_new_idxs))
988
+ moved = {self.displayed_columns[i] for i in to_move}
962
989
  data_new_idxs = dict(
963
- zip(
964
- move_elements_by_mapping(self.displayed_columns, data_new_idxs, data_old_idxs),
965
- self.displayed_columns,
990
+ filter(
991
+ lambda tup: tup[0] in moved,
992
+ zip(
993
+ move_elements_by_mapping(
994
+ self.displayed_columns,
995
+ data_new_idxs,
996
+ dict(zip(data_new_idxs.values(), data_new_idxs)),
997
+ ),
998
+ self.displayed_columns,
999
+ ),
966
1000
  )
967
1001
  )
968
1002
  return data_new_idxs, dict(zip(data_new_idxs.values(), data_new_idxs)), totalcols, disp_new_idxs
@@ -974,6 +1008,7 @@ class MainTable(tk.Canvas):
974
1008
  totalcols: int | None,
975
1009
  disp_new_idxs: None | dict[int, int] = None,
976
1010
  move_data: bool = True,
1011
+ move_widths: bool = True,
977
1012
  create_selections: bool = True,
978
1013
  data_indexes: bool = False,
979
1014
  event_data: EventDataDict | None = None,
@@ -988,6 +1023,7 @@ class MainTable(tk.Canvas):
988
1023
  event_data = event_dict(
989
1024
  name="move_columns",
990
1025
  sheet=self.PAR.name,
1026
+ widget=self,
991
1027
  boxes=self.get_boxes(),
992
1028
  selected=self.selected,
993
1029
  )
@@ -997,7 +1033,7 @@ class MainTable(tk.Canvas):
997
1033
  }
998
1034
  event_data["options"] = self.pickle_options()
999
1035
  event_data["named_spans"] = {k: span.pickle_self() for k, span in self.named_spans.items()}
1000
- if disp_new_idxs and (not data_indexes or self.all_columns_displayed):
1036
+ if move_widths and disp_new_idxs and (not data_indexes or self.all_columns_displayed):
1001
1037
  self.deselect("all", run_binding=False, redraw=False)
1002
1038
  self.set_col_positions(
1003
1039
  itr=move_elements_by_mapping(
@@ -1189,11 +1225,18 @@ class MainTable(tk.Canvas):
1189
1225
  data_new_idxs = get_new_indexes(seqlen=totalrows, move_to=move_to, to_move=to_move)
1190
1226
  elif not self.all_rows_displayed and not data_indexes:
1191
1227
  data_new_idxs = get_new_indexes(seqlen=len(self.displayed_rows), move_to=move_to, to_move=to_move)
1192
- data_old_idxs = dict(zip(data_new_idxs.values(), data_new_idxs))
1228
+ moved = {self.displayed_rows[i] for i in to_move}
1193
1229
  data_new_idxs = dict(
1194
- zip(
1195
- move_elements_by_mapping(self.displayed_rows, data_new_idxs, data_old_idxs),
1196
- self.displayed_rows,
1230
+ filter(
1231
+ lambda tup: tup[0] in moved,
1232
+ zip(
1233
+ move_elements_by_mapping(
1234
+ self.displayed_rows,
1235
+ data_new_idxs,
1236
+ dict(zip(data_new_idxs.values(), data_new_idxs)),
1237
+ ),
1238
+ self.displayed_rows,
1239
+ ),
1197
1240
  )
1198
1241
  )
1199
1242
  return data_new_idxs, dict(zip(data_new_idxs.values(), data_new_idxs)), totalrows, disp_new_idxs
@@ -1205,6 +1248,7 @@ class MainTable(tk.Canvas):
1205
1248
  totalrows: int | None,
1206
1249
  disp_new_idxs: None | dict[int, int] = None,
1207
1250
  move_data: bool = True,
1251
+ move_heights: bool = True,
1208
1252
  create_selections: bool = True,
1209
1253
  data_indexes: bool = False,
1210
1254
  event_data: EventDataDict | None = None,
@@ -1221,6 +1265,7 @@ class MainTable(tk.Canvas):
1221
1265
  event_data = event_dict(
1222
1266
  name="move_rows",
1223
1267
  sheet=self.PAR.name,
1268
+ widget=self,
1224
1269
  boxes=self.get_boxes(),
1225
1270
  selected=self.selected,
1226
1271
  )
@@ -1230,7 +1275,7 @@ class MainTable(tk.Canvas):
1230
1275
  }
1231
1276
  event_data["options"] = self.pickle_options()
1232
1277
  event_data["named_spans"] = {k: span.pickle_self() for k, span in self.named_spans.items()}
1233
- if disp_new_idxs and (not data_indexes or self.all_rows_displayed):
1278
+ if move_heights and disp_new_idxs and (not data_indexes or self.all_rows_displayed):
1234
1279
  self.deselect("all", run_binding=False, redraw=False)
1235
1280
  self.set_row_positions(
1236
1281
  itr=move_elements_by_mapping(
@@ -1424,7 +1469,9 @@ class MainTable(tk.Canvas):
1424
1469
  event_data = self.undo_modification_invert_event(modification)
1425
1470
  self.redo_stack.append(pickled_event_dict(event_data))
1426
1471
  self.undo_stack.pop()
1472
+ self.sheet_modified(event_data, purge_redo=False)
1427
1473
  try_binding(self.extra_end_ctrl_z_func, event_data, "end_undo")
1474
+ self.PAR.emit_event("<<Undo>>", event_data)
1428
1475
  return event_data
1429
1476
 
1430
1477
  def redo(self, event: object = None) -> None | EventDataDict:
@@ -1436,7 +1483,9 @@ class MainTable(tk.Canvas):
1436
1483
  event_data = self.undo_modification_invert_event(modification, name="redo")
1437
1484
  self.undo_stack.append(pickled_event_dict(event_data))
1438
1485
  self.redo_stack.pop()
1486
+ self.sheet_modified(event_data, purge_redo=False)
1439
1487
  try_binding(self.extra_end_ctrl_z_func, event_data, "end_redo")
1488
+ self.PAR.emit_event("<<Redo>>", event_data)
1440
1489
  return event_data
1441
1490
 
1442
1491
  def sheet_modified(self, event_data: EventDataDict, purge_redo: bool = True) -> None:
@@ -1490,6 +1539,7 @@ class MainTable(tk.Canvas):
1490
1539
  event_data = event_dict(
1491
1540
  name=modification["eventname"],
1492
1541
  sheet=self.PAR.name,
1542
+ widget=self,
1493
1543
  )
1494
1544
  event_data["selection_boxes"] = modification["selection_boxes"]
1495
1545
  event_data["selected"] = modification["selected"]
@@ -1648,7 +1698,6 @@ class MainTable(tk.Canvas):
1648
1698
  redraw=False,
1649
1699
  )
1650
1700
 
1651
- self.sheet_modified(event_data, purge_redo=False)
1652
1701
  self.refresh()
1653
1702
  return event_data
1654
1703
 
@@ -1775,7 +1824,9 @@ class MainTable(tk.Canvas):
1775
1824
  self.select_all_binding_func(
1776
1825
  self.get_select_event(being_drawn_item=self.being_drawn_item),
1777
1826
  )
1778
- self.PAR.emit_event("<<SheetSelect>>", data=self.get_select_event(self.being_drawn_item))
1827
+ event_data = self.get_select_event(self.being_drawn_item)
1828
+ self.PAR.emit_event("<<SheetSelect>>", data=event_data)
1829
+ self.PAR.emit_event("<<SelectAll>>", data=event_data)
1779
1830
 
1780
1831
  def select_cell(
1781
1832
  self,
@@ -3530,6 +3581,7 @@ class MainTable(tk.Canvas):
3530
3581
  keep_formatting: bool = True,
3531
3582
  ) -> object:
3532
3583
  if isinstance(newdataref, (list, tuple)):
3584
+ self.hide_dropdown_editor_all_canvases()
3533
3585
  self.data = newdataref
3534
3586
  if keep_formatting:
3535
3587
  self.reapply_formatting()
@@ -3633,7 +3685,7 @@ class MainTable(tk.Canvas):
3633
3685
  else:
3634
3686
  return False
3635
3687
 
3636
- def set_all_cell_sizes_to_text(self, w: int | None = None) -> tuple[list[float], list[float]]:
3688
+ def set_all_cell_sizes_to_text(self, w: int | None = None, slim: bool = False) -> tuple[list[float], list[float]]:
3637
3689
  min_column_width = int(self.min_column_width)
3638
3690
  min_rh = int(self.min_row_height)
3639
3691
  w = min_column_width if w is None else w
@@ -3664,6 +3716,7 @@ class MainTable(tk.Canvas):
3664
3716
  h = int(self.max_row_height)
3665
3717
  if h > rhs[datarn]:
3666
3718
  rhs[datarn] = h
3719
+ added_w_space = 1 if slim else 7
3667
3720
  for datacn in itercols:
3668
3721
  if (hw := self.CH.get_cell_dimensions(datacn)[0]) > w:
3669
3722
  w = hw
@@ -3672,7 +3725,7 @@ class MainTable(tk.Canvas):
3672
3725
  if txt:
3673
3726
  qconf(qtxtm, text=txt, font=qfont)
3674
3727
  b = qbbox(qtxtm)
3675
- tw = b[2] - b[0] + 7
3728
+ tw = b[2] - b[0] + added_w_space
3676
3729
  h = b[3] - b[1] + 5
3677
3730
  else:
3678
3731
  tw = min_column_width
@@ -4323,6 +4376,7 @@ class MainTable(tk.Canvas):
4323
4376
  event_data = event_dict(
4324
4377
  name="add_columns",
4325
4378
  sheet=self.PAR.name,
4379
+ widget=self,
4326
4380
  boxes=self.get_boxes(),
4327
4381
  selected=self.selected,
4328
4382
  )
@@ -4454,6 +4508,7 @@ class MainTable(tk.Canvas):
4454
4508
  event_data = event_dict(
4455
4509
  name="add_rows",
4456
4510
  sheet=self.PAR.name,
4511
+ widget=self,
4457
4512
  boxes=self.get_boxes(),
4458
4513
  selected=self.selected,
4459
4514
  )
@@ -4627,6 +4682,7 @@ class MainTable(tk.Canvas):
4627
4682
  event_data = event_dict(
4628
4683
  name="delete_columns",
4629
4684
  sheet=self.PAR.name,
4685
+ widget=self,
4630
4686
  boxes=self.get_boxes(),
4631
4687
  selected=self.selected,
4632
4688
  )
@@ -4681,6 +4737,7 @@ class MainTable(tk.Canvas):
4681
4737
  event_data = event_dict(
4682
4738
  name="delete_rows",
4683
4739
  sheet=self.PAR.name,
4740
+ widget=self,
4684
4741
  boxes=self.get_boxes(),
4685
4742
  selected=self.selected,
4686
4743
  )
@@ -5224,7 +5281,7 @@ class MainTable(tk.Canvas):
5224
5281
  for i, w in enumerate(widths):
5225
5282
  if i not in diffs:
5226
5283
  widths[i] -= change
5227
- self.set_col_positions(itr=widths)
5284
+ self.col_positions = list(accumulate(chain([0], widths)))
5228
5285
  if self.PAR.ops.auto_resize_rows and self.allow_auto_resize_rows and row_pos_exists:
5229
5286
  max_h = can_height - self.PAR.ops.empty_vertical
5230
5287
  if self.PAR.ops.auto_resize_rows < self.min_row_height:
@@ -5249,30 +5306,31 @@ class MainTable(tk.Canvas):
5249
5306
  if i not in diffs:
5250
5307
  heights[i] -= change
5251
5308
  self.row_positions = list(accumulate(chain([0], heights)))
5252
- last_col_line_pos = self.col_positions[-1] + 1
5253
- last_row_line_pos = self.row_positions[-1] + 1
5254
- if can_width >= last_col_line_pos + self.PAR.ops.empty_horizontal and self.PAR.xscroll_showing:
5255
- self.PAR.xscroll.grid_forget()
5256
- self.PAR.xscroll_showing = False
5257
- elif (
5258
- can_width < last_col_line_pos + self.PAR.ops.empty_horizontal
5259
- and not self.PAR.xscroll_showing
5260
- and not self.PAR.xscroll_disabled
5261
- and can_height > 40
5262
- ):
5263
- self.PAR.xscroll.grid(row=2, column=0, columnspan=2, sticky="nswe")
5264
- self.PAR.xscroll_showing = True
5265
- if can_height >= last_row_line_pos + self.PAR.ops.empty_vertical and self.PAR.yscroll_showing:
5309
+ if self.PAR.ops.auto_resize_row_index is not True:
5310
+ if can_width >= self.col_positions[-1] + self.PAR.ops.empty_horizontal and self.PAR.xscroll_showing:
5311
+ self.PAR.xscroll.grid_forget()
5312
+ self.PAR.xscroll_showing = False
5313
+ elif (
5314
+ can_width < self.col_positions[-1] + self.PAR.ops.empty_horizontal
5315
+ and not self.PAR.xscroll_showing
5316
+ and not self.PAR.xscroll_disabled
5317
+ and can_height > 40
5318
+ ):
5319
+ self.PAR.xscroll.grid(row=2, column=0, columnspan=2, sticky="nswe")
5320
+ self.PAR.xscroll_showing = True
5321
+ if can_height >= self.row_positions[-1] + self.PAR.ops.empty_vertical and self.PAR.yscroll_showing:
5266
5322
  self.PAR.yscroll.grid_forget()
5267
5323
  self.PAR.yscroll_showing = False
5268
5324
  elif (
5269
- can_height < last_row_line_pos + self.PAR.ops.empty_vertical
5325
+ can_height < self.row_positions[-1] + self.PAR.ops.empty_vertical
5270
5326
  and not self.PAR.yscroll_showing
5271
5327
  and not self.PAR.yscroll_disabled
5272
5328
  and can_width > 40
5273
5329
  ):
5274
5330
  self.PAR.yscroll.grid(row=0, column=2, rowspan=3, sticky="nswe")
5275
5331
  self.PAR.yscroll_showing = True
5332
+ last_col_line_pos = self.col_positions[-1] + 1
5333
+ last_row_line_pos = self.row_positions[-1] + 1
5276
5334
  scrollregion = (
5277
5335
  0,
5278
5336
  0,
@@ -5297,15 +5355,15 @@ class MainTable(tk.Canvas):
5297
5355
  start_col = bisect_left(self.col_positions, scrollpos_left)
5298
5356
  end_col = bisect_right(self.col_positions, scrollpos_right)
5299
5357
  changed_w = False
5300
- if redraw_row_index and self.show_index:
5358
+ if self.PAR.ops.auto_resize_row_index and redraw_row_index and self.show_index:
5301
5359
  changed_w = self.RI.auto_set_index_width(
5302
5360
  end_row=end_row - 1,
5303
5361
  only_rows=[self.datarn(r) for r in range(start_row if not start_row else start_row - 1, end_row - 1)],
5304
5362
  )
5363
+ if resized_cols or resized_rows or changed_w:
5364
+ self.recreate_all_selection_boxes()
5305
5365
  if changed_w:
5306
5366
  return False
5307
- if resized_cols or resized_rows:
5308
- self.recreate_all_selection_boxes()
5309
5367
  self.hidd_text.update(self.disp_text)
5310
5368
  self.disp_text = {}
5311
5369
  self.hidd_high.update(self.disp_high)
@@ -6435,31 +6493,25 @@ class MainTable(tk.Canvas):
6435
6493
  self.itemconfig(self.text_editor.canvas_id, state="normal")
6436
6494
  self.text_editor.open = True
6437
6495
  self.coords(self.text_editor.canvas_id, x, y)
6496
+ for b in text_editor_newline_bindings:
6497
+ self.text_editor.tktext.bind(b, self.text_editor_newline_binding)
6498
+ for b in text_editor_close_bindings:
6499
+ self.text_editor.tktext.bind(b, self.close_text_editor)
6438
6500
  if not dropdown:
6439
6501
  self.text_editor.tktext.focus_set()
6440
6502
  self.text_editor.window.scroll_to_bottom()
6441
- self.text_editor.tktext.bind("<Alt-Return>", lambda _x: self.text_editor_newline_binding(r, c))
6442
- self.text_editor.tktext.bind("<Alt-KP_Enter>", lambda _x: self.text_editor_newline_binding(r, c))
6443
- if USER_OS == "darwin":
6444
- self.text_editor.tktext.bind("<Option-Return>", lambda _x: self.text_editor_newline_binding(r, c))
6503
+ self.text_editor.tktext.bind("<FocusOut>", self.close_text_editor)
6445
6504
  for key, func in self.text_editor_user_bound_keys.items():
6446
6505
  self.text_editor.tktext.bind(key, func)
6447
- self.text_editor.tktext.bind("<Tab>", lambda _x: self.close_text_editor((r, c, "Tab")))
6448
- self.text_editor.tktext.bind("<Return>", lambda _x: self.close_text_editor((r, c, "Return")))
6449
- self.text_editor.tktext.bind("<KP_Enter>", lambda _x: self.close_text_editor((r, c, "Return")))
6450
- if not dropdown:
6451
- self.text_editor.tktext.bind("<FocusOut>", lambda _x: self.close_text_editor((r, c, "FocusOut")))
6452
- self.text_editor.tktext.bind("<Escape>", lambda _x: self.close_text_editor((r, c, "Escape")))
6453
6506
  return True
6454
6507
 
6455
6508
  # displayed indexes
6456
6509
  def text_editor_newline_binding(
6457
6510
  self,
6458
- r: int = 0,
6459
- c: int = 0,
6460
6511
  event: object = None,
6461
6512
  check_lines: bool = True,
6462
6513
  ) -> None:
6514
+ r, c = self.text_editor.coords
6463
6515
  curr_height = self.text_editor.window.winfo_height()
6464
6516
  if curr_height < self.min_row_height:
6465
6517
  return
@@ -6543,31 +6595,33 @@ class MainTable(tk.Canvas):
6543
6595
  if reason == "Escape":
6544
6596
  self.focus_set()
6545
6597
 
6546
- def close_text_editor(
6547
- self,
6548
- editor_info: tuple | None = None,
6549
- ) -> str | None:
6598
+ def close_text_editor(self, event: tk.Event) -> Literal["break"] | None:
6550
6599
  # checking if text editor should be closed or not
6551
- focused = self.focus_get()
6600
+ # errors if __tk_filedialog is open
6601
+ try:
6602
+ focused = self.focus_get()
6603
+ except Exception:
6604
+ focused = None
6552
6605
  try:
6553
6606
  if focused == self.text_editor.tktext.rc_popup_menu:
6554
6607
  return "break"
6555
6608
  except Exception:
6556
6609
  pass
6557
- if focused is None and editor_info:
6610
+ if focused is None:
6558
6611
  return "break"
6559
- if editor_info[2] == "Escape":
6612
+ if event.keysym == "Escape":
6560
6613
  self.hide_text_editor_and_dropdown()
6561
6614
  return
6562
6615
  # setting cell data with text editor value
6563
6616
  text_editor_value = self.text_editor.get()
6564
- r, c = editor_info[0], editor_info[1]
6617
+ r, c = self.text_editor.coords
6565
6618
  datarn, datacn = self.datarn(r), self.datacn(c)
6566
6619
  event_data = event_dict(
6567
6620
  name="end_edit_table",
6568
6621
  sheet=self.PAR.name,
6622
+ widget=self,
6569
6623
  cells_table={(datarn, datacn): text_editor_value},
6570
- key=editor_info[2],
6624
+ key=event.keysym,
6571
6625
  value=text_editor_value,
6572
6626
  loc=Loc(r, c),
6573
6627
  row=r,
@@ -6606,7 +6660,7 @@ class MainTable(tk.Canvas):
6606
6660
  numcols = c2 - c1
6607
6661
  numrows = r2 - r1
6608
6662
  if numcols == 1 and numrows == 1:
6609
- if editor_info[2] == "Return":
6663
+ if event.keysym == "Return":
6610
6664
  self.select_cell(r + 1 if r < len(self.row_positions) - 2 else r, c)
6611
6665
  self.see(
6612
6666
  r + 1 if r < len(self.row_positions) - 2 else r,
@@ -6615,7 +6669,7 @@ class MainTable(tk.Canvas):
6615
6669
  bottom_right_corner=True,
6616
6670
  check_cell_visibility=True,
6617
6671
  )
6618
- elif editor_info[2] == "Tab":
6672
+ elif event.keysym == "Tab":
6619
6673
  self.select_cell(r, c + 1 if c < len(self.col_positions) - 2 else c)
6620
6674
  self.see(
6621
6675
  r,
@@ -6628,7 +6682,7 @@ class MainTable(tk.Canvas):
6628
6682
  moved = False
6629
6683
  new_r = r
6630
6684
  new_c = c
6631
- if editor_info[2] == "Return":
6685
+ if event.keysym == "Return":
6632
6686
  if r + 1 == r2:
6633
6687
  new_r = r1
6634
6688
  elif numrows > 1:
@@ -6639,7 +6693,7 @@ class MainTable(tk.Canvas):
6639
6693
  new_c = c1
6640
6694
  elif numcols > 1:
6641
6695
  new_c = c + 1
6642
- elif editor_info[2] == "Tab":
6696
+ elif event.keysym == "Tab":
6643
6697
  if c + 1 == c2:
6644
6698
  new_c = c1
6645
6699
  elif numcols > 1:
@@ -6660,7 +6714,7 @@ class MainTable(tk.Canvas):
6660
6714
  )
6661
6715
  self.recreate_all_selection_boxes()
6662
6716
  self.hide_text_editor_and_dropdown()
6663
- if editor_info[2] != "FocusOut":
6717
+ if event.keysym != "FocusOut":
6664
6718
  self.focus_set()
6665
6719
  return "break"
6666
6720
 
@@ -6819,7 +6873,7 @@ class MainTable(tk.Canvas):
6819
6873
  if kwargs["state"] == "normal":
6820
6874
  self.text_editor.tktext.bind(
6821
6875
  "<<TextModified>>",
6822
- lambda x: self.dropdown.window.search_and_see(
6876
+ lambda _: self.dropdown.window.search_and_see(
6823
6877
  event_dict(
6824
6878
  name="table_dropdown_modified",
6825
6879
  sheet=self.PAR.name,
@@ -6843,7 +6897,7 @@ class MainTable(tk.Canvas):
6843
6897
  redraw = False
6844
6898
  else:
6845
6899
  self.update_idletasks()
6846
- self.dropdown.window.bind("<FocusOut>", lambda x: self.close_dropdown_window(r, c))
6900
+ self.dropdown.window.bind("<FocusOut>", lambda _: self.close_dropdown_window(r, c))
6847
6901
  self.dropdown.window.focus()
6848
6902
  redraw = True
6849
6903
  self.dropdown.open = True
@@ -6866,6 +6920,7 @@ class MainTable(tk.Canvas):
6866
6920
  event_data = event_dict(
6867
6921
  name="end_edit_table",
6868
6922
  sheet=self.PAR.name,
6923
+ widget=self,
6869
6924
  cells_table={(datarn, datacn): pre_edit_value},
6870
6925
  key="??",
6871
6926
  value=selection,
@@ -6912,7 +6967,7 @@ class MainTable(tk.Canvas):
6912
6967
  def mouseclick_outside_editor_or_dropdown(self) -> tuple[int, int] | None:
6913
6968
  closed_dd_coords = self.dropdown.get_coords()
6914
6969
  if self.text_editor.open:
6915
- self.close_text_editor(editor_info=self.text_editor.coords + ("ButtonPress-1",))
6970
+ self.close_text_editor(new_tk_event("ButtonPress-1"))
6916
6971
  self.hide_dropdown_window()
6917
6972
  self.focus_set()
6918
6973
  return closed_dd_coords
@@ -6922,6 +6977,11 @@ class MainTable(tk.Canvas):
6922
6977
  self.RI.mouseclick_outside_editor_or_dropdown()
6923
6978
  return self.mouseclick_outside_editor_or_dropdown()
6924
6979
 
6980
+ def hide_dropdown_editor_all_canvases(self):
6981
+ self.hide_text_editor_and_dropdown()
6982
+ self.RI.hide_text_editor_and_dropdown()
6983
+ self.CH.hide_text_editor_and_dropdown()
6984
+
6925
6985
  def hide_dropdown_window(self) -> None:
6926
6986
  if self.dropdown.open:
6927
6987
  self.dropdown.window.unbind("<FocusOut>")
@@ -6956,6 +7016,7 @@ class MainTable(tk.Canvas):
6956
7016
  event_data = event_dict(
6957
7017
  name="end_edit_table",
6958
7018
  sheet=self.PAR.name,
7019
+ widget=self,
6959
7020
  cells_table={(datarn, datacn): pre_edit_value},
6960
7021
  key="??",
6961
7022
  value=value,
@@ -6993,6 +7054,7 @@ class MainTable(tk.Canvas):
6993
7054
  event_data = event_dict(
6994
7055
  name="edit_table",
6995
7056
  sheet=self.PAR.name,
7057
+ widget=self,
6996
7058
  cells_table={(datarn, datacn): self.get_cell_data(datarn, datacn)},
6997
7059
  boxes=self.get_boxes(),
6998
7060
  selected=self.selected,