tksheet 7.3.0__py3-none-any.whl → 7.3.2__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/sheet.py CHANGED
@@ -83,9 +83,10 @@ from .themes import (
83
83
  )
84
84
  from .top_left_rectangle import TopLeftRectangle
85
85
  from .types import (
86
+ AnyIter,
86
87
  CreateSpanTypes,
87
88
  )
88
- from .vars import (
89
+ from .constants import (
89
90
  USER_OS,
90
91
  backwards_compatibility_keys,
91
92
  emitted_events,
@@ -309,6 +310,7 @@ class Sheet(tk.Frame):
309
310
  highlightbackground=outline_color,
310
311
  highlightcolor=outline_color,
311
312
  )
313
+ self._startup_complete = False
312
314
  self.ops = new_sheet_options()
313
315
  if column_width is not None:
314
316
  default_column_width = column_width
@@ -508,10 +510,14 @@ class Sheet(tk.Frame):
508
510
  self.see(0, startup_select[0])
509
511
  except Exception:
510
512
  pass
511
-
512
513
  self.refresh()
513
514
  if startup_focus:
514
515
  self.MT.focus_set()
516
+ self.after_idle(self.startup_complete)
517
+
518
+ def startup_complete(self, _mod: bool = True) -> bool:
519
+ self._startup_complete = _mod
520
+ return self._startup_complete
515
521
 
516
522
  # Sheet Colors
517
523
 
@@ -544,7 +550,7 @@ class Sheet(tk.Frame):
544
550
  def set_header_data(
545
551
  self,
546
552
  value: object,
547
- c: int | None | Iterator[int] = None,
553
+ c: int | None | AnyIter[int] = None,
548
554
  redraw: bool = True,
549
555
  ) -> Sheet:
550
556
  if c is None:
@@ -580,7 +586,7 @@ class Sheet(tk.Frame):
580
586
  def set_index_data(
581
587
  self,
582
588
  value: object,
583
- r: int | None | Iterator[int] = None,
589
+ r: int | None | AnyIter[int] = None,
584
590
  redraw: bool = True,
585
591
  ) -> Sheet:
586
592
  if r is None:
@@ -652,6 +658,7 @@ class Sheet(tk.Frame):
652
658
  - "paste"
653
659
  - "delete"
654
660
  - "undo"
661
+ - "find"
655
662
  - "edit_cell"
656
663
  - "edit_header"
657
664
  - "edit_index"
@@ -660,6 +667,47 @@ class Sheet(tk.Frame):
660
667
  return self
661
668
 
662
669
  def disable_bindings(self, *bindings: str) -> Sheet:
670
+ """
671
+ List of available bindings:
672
+ - "all"
673
+ - "single_select"
674
+ - "toggle_select"
675
+ - "drag_select"
676
+ - "select_all"
677
+ - "column_drag_and_drop" / "move_columns"
678
+ - "row_drag_and_drop" / "move_rows"
679
+ - "column_select"
680
+ - "row_select"
681
+ - "column_width_resize"
682
+ - "double_click_column_resize"
683
+ - "row_width_resize"
684
+ - "column_height_resize"
685
+ - "arrowkeys" # all arrowkeys including page up and down
686
+ - "up"
687
+ - "down"
688
+ - "left"
689
+ - "right"
690
+ - "prior" # page up
691
+ - "next" # page down
692
+ - "row_height_resize"
693
+ - "double_click_row_resize"
694
+ - "right_click_popup_menu" / "rc_popup_menu" / "rc_menu"
695
+ - "rc_select"
696
+ - "rc_insert_column"
697
+ - "rc_delete_column"
698
+ - "rc_insert_row"
699
+ - "rc_delete_row"
700
+ - "ctrl_click_select" / "ctrl_select"
701
+ - "copy"
702
+ - "cut"
703
+ - "paste"
704
+ - "delete"
705
+ - "undo"
706
+ - "find"
707
+ - "edit_cell"
708
+ - "edit_header"
709
+ - "edit_index"
710
+ """
663
711
  self.MT.disable_bindings(bindings)
664
712
  return self
665
713
 
@@ -715,7 +763,7 @@ class Sheet(tk.Frame):
715
763
  - "ctrl_column_select"
716
764
  - "deselect"
717
765
  - "all_select_events", "select", "selectevents", "select_events"
718
- - "all_modified_events", "sheetmodified", "sheet_modified" "modified_events", "modified"
766
+ - "all_modified_events", "sheetmodified", "sheet_modified", "modified_events", "modified"
719
767
  - "bind_all"
720
768
  - "unbind_all"
721
769
  """
@@ -792,7 +840,8 @@ class Sheet(tk.Frame):
792
840
  "unbind_all",
793
841
  "all_modified_events",
794
842
  "sheetmodified",
795
- "sheet_modified" "modified_events",
843
+ "sheet_modified",
844
+ "modified_events",
796
845
  "modified",
797
846
  ):
798
847
  self.MT.extra_end_ctrl_c_func = f
@@ -2305,7 +2354,7 @@ class Sheet(tk.Frame):
2305
2354
 
2306
2355
  def del_rows(
2307
2356
  self,
2308
- rows: int | Iterator[int],
2357
+ rows: int | AnyIter[int],
2309
2358
  data_indexes: bool = True,
2310
2359
  undo: bool = False,
2311
2360
  emit_event: bool = False,
@@ -2347,7 +2396,7 @@ class Sheet(tk.Frame):
2347
2396
 
2348
2397
  def del_columns(
2349
2398
  self,
2350
- columns: int | Iterator[int],
2399
+ columns: int | AnyIter[int],
2351
2400
  data_indexes: bool = True,
2352
2401
  undo: bool = False,
2353
2402
  emit_event: bool = False,
@@ -3182,22 +3231,25 @@ class Sheet(tk.Frame):
3182
3231
  get_columns: bool = False,
3183
3232
  sort_by_row: bool = False,
3184
3233
  sort_by_column: bool = False,
3234
+ reverse: bool = False,
3185
3235
  ) -> list[tuple[int, int]] | set[tuple[int, int]]:
3186
3236
  if sort_by_row and sort_by_column:
3187
- sels = sorted(
3237
+ return sorted(
3188
3238
  self.MT.get_selected_cells(get_rows=get_rows, get_cols=get_columns),
3189
- key=lambda t: t[1],
3239
+ key=lambda t: t,
3240
+ reverse=reverse,
3190
3241
  )
3191
- return sorted(sels, key=lambda t: t[0])
3192
3242
  elif sort_by_row:
3193
3243
  return sorted(
3194
3244
  self.MT.get_selected_cells(get_rows=get_rows, get_cols=get_columns),
3195
3245
  key=lambda t: t[0],
3246
+ reverse=reverse,
3196
3247
  )
3197
3248
  elif sort_by_column:
3198
3249
  return sorted(
3199
3250
  self.MT.get_selected_cells(get_rows=get_rows, get_cols=get_columns),
3200
3251
  key=lambda t: t[1],
3252
+ reverse=reverse,
3201
3253
  )
3202
3254
  return self.MT.get_selected_cells(get_rows=get_rows, get_cols=get_columns)
3203
3255
 
@@ -3251,13 +3303,13 @@ class Sheet(tk.Frame):
3251
3303
  exclude_rows: bool = False,
3252
3304
  exclude_cells: bool = False,
3253
3305
  ) -> bool:
3254
- if self.MT.anything_selected(
3255
- exclude_columns=exclude_columns,
3256
- exclude_rows=exclude_rows,
3257
- exclude_cells=exclude_cells,
3258
- ):
3259
- return True
3260
- return False
3306
+ return bool(
3307
+ self.MT.anything_selected(
3308
+ exclude_columns=exclude_columns,
3309
+ exclude_rows=exclude_rows,
3310
+ exclude_cells=exclude_cells,
3311
+ )
3312
+ )
3261
3313
 
3262
3314
  def all_selected(self) -> bool:
3263
3315
  return self.MT.all_selected()
@@ -3463,8 +3515,8 @@ class Sheet(tk.Frame):
3463
3515
 
3464
3516
  def deselect_any(
3465
3517
  self,
3466
- rows: Iterator[int] | int | None,
3467
- columns: Iterator[int] | int | None,
3518
+ rows: AnyIter[int] | int | None,
3519
+ columns: AnyIter[int] | int | None,
3468
3520
  redraw: bool = True,
3469
3521
  ) -> Sheet:
3470
3522
  self.MT.deselect_any(rows=rows, columns=columns, redraw=False)
@@ -3622,7 +3674,7 @@ class Sheet(tk.Frame):
3622
3674
 
3623
3675
  def set_column_widths(
3624
3676
  self,
3625
- column_widths: Iterator[float] | None = None,
3677
+ column_widths: AnyIter[float] | None = None,
3626
3678
  canvas_positions: bool = False,
3627
3679
  reset: bool = False,
3628
3680
  ) -> Sheet:
@@ -3637,7 +3689,7 @@ class Sheet(tk.Frame):
3637
3689
 
3638
3690
  def set_row_heights(
3639
3691
  self,
3640
- row_heights: Iterator[float] | None = None,
3692
+ row_heights: AnyIter[float] | None = None,
3641
3693
  canvas_positions: bool = False,
3642
3694
  reset: bool = False,
3643
3695
  ) -> Sheet:
@@ -3684,7 +3736,7 @@ class Sheet(tk.Frame):
3684
3736
 
3685
3737
  delete_row_position = del_row_position
3686
3738
 
3687
- def del_row_positions(self, idxs: Iterator[int] | None = None) -> Sheet:
3739
+ def del_row_positions(self, idxs: AnyIter[int] | None = None) -> Sheet:
3688
3740
  self.MT.del_row_positions(idxs=idxs)
3689
3741
  self.set_refresh_timer()
3690
3742
  return self
@@ -3695,7 +3747,7 @@ class Sheet(tk.Frame):
3695
3747
 
3696
3748
  delete_column_position = del_column_position
3697
3749
 
3698
- def del_column_positions(self, idxs: Iterator[int] | None = None) -> Sheet:
3750
+ def del_column_positions(self, idxs: AnyIter[int] | None = None) -> Sheet:
3699
3751
  self.MT.del_col_positions(idxs=idxs)
3700
3752
  self.set_refresh_timer()
3701
3753
  return self
@@ -3968,7 +4020,7 @@ class Sheet(tk.Frame):
3968
4020
 
3969
4021
  def display_columns(
3970
4022
  self,
3971
- columns: None | Literal["all"] | Iterator[int] = None,
4023
+ columns: None | Literal["all"] | AnyIter[int] = None,
3972
4024
  all_columns_displayed: None | bool = None,
3973
4025
  reset_col_positions: bool = True,
3974
4026
  redraw: bool = False,
@@ -3992,7 +4044,7 @@ class Sheet(tk.Frame):
3992
4044
 
3993
4045
  def hide_columns(
3994
4046
  self,
3995
- columns: int | set[int] | Iterator[int],
4047
+ columns: int | set[int] | AnyIter[int],
3996
4048
  redraw: bool = True,
3997
4049
  deselect_all: bool = True,
3998
4050
  data_indexes: bool = False,
@@ -4036,7 +4088,7 @@ class Sheet(tk.Frame):
4036
4088
 
4037
4089
  def show_columns(
4038
4090
  self,
4039
- columns: int | Iterator[int],
4091
+ columns: int | AnyIter[int],
4040
4092
  redraw: bool = True,
4041
4093
  deselect_all: bool = True,
4042
4094
  ) -> Sheet:
@@ -4102,7 +4154,7 @@ class Sheet(tk.Frame):
4102
4154
 
4103
4155
  def display_rows(
4104
4156
  self,
4105
- rows: None | Literal["all"] | Iterator[int] = None,
4157
+ rows: None | Literal["all"] | AnyIter[int] = None,
4106
4158
  all_rows_displayed: None | bool = None,
4107
4159
  reset_row_positions: bool = True,
4108
4160
  redraw: bool = False,
@@ -4124,7 +4176,7 @@ class Sheet(tk.Frame):
4124
4176
 
4125
4177
  def hide_rows(
4126
4178
  self,
4127
- rows: int | set[int] | Iterator[int],
4179
+ rows: int | set[int] | AnyIter[int],
4128
4180
  redraw: bool = True,
4129
4181
  deselect_all: bool = True,
4130
4182
  data_indexes: bool = False,
@@ -4170,7 +4222,7 @@ class Sheet(tk.Frame):
4170
4222
 
4171
4223
  def show_rows(
4172
4224
  self,
4173
- rows: int | Iterator[int],
4225
+ rows: int | AnyIter[int],
4174
4226
  redraw: bool = True,
4175
4227
  deselect_all: bool = True,
4176
4228
  ) -> Sheet:
@@ -4790,7 +4842,7 @@ class Sheet(tk.Frame):
4790
4842
  def tag(
4791
4843
  self,
4792
4844
  *key: CreateSpanTypes,
4793
- tags: Iterator[str] | str = "",
4845
+ tags: AnyIter[str] | str = "",
4794
4846
  ) -> Sheet:
4795
4847
  span = self.span_from_key(*key)
4796
4848
  rows, cols = self.ranges_from_span(span)
@@ -4835,7 +4887,7 @@ class Sheet(tk.Frame):
4835
4887
 
4836
4888
  def tag_rows(
4837
4889
  self,
4838
- rows: int | Iterator[int],
4890
+ rows: int | AnyIter[int],
4839
4891
  *tags,
4840
4892
  ) -> Sheet:
4841
4893
  if isinstance(rows, int):
@@ -4848,7 +4900,7 @@ class Sheet(tk.Frame):
4848
4900
 
4849
4901
  def tag_columns(
4850
4902
  self,
4851
- columns: int | Iterator[int],
4903
+ columns: int | AnyIter[int],
4852
4904
  *tags,
4853
4905
  ) -> Sheet:
4854
4906
  if isinstance(columns, int):
@@ -4862,8 +4914,8 @@ class Sheet(tk.Frame):
4862
4914
  def untag(
4863
4915
  self,
4864
4916
  cell: tuple[int, int] | None = None,
4865
- rows: int | Iterator[int] | None = None,
4866
- columns: int | Iterator[int] | None = None,
4917
+ rows: int | AnyIter[int] | None = None,
4918
+ columns: int | AnyIter[int] | None = None,
4867
4919
  ) -> Sheet:
4868
4920
  if isinstance(cell, tuple):
4869
4921
  for tagged in self.MT.tagged_cells.values():
@@ -4923,7 +4975,7 @@ class Sheet(tk.Frame):
4923
4975
  text_column: None | int | list[str] = None,
4924
4976
  push_ops: bool = False,
4925
4977
  row_heights: Sequence[int] | None | False = None,
4926
- open_ids: Iterator[str] | None = None,
4978
+ open_ids: AnyIter[str] | None = None,
4927
4979
  safety: bool = True,
4928
4980
  ncols: int | None = None,
4929
4981
  lower: bool = False,
@@ -4950,7 +5002,7 @@ class Sheet(tk.Frame):
4950
5002
  if not iid:
4951
5003
  continue
4952
5004
  tally_of_ids[iid] += 1
4953
- if tally_of_ids[iid] > 0:
5005
+ if tally_of_ids[iid]:
4954
5006
  x = 1
4955
5007
  while iid in tally_of_ids:
4956
5008
  new = f"{row[iid_column]}_DUPLICATED_{x}"
@@ -5032,7 +5084,7 @@ class Sheet(tk.Frame):
5032
5084
  """
5033
5085
  return self.RI.tree_open_ids
5034
5086
 
5035
- def tree_set_open(self, open_ids: Iterator[str]) -> Sheet:
5087
+ def tree_set_open(self, open_ids: AnyIter[str]) -> Sheet:
5036
5088
  """
5037
5089
  Accepts set[str] of iids that are open in the treeview
5038
5090
  Closes everything else
@@ -5087,7 +5139,7 @@ class Sheet(tk.Frame):
5087
5139
  deselect_all=False,
5088
5140
  )
5089
5141
 
5090
- def _tree_close(self, items: Iterator[str]) -> list[int]:
5142
+ def _tree_close(self, items: AnyIter[str]) -> list[int]:
5091
5143
  """
5092
5144
  Only meant for internal use
5093
5145
  """
@@ -5129,6 +5181,9 @@ class Sheet(tk.Frame):
5129
5181
  ) -> str:
5130
5182
  """
5131
5183
  Insert an item into the treeview
5184
+
5185
+ Returns:
5186
+ str: new item iid
5132
5187
  """
5133
5188
  if not iid:
5134
5189
  i = 0
@@ -5187,7 +5242,12 @@ class Sheet(tk.Frame):
5187
5242
  include_text_column: bool = True,
5188
5243
  ) -> dict[str, int]:
5189
5244
  """
5190
- Insert multiple items into the treeview at once, under the same parent
5245
+ Insert multiple items into the treeview at once, under the same parent.
5246
+
5247
+ Returns:
5248
+ dict:
5249
+ - Keys (str): iid
5250
+ - Values (int): row numbers
5191
5251
  """
5192
5252
  to_insert = []
5193
5253
  pid = parent
@@ -5398,6 +5458,8 @@ class Sheet(tk.Frame):
5398
5458
  to_show = []
5399
5459
  item_node = self.RI.tree[item]
5400
5460
  item_r = self.RI.tree_rns[item]
5461
+ item_descendants = tuple(self.RI.get_iid_descendants(item))
5462
+ num_item_descendants = len(item_descendants)
5401
5463
  if parent:
5402
5464
  if self.RI.move_pid_causes_recursive_loop(item, parent):
5403
5465
  raise ValueError(f"iid '{item}' causes a recursive loop with parent '{parent}'.")
@@ -5410,7 +5472,7 @@ class Sheet(tk.Frame):
5410
5472
  # index is on end
5411
5473
  # item row is less than move to row
5412
5474
  if item_r < new_r:
5413
- r_ctr = new_r - sum(1 for _ in self.RI.get_iid_descendants(item))
5475
+ r_ctr = new_r - num_item_descendants
5414
5476
 
5415
5477
  # new parent has children
5416
5478
  # index is on end
@@ -5427,10 +5489,10 @@ class Sheet(tk.Frame):
5427
5489
  r_ctr = (
5428
5490
  new_r
5429
5491
  + sum(1 for _ in self.RI.get_iid_descendants(parent_node.children[index].iid))
5430
- - sum(1 for _ in self.RI.get_iid_descendants(item))
5492
+ - num_item_descendants
5431
5493
  )
5432
5494
  else:
5433
- r_ctr = new_r - sum(1 for _ in self.RI.get_iid_descendants(item)) - 1
5495
+ r_ctr = new_r - num_item_descendants - 1
5434
5496
 
5435
5497
  # new parent has children
5436
5498
  # index is not end
@@ -5445,7 +5507,7 @@ class Sheet(tk.Frame):
5445
5507
  # index always start
5446
5508
  # item row is less than move to row
5447
5509
  if item_r < new_r:
5448
- r_ctr = new_r - sum(1 for _ in self.RI.get_iid_descendants(item))
5510
+ r_ctr = new_r - num_item_descendants
5449
5511
 
5450
5512
  # new parent doesn't have children
5451
5513
  # index always start
@@ -5456,7 +5518,7 @@ class Sheet(tk.Frame):
5456
5518
  if parent in self.RI.tree_open_ids and self.item_displayed(parent):
5457
5519
  to_show.append(r_ctr)
5458
5520
  r_ctr += 1
5459
- for did in self.RI.get_iid_descendants(item):
5521
+ for did in item_descendants:
5460
5522
  mapping[self.RI.tree_rns[did]] = r_ctr
5461
5523
  if to_show and self.RI.ancestors_all_open(did, item_node.parent):
5462
5524
  to_show.append(r_ctr)
@@ -5475,14 +5537,14 @@ class Sheet(tk.Frame):
5475
5537
  r_ctr = (
5476
5538
  new_r
5477
5539
  + sum(1 for _ in self.RI.get_iid_descendants(self.rowitem(new_r, data_index=True)))
5478
- - sum(1 for _ in self.RI.get_iid_descendants(item))
5540
+ - num_item_descendants
5479
5541
  )
5480
5542
  else:
5481
5543
  r_ctr = new_r
5482
5544
  mapping[item_r] = r_ctr
5483
5545
  to_show.append(r_ctr)
5484
5546
  r_ctr += 1
5485
- for did in self.RI.get_iid_descendants(item):
5547
+ for did in item_descendants:
5486
5548
  mapping[self.RI.tree_rns[did]] = r_ctr
5487
5549
  if to_show and self.RI.ancestors_all_open(did, item_node.parent):
5488
5550
  to_show.append(r_ctr)
@@ -5778,7 +5840,7 @@ class Sheet(tk.Frame):
5778
5840
  get_displayed: bool = False,
5779
5841
  get_index: bool = False,
5780
5842
  get_index_displayed: bool = True,
5781
- only_columns: int | Iterator[int] | None = None,
5843
+ only_columns: int | AnyIter[int] | None = None,
5782
5844
  ) -> list[object]:
5783
5845
  if only_columns is not None:
5784
5846
  if isinstance(only_columns, int):
@@ -5804,7 +5866,7 @@ class Sheet(tk.Frame):
5804
5866
  get_displayed: bool = False,
5805
5867
  get_header: bool = False,
5806
5868
  get_header_displayed: bool = True,
5807
- only_rows: int | Iterator[int] | None = None,
5869
+ only_rows: int | AnyIter[int] | None = None,
5808
5870
  ) -> list[object]:
5809
5871
  if only_rows is not None:
5810
5872
  if isinstance(only_rows, int):
@@ -5823,8 +5885,8 @@ class Sheet(tk.Frame):
5823
5885
  get_index: bool = False,
5824
5886
  get_header_displayed: bool = True,
5825
5887
  get_index_displayed: bool = True,
5826
- only_rows: Iterator[int] | int | None = None,
5827
- only_columns: Iterator[int] | int | None = None,
5888
+ only_rows: AnyIter[int] | int | None = None,
5889
+ only_columns: AnyIter[int] | int | None = None,
5828
5890
  ) -> list[object]:
5829
5891
  if only_rows is not None:
5830
5892
  if isinstance(only_rows, int):
@@ -5872,8 +5934,8 @@ class Sheet(tk.Frame):
5872
5934
  get_index: bool = False,
5873
5935
  get_index_displayed: bool = True,
5874
5936
  get_header_displayed: bool = True,
5875
- only_rows: int | Iterator[int] | None = None,
5876
- only_columns: int | Iterator[int] | None = None,
5937
+ only_rows: int | AnyIter[int] | None = None,
5938
+ only_columns: int | AnyIter[int] | None = None,
5877
5939
  ) -> Iterator[list[object]]:
5878
5940
  if only_rows is not None:
5879
5941
  if isinstance(only_rows, int):
@@ -6142,7 +6204,7 @@ class Sheet(tk.Frame):
6142
6204
 
6143
6205
  def highlight_rows(
6144
6206
  self,
6145
- rows: Iterator[int] | int,
6207
+ rows: AnyIter[int] | int,
6146
6208
  bg: None | str = None,
6147
6209
  fg: None | str = None,
6148
6210
  highlight_index: bool = True,
@@ -6160,7 +6222,7 @@ class Sheet(tk.Frame):
6160
6222
 
6161
6223
  def highlight_columns(
6162
6224
  self,
6163
- columns: Iterator[int] | int,
6225
+ columns: AnyIter[int] | int,
6164
6226
  bg: bool | None | str = False,
6165
6227
  fg: bool | None | str = False,
6166
6228
  highlight_header: bool = True,
@@ -6460,7 +6522,12 @@ class Sheet(tk.Frame):
6460
6522
  ) -> None:
6461
6523
  self.create_checkbox(r=r, c=c, **get_checkbox_kwargs(*args, **kwargs))
6462
6524
 
6463
- def checkbox_row(self, r: Iterator[int] | int | Literal["all"] = 0, *args, **kwargs) -> None:
6525
+ def checkbox_row(
6526
+ self,
6527
+ r: AnyIter[int] | int | Literal["all"] = 0,
6528
+ *args,
6529
+ **kwargs,
6530
+ ) -> None:
6464
6531
  kwargs = get_checkbox_kwargs(*args, **kwargs)
6465
6532
  d = get_checkbox_dict(**kwargs)
6466
6533
  if isinstance(r, str) and r.lower() == "all":
@@ -6482,7 +6549,7 @@ class Sheet(tk.Frame):
6482
6549
 
6483
6550
  def checkbox_column(
6484
6551
  self,
6485
- c: Iterator[int] | int | Literal["all"] = 0,
6552
+ c: AnyIter[int] | int | Literal["all"] = 0,
6486
6553
  *args,
6487
6554
  **kwargs,
6488
6555
  ) -> None:
@@ -6505,7 +6572,12 @@ class Sheet(tk.Frame):
6505
6572
  for r in range(self.MT.total_data_rows()):
6506
6573
  self.MT.set_cell_data(r, c, v)
6507
6574
 
6508
- def create_header_checkbox(self, c: Iterator[int] | int | Literal["all"] = 0, *args, **kwargs) -> None:
6575
+ def create_header_checkbox(
6576
+ self,
6577
+ c: AnyIter[int] | int | Literal["all"] = 0,
6578
+ *args,
6579
+ **kwargs,
6580
+ ) -> None:
6509
6581
  kwargs = get_checkbox_kwargs(*args, **kwargs)
6510
6582
  d = get_checkbox_dict(**kwargs)
6511
6583
  if isinstance(c, str) and c.lower() == "all":
@@ -6523,7 +6595,12 @@ class Sheet(tk.Frame):
6523
6595
  add_to_options(self.CH.cell_options, c, "checkbox", d)
6524
6596
  self.CH.set_cell_data(c, v)
6525
6597
 
6526
- def create_index_checkbox(self, r: Iterator[int] | int | Literal["all"] = 0, *args, **kwargs) -> None:
6598
+ def create_index_checkbox(
6599
+ self,
6600
+ r: AnyIter[int] | int | Literal["all"] = 0,
6601
+ *args,
6602
+ **kwargs,
6603
+ ) -> None:
6527
6604
  kwargs = get_checkbox_kwargs(*args, **kwargs)
6528
6605
  d = get_checkbox_dict(**kwargs)
6529
6606
  if isinstance(r, str) and r.lower() == "all":
@@ -6568,7 +6645,10 @@ class Sheet(tk.Frame):
6568
6645
  ) -> None:
6569
6646
  self.delete_checkbox(r, c)
6570
6647
 
6571
- def delete_row_checkbox(self, r: Iterator[int] | int | Literal["all"] = 0) -> None:
6648
+ def delete_row_checkbox(
6649
+ self,
6650
+ r: AnyIter[int] | int | Literal["all"] = 0,
6651
+ ) -> None:
6572
6652
  if isinstance(r, str) and r.lower() == "all":
6573
6653
  for r_ in self.MT.row_options:
6574
6654
  self.del_table_row_options_checkbox(r_)
@@ -6578,7 +6658,10 @@ class Sheet(tk.Frame):
6578
6658
  for r_ in r:
6579
6659
  self.del_table_row_options_checkbox(r_)
6580
6660
 
6581
- def delete_column_checkbox(self, c: Iterator[int] | int | Literal["all"] = 0) -> None:
6661
+ def delete_column_checkbox(
6662
+ self,
6663
+ c: AnyIter[int] | int | Literal["all"] = 0,
6664
+ ) -> None:
6582
6665
  if isinstance(c, str) and c.lower() == "all":
6583
6666
  for c_ in self.MT.col_options:
6584
6667
  self.del_table_column_options_checkbox(c_)
@@ -6588,7 +6671,10 @@ class Sheet(tk.Frame):
6588
6671
  for c_ in c:
6589
6672
  self.del_table_column_options_checkbox(c_)
6590
6673
 
6591
- def delete_header_checkbox(self, c: Iterator[int] | int | Literal["all"] = 0) -> None:
6674
+ def delete_header_checkbox(
6675
+ self,
6676
+ c: AnyIter[int] | int | Literal["all"] = 0,
6677
+ ) -> None:
6592
6678
  if isinstance(c, str) and c.lower() == "all":
6593
6679
  for c_ in self.CH.cell_options:
6594
6680
  if "checkbox" in self.CH.cell_options[c_]:
@@ -6599,7 +6685,10 @@ class Sheet(tk.Frame):
6599
6685
  for c_ in c:
6600
6686
  self.del_header_cell_options_checkbox(c_)
6601
6687
 
6602
- def delete_index_checkbox(self, r: Iterator[int] | int | Literal["all"] = 0) -> None:
6688
+ def delete_index_checkbox(
6689
+ self,
6690
+ r: AnyIter[int] | int | Literal["all"] = 0,
6691
+ ) -> None:
6603
6692
  if isinstance(r, str) and r.lower() == "all":
6604
6693
  for r_ in self.RI.cell_options:
6605
6694
  if "checkbox" in self.RI.cell_options[r_]:
@@ -6688,7 +6777,7 @@ class Sheet(tk.Frame):
6688
6777
 
6689
6778
  def dropdown_row(
6690
6779
  self,
6691
- r: Iterator[int] | int | Literal["all"] = 0,
6780
+ r: AnyIter[int] | int | Literal["all"] = 0,
6692
6781
  *args,
6693
6782
  **kwargs,
6694
6783
  ) -> Sheet:
@@ -6713,7 +6802,7 @@ class Sheet(tk.Frame):
6713
6802
 
6714
6803
  def dropdown_column(
6715
6804
  self,
6716
- c: Iterator[int] | int | Literal["all"] = 0,
6805
+ c: AnyIter[int] | int | Literal["all"] = 0,
6717
6806
  *args,
6718
6807
  **kwargs,
6719
6808
  ) -> Sheet:
@@ -6738,7 +6827,7 @@ class Sheet(tk.Frame):
6738
6827
 
6739
6828
  def create_header_dropdown(
6740
6829
  self,
6741
- c: Iterator[int] | int | Literal["all"] = 0,
6830
+ c: AnyIter[int] | int | Literal["all"] = 0,
6742
6831
  *args,
6743
6832
  **kwargs,
6744
6833
  ) -> Sheet:
@@ -6762,7 +6851,7 @@ class Sheet(tk.Frame):
6762
6851
 
6763
6852
  def create_index_dropdown(
6764
6853
  self,
6765
- r: Iterator[int] | int | Literal["all"] = 0,
6854
+ r: AnyIter[int] | int | Literal["all"] = 0,
6766
6855
  *args,
6767
6856
  **kwargs,
6768
6857
  ) -> Sheet:
@@ -6813,7 +6902,7 @@ class Sheet(tk.Frame):
6813
6902
 
6814
6903
  def delete_row_dropdown(
6815
6904
  self,
6816
- r: Iterator[int] | int | Literal["all"] = "all",
6905
+ r: AnyIter[int] | int | Literal["all"] = "all",
6817
6906
  ) -> None:
6818
6907
  if isinstance(r, str) and r.lower() == "all":
6819
6908
  for r_ in self.MT.row_options:
@@ -6827,7 +6916,7 @@ class Sheet(tk.Frame):
6827
6916
 
6828
6917
  def delete_column_dropdown(
6829
6918
  self,
6830
- c: Iterator[int] | int | Literal["all"] = "all",
6919
+ c: AnyIter[int] | int | Literal["all"] = "all",
6831
6920
  ) -> None:
6832
6921
  if isinstance(c, str) and c.lower() == "all":
6833
6922
  for c_ in self.MT.col_options:
@@ -6839,7 +6928,7 @@ class Sheet(tk.Frame):
6839
6928
  for c_ in c:
6840
6929
  self.del_column_options_dropdown(datacn=c_)
6841
6930
 
6842
- def delete_header_dropdown(self, c: Iterator[int] | int | Literal["all"]) -> None:
6931
+ def delete_header_dropdown(self, c: AnyIter[int] | int | Literal["all"]) -> None:
6843
6932
  if isinstance(c, str) and c.lower() == "all":
6844
6933
  for c_ in self.CH.cell_options:
6845
6934
  if "dropdown" in self.CH.cell_options[c_]:
@@ -6850,7 +6939,7 @@ class Sheet(tk.Frame):
6850
6939
  for c_ in c:
6851
6940
  self.del_header_cell_options_dropdown(c_)
6852
6941
 
6853
- def delete_index_dropdown(self, r: Iterator[int] | int | Literal["all"]) -> None:
6942
+ def delete_index_dropdown(self, r: AnyIter[int] | int | Literal["all"]) -> None:
6854
6943
  if isinstance(r, str) and r.lower() == "all":
6855
6944
  for r_ in self.RI.cell_options:
6856
6945
  if "dropdown" in self.RI.cell_options[r_]:
@@ -7079,7 +7168,7 @@ class Sheet(tk.Frame):
7079
7168
 
7080
7169
  def format_row(
7081
7170
  self,
7082
- r: Iterator[int] | int | Literal["all"],
7171
+ r: AnyIter[int] | int | Literal["all"],
7083
7172
  formatter_options: dict = {},
7084
7173
  formatter_class: object = None,
7085
7174
  redraw: bool = True,
@@ -7109,7 +7198,7 @@ class Sheet(tk.Frame):
7109
7198
 
7110
7199
  def delete_row_format(
7111
7200
  self,
7112
- r: Iterator[int] | int | Literal["all"] = "all",
7201
+ r: AnyIter[int] | int | Literal["all"] = "all",
7113
7202
  clear_values: bool = False,
7114
7203
  ) -> Sheet:
7115
7204
  if is_iterable(r):
@@ -7121,7 +7210,7 @@ class Sheet(tk.Frame):
7121
7210
 
7122
7211
  def format_column(
7123
7212
  self,
7124
- c: Iterator[int] | int | Literal["all"],
7213
+ c: AnyIter[int] | int | Literal["all"],
7125
7214
  formatter_options: dict = {},
7126
7215
  formatter_class: object = None,
7127
7216
  redraw: bool = True,
@@ -7151,7 +7240,7 @@ class Sheet(tk.Frame):
7151
7240
 
7152
7241
  def delete_column_format(
7153
7242
  self,
7154
- c: Iterator[int] | int | Literal["all"] = "all",
7243
+ c: AnyIter[int] | int | Literal["all"] = "all",
7155
7244
  clear_values: bool = False,
7156
7245
  ) -> Sheet:
7157
7246
  if is_iterable(c):
@@ -7259,6 +7348,7 @@ class Dropdown(Sheet):
7259
7348
  search_function: Callable = dropdown_search_function,
7260
7349
  modified_function: None | Callable = None,
7261
7350
  ) -> None:
7351
+ self.set_yview(0.0)
7262
7352
  self.deselect(redraw=False)
7263
7353
  self.r = r
7264
7354
  self.c = c