tksheet 7.4.9__py3-none-any.whl → 7.4.11__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
@@ -87,7 +87,7 @@ from .themes import (
87
87
  theme_light_blue,
88
88
  theme_light_green,
89
89
  )
90
- from .tksheet_types import AnyIter, Binding, CellPropertyKey, CreateSpanTypes, ExtraBinding
90
+ from .tksheet_types import Binding, CellPropertyKey, CreateSpanTypes, ExtraBinding
91
91
  from .top_left_rectangle import TopLeftRectangle
92
92
 
93
93
 
@@ -543,7 +543,7 @@ class Sheet(tk.Frame):
543
543
  def set_header_data(
544
544
  self,
545
545
  value: Any,
546
- c: int | None | AnyIter[int] = None,
546
+ c: int | None | Iterator[int] = None,
547
547
  redraw: bool = True,
548
548
  ) -> Sheet:
549
549
  if c is None:
@@ -579,7 +579,7 @@ class Sheet(tk.Frame):
579
579
  def set_index_data(
580
580
  self,
581
581
  value: Any,
582
- r: int | None | AnyIter[int] = None,
582
+ r: int | None | Iterator[int] = None,
583
583
  redraw: bool = True,
584
584
  ) -> Sheet:
585
585
  if r is None:
@@ -1301,6 +1301,7 @@ class Sheet(tk.Frame):
1301
1301
  undo: bool | None = None,
1302
1302
  emit_event: bool | None = None,
1303
1303
  redraw: bool = True,
1304
+ event_data: EventDataDict | None = None,
1304
1305
  ) -> EventDataDict:
1305
1306
  """
1306
1307
  e.g.
@@ -1357,12 +1358,13 @@ class Sheet(tk.Frame):
1357
1358
  fmt_kw = span.kwargs if span.type_ == "format" and span.kwargs else None
1358
1359
  transposed = span.transposed
1359
1360
  maxr, maxc = startr, startc
1360
- event_data = event_dict(
1361
- name="edit_table",
1362
- sheet=self.name,
1363
- widget=self,
1364
- selected=self.MT.selected,
1365
- )
1361
+ if event_data is None:
1362
+ event_data = event_dict(
1363
+ name="edit_table",
1364
+ sheet=self.name,
1365
+ widget=self,
1366
+ selected=self.MT.selected,
1367
+ )
1366
1368
  set_t = self.event_data_set_table_cell
1367
1369
  set_i, set_h = self.event_data_set_index_cell, self.event_data_set_header_cell
1368
1370
  istart = 1 if index else 0
@@ -1533,28 +1535,32 @@ class Sheet(tk.Frame):
1533
1535
  event_data = set_h(startc, data, event_data)
1534
1536
  # add row/column lines (positions) if required
1535
1537
  if self.MT.all_columns_displayed and maxc >= (ncols := len(self.MT.col_positions) - 1):
1538
+ _, _, widths = self.MT.get_args_for_add_columns(
1539
+ data_ins_col=len(self.MT.col_positions) - 1,
1540
+ displayed_ins_col=len(self.MT.col_positions) - 1,
1541
+ columns=maxc + 1 - ncols,
1542
+ widths=None,
1543
+ headers=False,
1544
+ )
1536
1545
  event_data = self.MT.add_columns(
1537
- *self.MT.get_args_for_add_columns(
1538
- data_ins_col=len(self.MT.col_positions) - 1,
1539
- displayed_ins_col=len(self.MT.col_positions) - 1,
1540
- numcols=maxc + 1 - ncols,
1541
- columns=[],
1542
- widths=None,
1543
- headers=False,
1544
- ),
1546
+ columns={},
1547
+ header={},
1548
+ column_widths=widths,
1545
1549
  event_data=event_data,
1546
1550
  create_selections=False,
1547
1551
  )
1548
1552
  if self.MT.all_rows_displayed and maxr >= (nrows := len(self.MT.row_positions) - 1):
1553
+ _, _, heights = self.MT.get_args_for_add_rows(
1554
+ data_ins_row=len(self.MT.row_positions) - 1,
1555
+ displayed_ins_row=len(self.MT.row_positions) - 1,
1556
+ rows=maxr + 1 - nrows,
1557
+ heights=None,
1558
+ row_index=False,
1559
+ )
1549
1560
  event_data = self.MT.add_rows(
1550
- *self.MT.get_args_for_add_rows(
1551
- data_ins_row=len(self.MT.row_positions) - 1,
1552
- displayed_ins_row=len(self.MT.row_positions) - 1,
1553
- numrows=maxr + 1 - nrows,
1554
- rows=[],
1555
- heights=None,
1556
- row_index=False,
1557
- ),
1561
+ rows={},
1562
+ index={},
1563
+ row_heights=heights,
1558
1564
  event_data=event_data,
1559
1565
  create_selections=False,
1560
1566
  )
@@ -1696,7 +1702,7 @@ class Sheet(tk.Frame):
1696
1702
 
1697
1703
  def insert_rows(
1698
1704
  self,
1699
- rows: list[tuple[Any] | list[Any]] | tuple[tuple[Any] | list[Any]] | int = 1,
1705
+ rows: Iterator[list[Any]] | int = 1,
1700
1706
  idx: str | int | None = None,
1701
1707
  heights: list[int] | tuple[int] | None = None,
1702
1708
  row_index: bool = False,
@@ -1715,34 +1721,10 @@ class Sheet(tk.Frame):
1715
1721
  if isinstance(rows, int):
1716
1722
  if rows < 1:
1717
1723
  raise ValueError(f"rows arg must be greater than 0, not {rows}")
1718
- total_cols = self.MT.total_data_cols()
1719
- if row_index:
1720
- data = [
1721
- [self.RI.get_value_for_empty_cell(idx + i, r_ops=False)]
1722
- + self.MT.get_empty_row_seq(
1723
- idx + i,
1724
- total_cols,
1725
- r_ops=False,
1726
- c_ops=False,
1727
- )
1728
- for i in range(rows)
1729
- ]
1730
- else:
1731
- data = [
1732
- self.MT.get_empty_row_seq(
1733
- idx + i,
1734
- total_cols,
1735
- r_ops=False,
1736
- c_ops=False,
1737
- )
1738
- for i in range(rows)
1739
- ]
1740
- else:
1741
- data = rows
1742
- if not isinstance(rows, int) and fill:
1724
+ elif fill:
1743
1725
  total_cols = self.MT.total_data_cols() if total_cols is None else total_cols
1744
1726
  len_check = (total_cols + 1) if row_index else total_cols
1745
- for rn, r in enumerate(data):
1727
+ for rn, r in enumerate(rows):
1746
1728
  if len_check > (lnr := len(r)):
1747
1729
  r += self.MT.get_empty_row_seq(
1748
1730
  rn,
@@ -1751,14 +1733,11 @@ class Sheet(tk.Frame):
1751
1733
  r_ops=False,
1752
1734
  c_ops=False,
1753
1735
  )
1754
- numrows = len(data)
1755
- displayed_ins_idx = idx if self.MT.all_rows_displayed else bisect_left(self.MT.displayed_rows, idx)
1756
1736
  event_data = self.MT.add_rows(
1757
1737
  *self.MT.get_args_for_add_rows(
1758
1738
  data_ins_row=idx,
1759
- displayed_ins_row=displayed_ins_idx,
1760
- numrows=numrows,
1761
- rows=data,
1739
+ displayed_ins_row=idx if self.MT.all_rows_displayed else bisect_left(self.MT.displayed_rows, idx),
1740
+ rows=rows,
1762
1741
  heights=heights,
1763
1742
  row_index=row_index,
1764
1743
  ),
@@ -1777,7 +1756,7 @@ class Sheet(tk.Frame):
1777
1756
 
1778
1757
  def insert_columns(
1779
1758
  self,
1780
- columns: list[tuple[Any] | list[Any]] | tuple[tuple[Any] | list[Any]] | int = 1,
1759
+ columns: Iterator[list[Any]] | int = 1,
1781
1760
  idx: str | int | None = None,
1782
1761
  widths: list[int] | tuple[int] | None = None,
1783
1762
  headers: bool = False,
@@ -1796,60 +1775,24 @@ class Sheet(tk.Frame):
1796
1775
  if isinstance(columns, int):
1797
1776
  if columns < 1:
1798
1777
  raise ValueError(f"columns arg must be greater than 0, not {columns}")
1799
- if headers:
1800
- data = [
1801
- [self.CH.get_value_for_empty_cell(datacn, c_ops=False)]
1802
- + [
1778
+ elif fill:
1779
+ len_check = (total_rows + 1) if headers else total_rows
1780
+ for i, column in enumerate(columns):
1781
+ if (col_len := len(column)) < len_check:
1782
+ column += [
1803
1783
  self.MT.get_value_for_empty_cell(
1804
- datarn,
1805
- datacn,
1806
- r_ops=False,
1807
- c_ops=False,
1808
- )
1809
- for datarn in range(total_rows)
1810
- ]
1811
- for datacn in range(idx, idx + columns)
1812
- ]
1813
- else:
1814
- data = [
1815
- [
1816
- self.MT.get_value_for_empty_cell(
1817
- datarn,
1818
- datacn,
1784
+ r,
1785
+ idx + i,
1819
1786
  r_ops=False,
1820
1787
  c_ops=False,
1821
1788
  )
1822
- for datarn in range(total_rows)
1789
+ for r in range((col_len - 1) if headers else col_len, total_rows)
1823
1790
  ]
1824
- for datacn in range(idx, idx + columns)
1825
- ]
1826
- numcols = columns
1827
- else:
1828
- data = columns
1829
- numcols = len(columns)
1830
- if fill:
1831
- len_check = (total_rows + 1) if headers else total_rows
1832
- for i, column in enumerate(data):
1833
- if (col_len := len(column)) < len_check:
1834
- column += [
1835
- self.MT.get_value_for_empty_cell(
1836
- r,
1837
- idx + i,
1838
- r_ops=False,
1839
- c_ops=False,
1840
- )
1841
- for r in range((col_len - 1) if headers else col_len, total_rows)
1842
- ]
1843
- if self.MT.all_columns_displayed:
1844
- displayed_ins_idx = idx
1845
- elif not self.MT.all_columns_displayed:
1846
- displayed_ins_idx = bisect_left(self.MT.displayed_columns, idx)
1847
1791
  event_data = self.MT.add_columns(
1848
1792
  *self.MT.get_args_for_add_columns(
1849
1793
  data_ins_col=idx,
1850
- displayed_ins_col=displayed_ins_idx,
1851
- numcols=numcols,
1852
- columns=data,
1794
+ displayed_ins_col=idx if self.MT.all_columns_displayed else bisect_left(self.MT.displayed_columns, idx),
1795
+ columns=columns,
1853
1796
  widths=widths,
1854
1797
  headers=headers,
1855
1798
  ),
@@ -1867,7 +1810,7 @@ class Sheet(tk.Frame):
1867
1810
 
1868
1811
  def del_rows(
1869
1812
  self,
1870
- rows: int | AnyIter[int],
1813
+ rows: int | Iterator[int],
1871
1814
  data_indexes: bool = True,
1872
1815
  undo: bool = True,
1873
1816
  emit_event: bool = False,
@@ -1888,7 +1831,7 @@ class Sheet(tk.Frame):
1888
1831
 
1889
1832
  def del_columns(
1890
1833
  self,
1891
- columns: int | AnyIter[int],
1834
+ columns: int | Iterator[int],
1892
1835
  data_indexes: bool = True,
1893
1836
  undo: bool = True,
1894
1837
  emit_event: bool = False,
@@ -2180,7 +2123,7 @@ class Sheet(tk.Frame):
2180
2123
 
2181
2124
  def sort_rows(
2182
2125
  self,
2183
- rows: AnyIter[int] | Span | int | None = None,
2126
+ rows: Iterator[int] | Span | int | None = None,
2184
2127
  reverse: bool = False,
2185
2128
  validation: bool = True,
2186
2129
  key: Callable | None = None,
@@ -2194,7 +2137,7 @@ class Sheet(tk.Frame):
2194
2137
 
2195
2138
  def sort_columns(
2196
2139
  self,
2197
- columns: AnyIter[int] | Span | int | None = None,
2140
+ columns: Iterator[int] | Span | int | None = None,
2198
2141
  reverse: bool = False,
2199
2142
  validation: bool = True,
2200
2143
  key: Callable | None = None,
@@ -3183,8 +3126,8 @@ class Sheet(tk.Frame):
3183
3126
 
3184
3127
  def deselect_any(
3185
3128
  self,
3186
- rows: AnyIter[int] | int | None,
3187
- columns: AnyIter[int] | int | None,
3129
+ rows: Iterator[int] | int | None,
3130
+ columns: Iterator[int] | int | None,
3188
3131
  redraw: bool = True,
3189
3132
  ) -> Sheet:
3190
3133
  self.MT.deselect_any(rows=rows, columns=columns, redraw=False)
@@ -3386,7 +3329,7 @@ class Sheet(tk.Frame):
3386
3329
 
3387
3330
  def set_column_widths(
3388
3331
  self,
3389
- column_widths: AnyIter[float] | None = None,
3332
+ column_widths: Iterator[float] | None = None,
3390
3333
  canvas_positions: bool = False,
3391
3334
  reset: bool = False,
3392
3335
  ) -> Sheet:
@@ -3401,7 +3344,7 @@ class Sheet(tk.Frame):
3401
3344
 
3402
3345
  def set_row_heights(
3403
3346
  self,
3404
- row_heights: AnyIter[float] | None = None,
3347
+ row_heights: Iterator[float] | None = None,
3405
3348
  canvas_positions: bool = False,
3406
3349
  reset: bool = False,
3407
3350
  ) -> Sheet:
@@ -3448,7 +3391,7 @@ class Sheet(tk.Frame):
3448
3391
 
3449
3392
  delete_row_position = del_row_position
3450
3393
 
3451
- def del_row_positions(self, idxs: AnyIter[int] | None = None) -> Sheet:
3394
+ def del_row_positions(self, idxs: Iterator[int] | None = None) -> Sheet:
3452
3395
  self.MT.del_row_positions(idxs=idxs)
3453
3396
  self.set_refresh_timer()
3454
3397
  return self
@@ -3459,7 +3402,7 @@ class Sheet(tk.Frame):
3459
3402
 
3460
3403
  delete_column_position = del_column_position
3461
3404
 
3462
- def del_column_positions(self, idxs: AnyIter[int] | None = None) -> Sheet:
3405
+ def del_column_positions(self, idxs: Iterator[int] | None = None) -> Sheet:
3463
3406
  self.MT.del_col_positions(idxs=idxs)
3464
3407
  self.set_refresh_timer()
3465
3408
  return self
@@ -3736,7 +3679,7 @@ class Sheet(tk.Frame):
3736
3679
 
3737
3680
  def display_columns(
3738
3681
  self,
3739
- columns: None | Literal["all"] | AnyIter[int] = None,
3682
+ columns: None | Literal["all"] | Iterator[int] = None,
3740
3683
  all_columns_displayed: None | bool = None,
3741
3684
  reset_col_positions: bool = True,
3742
3685
  redraw: bool = False,
@@ -3760,7 +3703,7 @@ class Sheet(tk.Frame):
3760
3703
 
3761
3704
  def hide_columns(
3762
3705
  self,
3763
- columns: int | set[int] | AnyIter[int],
3706
+ columns: int | set[int] | Iterator[int],
3764
3707
  redraw: bool = True,
3765
3708
  deselect_all: bool = True,
3766
3709
  data_indexes: bool = False,
@@ -3804,7 +3747,7 @@ class Sheet(tk.Frame):
3804
3747
 
3805
3748
  def show_columns(
3806
3749
  self,
3807
- columns: int | AnyIter[int],
3750
+ columns: int | Iterator[int],
3808
3751
  redraw: bool = True,
3809
3752
  deselect_all: bool = True,
3810
3753
  ) -> Sheet:
@@ -3871,7 +3814,7 @@ class Sheet(tk.Frame):
3871
3814
 
3872
3815
  def display_rows(
3873
3816
  self,
3874
- rows: None | Literal["all"] | AnyIter[int] = None,
3817
+ rows: None | Literal["all"] | Iterator[int] = None,
3875
3818
  all_rows_displayed: None | bool = None,
3876
3819
  reset_row_positions: bool = True,
3877
3820
  redraw: bool = False,
@@ -3893,7 +3836,7 @@ class Sheet(tk.Frame):
3893
3836
 
3894
3837
  def hide_rows(
3895
3838
  self,
3896
- rows: int | set[int] | AnyIter[int],
3839
+ rows: int | set[int] | Iterator[int],
3897
3840
  redraw: bool = True,
3898
3841
  deselect_all: bool = True,
3899
3842
  data_indexes: bool = False,
@@ -3939,7 +3882,7 @@ class Sheet(tk.Frame):
3939
3882
 
3940
3883
  def show_rows(
3941
3884
  self,
3942
- rows: int | AnyIter[int],
3885
+ rows: int | Iterator[int],
3943
3886
  redraw: bool = True,
3944
3887
  deselect_all: bool = True,
3945
3888
  ) -> Sheet:
@@ -4499,7 +4442,7 @@ class Sheet(tk.Frame):
4499
4442
  def tag(
4500
4443
  self,
4501
4444
  *key: CreateSpanTypes,
4502
- tags: AnyIter[str] | str = "",
4445
+ tags: Iterator[str] | str = "",
4503
4446
  ) -> Sheet:
4504
4447
  span = self.span_from_key(*key)
4505
4448
  rows, cols = self.ranges_from_span(span)
@@ -4544,7 +4487,7 @@ class Sheet(tk.Frame):
4544
4487
 
4545
4488
  def tag_rows(
4546
4489
  self,
4547
- rows: int | AnyIter[int],
4490
+ rows: int | Iterator[int],
4548
4491
  *tags,
4549
4492
  ) -> Sheet:
4550
4493
  if isinstance(rows, int):
@@ -4557,7 +4500,7 @@ class Sheet(tk.Frame):
4557
4500
 
4558
4501
  def tag_columns(
4559
4502
  self,
4560
- columns: int | AnyIter[int],
4503
+ columns: int | Iterator[int],
4561
4504
  *tags,
4562
4505
  ) -> Sheet:
4563
4506
  if isinstance(columns, int):
@@ -4571,8 +4514,8 @@ class Sheet(tk.Frame):
4571
4514
  def untag(
4572
4515
  self,
4573
4516
  cell: tuple[int, int] | None = None,
4574
- rows: int | AnyIter[int] | None = None,
4575
- columns: int | AnyIter[int] | None = None,
4517
+ rows: int | Iterator[int] | None = None,
4518
+ columns: int | Iterator[int] | None = None,
4576
4519
  ) -> Sheet:
4577
4520
  if isinstance(cell, tuple):
4578
4521
  for tagged in self.MT.tagged_cells.values():
@@ -4632,7 +4575,7 @@ class Sheet(tk.Frame):
4632
4575
  text_column: None | int | list[str] = None,
4633
4576
  push_ops: bool = False,
4634
4577
  row_heights: Sequence[int] | None | False = None,
4635
- open_ids: AnyIter[str] | None = None,
4578
+ open_ids: Iterator[str] | None = None,
4636
4579
  safety: bool = True,
4637
4580
  ncols: int | None = None,
4638
4581
  lower: bool = False,
@@ -4640,7 +4583,9 @@ class Sheet(tk.Frame):
4640
4583
  include_parent_column: bool = True,
4641
4584
  include_text_column: bool = True,
4642
4585
  ) -> Sheet:
4643
- self.RI.tree_build(
4586
+ build = self.RI.safe_tree_build if safety else self.RI.tree_build
4587
+ self.reset(cell_options=False, column_widths=False, header=False, redraw=False)
4588
+ build(
4644
4589
  data=data,
4645
4590
  iid_column=iid_column,
4646
4591
  parent_column=parent_column,
@@ -4648,7 +4593,6 @@ class Sheet(tk.Frame):
4648
4593
  push_ops=push_ops,
4649
4594
  row_heights=row_heights,
4650
4595
  open_ids=open_ids,
4651
- safety=safety,
4652
4596
  ncols=ncols,
4653
4597
  lower=lower,
4654
4598
  include_iid_column=include_iid_column,
@@ -4668,7 +4612,7 @@ class Sheet(tk.Frame):
4668
4612
  """
4669
4613
  return self.RI.tree_open_ids
4670
4614
 
4671
- def tree_set_open(self, open_ids: AnyIter[str]) -> Sheet:
4615
+ def tree_set_open(self, open_ids: Iterator[str]) -> Sheet:
4672
4616
  """
4673
4617
  Accepts set[str] of iids that are open in the treeview
4674
4618
  Closes everything else
@@ -4695,12 +4639,12 @@ class Sheet(tk.Frame):
4695
4639
  """
4696
4640
  to_open = []
4697
4641
  disp_set = set(self.MT.displayed_rows)
4698
- tree = self.RI.tree
4699
- rns = self.RI.tree_rns
4642
+ index = self.MT._row_index
4643
+ rns = self.RI.rns
4700
4644
  open_ids = self.RI.tree_open_ids
4701
4645
  descendants = self.RI.get_iid_descendants
4702
4646
  for item in filter(items.__contains__, self.get_children()):
4703
- if tree[item].children:
4647
+ if index[rns[item]].children:
4704
4648
  open_ids.add(item)
4705
4649
  if rns[item] in disp_set:
4706
4650
  to_disp = [rns[did] for did in descendants(item, check_open=True)]
@@ -4720,20 +4664,22 @@ class Sheet(tk.Frame):
4720
4664
  deselect_all=False,
4721
4665
  )
4722
4666
 
4723
- def _tree_close(self, items: AnyIter[str]) -> list[int]:
4667
+ def _tree_close(self, items: Iterator[str]) -> list[int]:
4724
4668
  """
4725
4669
  Only meant for internal use
4726
4670
  """
4727
4671
  to_close = set()
4728
4672
  disp_set = set(self.MT.displayed_rows)
4729
- quick_rns = self.RI.tree_rns
4730
- quick_open_ids = self.RI.tree_open_ids
4673
+ index = self.MT._row_index
4674
+ rns = self.RI.rns
4675
+ open_ids = self.RI.tree_open_ids
4676
+ descendants = self.RI.get_iid_descendants
4731
4677
  for item in items:
4732
- if self.RI.tree[item].children:
4733
- quick_open_ids.discard(item)
4734
- if quick_rns[item] in disp_set:
4735
- for did in self.RI.get_iid_descendants(item, check_open=True):
4736
- to_close.add(quick_rns[did])
4678
+ if index[rns[item]].children:
4679
+ open_ids.discard(item)
4680
+ if rns[item] in disp_set:
4681
+ for did in descendants(item, check_open=True):
4682
+ to_close.add(rns[did])
4737
4683
  return to_close
4738
4684
 
4739
4685
  def tree_close(self, *items, redraw: bool = True) -> Sheet:
@@ -4766,11 +4712,11 @@ class Sheet(tk.Frame):
4766
4712
  """
4767
4713
  if not iid:
4768
4714
  iid = self.RI.new_iid()
4769
- if iid in self.RI.tree:
4715
+ if iid in self.RI.rns:
4770
4716
  raise ValueError(f"iid '{iid}' already exists.")
4771
4717
  if iid == parent:
4772
4718
  raise ValueError(f"iid '{iid}' cannot be equal to parent '{parent}'.")
4773
- if parent and parent not in self.RI.tree:
4719
+ if parent and parent not in self.RI.rns:
4774
4720
  raise ValueError(f"parent '{parent}' does not exist.")
4775
4721
  if text is None:
4776
4722
  text = iid
@@ -4779,6 +4725,7 @@ class Sheet(tk.Frame):
4779
4725
  self.insert_rows(
4780
4726
  rows=[[new_node] + ([] if values is None else values)],
4781
4727
  idx=datarn,
4728
+ heights=[],
4782
4729
  row_index=True,
4783
4730
  create_selections=create_selections,
4784
4731
  fill=False,
@@ -4793,15 +4740,15 @@ class Sheet(tk.Frame):
4793
4740
  def _get_id_insert_row(self, index: int, parent: str) -> int:
4794
4741
  if parent:
4795
4742
  if isinstance(index, int):
4796
- index = min(index, len(self.RI.tree[parent].children))
4743
+ index = min(index, len(self.RI.iid_children(parent)))
4797
4744
  datarn = (
4798
- self.RI.tree_rns[parent]
4745
+ self.RI.rns[parent]
4799
4746
  + index
4800
4747
  + 1
4801
4748
  + sum(self.RI.num_descendants(cid) for cid in islice(self.get_children(parent), index))
4802
4749
  )
4803
4750
  else:
4804
- datarn = self.RI.tree_rns[parent] + self.RI.num_descendants(parent) + 1
4751
+ datarn = self.RI.rns[parent] + self.RI.num_descendants(parent) + 1
4805
4752
  else:
4806
4753
  if isinstance(index, int):
4807
4754
  datarn = index
@@ -4832,7 +4779,7 @@ class Sheet(tk.Frame):
4832
4779
  - Values (int): row numbers
4833
4780
  """
4834
4781
  to_insert = []
4835
- if parent and parent not in self.RI.tree:
4782
+ if parent and parent not in self.RI.rns:
4836
4783
  raise ValueError(f"parent '{parent}' does not exist.")
4837
4784
  datarn = self._get_id_insert_row(index=index, parent=parent)
4838
4785
  rns_to_add = {}
@@ -4856,6 +4803,7 @@ class Sheet(tk.Frame):
4856
4803
  self.insert_rows(
4857
4804
  rows=to_insert,
4858
4805
  idx=datarn,
4806
+ heights=[],
4859
4807
  row_index=True,
4860
4808
  create_selections=create_selections,
4861
4809
  fill=False,
@@ -4873,6 +4821,8 @@ class Sheet(tk.Frame):
4873
4821
  text: str | None = None,
4874
4822
  values: list | None = None,
4875
4823
  open_: bool | None = None,
4824
+ undo: bool = True,
4825
+ emit_event: bool = True,
4876
4826
  redraw: bool = True,
4877
4827
  ) -> DotDict | Sheet:
4878
4828
  """
@@ -4880,19 +4830,17 @@ class Sheet(tk.Frame):
4880
4830
  If no options are set then returns DotDict of options for item
4881
4831
  Else returns Sheet
4882
4832
  """
4883
- if item not in self.RI.tree:
4833
+ if item not in self.RI.rns:
4884
4834
  raise ValueError(f"Item '{item}' does not exist.")
4885
- if isinstance(text, str):
4886
- self.RI.tree[item].text = text
4887
- if isinstance(values, list):
4888
- self.set_data(self.RI.tree_rns[item], data=values)
4835
+ get_only = all(param is None for param in (iid, text, values, open_))
4836
+
4889
4837
  if isinstance(open_, bool):
4890
- if self.RI.tree[item].children:
4838
+ if self.RI.iid_children(item):
4891
4839
  if open_:
4892
4840
  self.RI.tree_open_ids.add(item)
4893
4841
  if self.item_displayed(item):
4894
4842
  self.show_rows(
4895
- rows=map(self.RI.tree_rns.__getitem__, self.RI.get_iid_descendants(item, check_open=True)),
4843
+ rows=map(self.RI.rns.__getitem__, self.RI.get_iid_descendants(item, check_open=True)),
4896
4844
  redraw=False,
4897
4845
  deselect_all=False,
4898
4846
  )
@@ -4900,43 +4848,47 @@ class Sheet(tk.Frame):
4900
4848
  self.RI.tree_open_ids.discard(item)
4901
4849
  if self.item_displayed(item):
4902
4850
  self.hide_rows(
4903
- rows=set(
4904
- map(self.RI.tree_rns.__getitem__, self.RI.get_iid_descendants(item, check_open=True))
4905
- ),
4851
+ rows=set(map(self.RI.rns.__getitem__, self.RI.get_iid_descendants(item, check_open=True))),
4906
4852
  redraw=False,
4907
4853
  deselect_all=False,
4908
4854
  data_indexes=True,
4909
4855
  )
4910
4856
  else:
4911
4857
  self.RI.tree_open_ids.discard(item)
4858
+
4859
+ event_data = None if get_only else self.MT.new_event_dict("edit_table", state=True)
4860
+
4861
+ if isinstance(text, str):
4862
+ event_data.cells.index = {self.RI.rns[item]: self.MT._row_index[self.RI.rns[item]].text}
4863
+ self.MT._row_index[self.RI.rns[item]].text = text
4864
+
4865
+ if isinstance(values, list):
4866
+ span = self.span(self.RI.rns[item], undo=False, emit_event=False)
4867
+ event_data = self.set_data(span, data=values, event_data=event_data)
4868
+
4912
4869
  if isinstance(iid, str):
4913
- if iid in self.RI.tree:
4870
+ if iid in self.RI.rns:
4914
4871
  raise ValueError(f"Cannot rename '{iid}', it already exists.")
4915
- for ciid in self.RI.tree[item].children:
4916
- self.RI.tree[ciid].parent = iid
4917
- if self.RI.tree[item].parent:
4918
- parent_node = self.RI.parent_node(item)
4919
- item_index = parent_node.children.index(item)
4920
- parent_node.children[item_index] = iid
4921
- self.RI.tree[item].iid = iid
4922
- self.RI.tree[iid] = self.RI.tree.pop(item)
4923
- self.RI.tree_rns[iid] = self.RI.tree_rns.pop(item)
4924
- if item in self.RI.tree_open_ids:
4925
- self.RI.tree_open_ids.discard(item)
4926
- self.RI.tree_open_ids.add(iid)
4927
- get = not (isinstance(iid, str) or isinstance(text, str) or isinstance(values, list) or isinstance(open_, bool))
4928
- self.set_refresh_timer(redraw=not get and redraw)
4929
- if get:
4872
+ event_data = self.RI.rename_iid(old=item, new=iid, event_data=event_data)
4873
+
4874
+ if event_data:
4875
+ if undo and self.MT.undo_enabled:
4876
+ self.MT.undo_stack.append(stored_event_dict(event_data))
4877
+ if emit_event:
4878
+ self.emit_event("<<SheetModified>>", event_data)
4879
+
4880
+ self.set_refresh_timer(redraw=not get_only and redraw)
4881
+ if get_only:
4930
4882
  return DotDict(
4931
- text=self.RI.tree[item].text,
4932
- values=self[self.RI.tree_rns[item]].options(ndim=1).data,
4883
+ text=self.MT._row_index[self.RI.rns[item]].text,
4884
+ values=self[self.RI.rns[item]].options(ndim=1).data,
4933
4885
  open_=item in self.RI.tree_open_ids,
4934
4886
  )
4935
4887
  return self
4936
4888
 
4937
4889
  def itemrow(self, item: str) -> int:
4938
4890
  try:
4939
- return self.RI.tree_rns[item]
4891
+ return self.RI.rns[item]
4940
4892
  except ValueError as error:
4941
4893
  raise ValueError(f"item '{item}' does not exist.") from error
4942
4894
 
@@ -4950,30 +4902,29 @@ class Sheet(tk.Frame):
4950
4902
 
4951
4903
  def get_children(self, item: None | str = None) -> Generator[str]:
4952
4904
  if item is None:
4953
- for iid in self.get_children(""):
4954
- yield iid
4955
- yield from self.RI.get_iid_descendants(iid)
4905
+ yield from map(attrgetter("iid"), self.MT._row_index)
4956
4906
  elif item == "":
4957
4907
  yield from map(attrgetter("iid"), self.RI.gen_top_nodes())
4958
4908
  else:
4959
- yield from self.RI.tree[item].children
4909
+ yield from self.RI.iid_children(item)
4960
4910
 
4961
- def get_iids(self, item: None | str = None) -> Generator[str]:
4911
+ def tree_traverse(self, item: None | str = None) -> Generator[str]:
4962
4912
  if item is None:
4963
- for n in self.RI.tree.values():
4964
- if not n.parent:
4965
- yield n.iid
4966
- yield from self.RI.get_iid_descendants(n.iid)
4913
+ for tiid in map(attrgetter("iid"), self.RI.gen_top_nodes()):
4914
+ yield tiid
4915
+ yield from self.RI.get_iid_descendants(tiid)
4967
4916
  elif item == "":
4968
- yield from (n.iid for n in self.RI.tree.values() if not n.parent)
4917
+ yield from map(attrgetter("iid"), self.RI.gen_top_nodes())
4969
4918
  else:
4970
- yield from self.RI.tree[item].children
4919
+ yield from self.RI.iid_children(item)
4920
+
4921
+ get_iids = tree_traverse
4971
4922
 
4972
4923
  def del_items(self, *items, undo: bool = True) -> Sheet:
4973
4924
  """
4974
4925
  Also deletes all descendants of items
4975
4926
  """
4976
- rows = list(map(self.RI.tree_rns.get, filter(self.exists, unpack(items))))
4927
+ rows = list(map(self.RI.rns.get, filter(self.exists, unpack(items))))
4977
4928
  if rows:
4978
4929
  self.del_rows(rows, data_indexes=True, undo=undo)
4979
4930
  return self.set_refresh_timer(rows)
@@ -4988,7 +4939,7 @@ class Sheet(tk.Frame):
4988
4939
 
4989
4940
  def top_index_row(self, index: int) -> int:
4990
4941
  try:
4991
- return next(self.RI.tree_rns[n.iid] for i, n in enumerate(self.RI.gen_top_nodes()) if i == index)
4942
+ return next(self.RI.rns[n.iid] for i, n in enumerate(self.RI.gen_top_nodes()) if i == index)
4992
4943
  except Exception:
4993
4944
  return None
4994
4945
 
@@ -5005,9 +4956,9 @@ class Sheet(tk.Frame):
5005
4956
  Moves item to be under parent as child at index
5006
4957
  'parent' can be an empty str which will put the item at top level
5007
4958
  """
5008
- if item not in self.RI.tree:
4959
+ if item not in self.RI.rns:
5009
4960
  raise ValueError(f"Item '{item}' does not exist.")
5010
- if parent and parent not in self.RI.tree:
4961
+ if parent and parent not in self.RI.rns:
5011
4962
  raise ValueError(f"Parent '{parent}' does not exist.")
5012
4963
  if self.RI.move_pid_causes_recursive_loop(item, parent):
5013
4964
  raise ValueError(f"Item '{item}' causes recursive loop with parent '{parent}.")
@@ -5032,30 +4983,29 @@ class Sheet(tk.Frame):
5032
4983
  reattach = move
5033
4984
 
5034
4985
  def exists(self, item: str) -> bool:
5035
- return item in self.RI.tree
4986
+ return item in self.RI.rns
5036
4987
 
5037
4988
  def parent(self, item: str) -> str:
5038
- if item not in self.RI.tree:
4989
+ if item not in self.RI.rns:
5039
4990
  raise ValueError(f"Item '{item}' does not exist.")
5040
- return self.RI.tree[item].parent
4991
+ return self.RI.iid_parent(item)
5041
4992
 
5042
4993
  def index(self, item: str) -> int:
5043
- if item not in self.RI.tree:
4994
+ if item not in self.RI.rns:
5044
4995
  raise ValueError(f"Item '{item}' does not exist.")
5045
- elif self.RI.tree[item].parent:
4996
+ elif self.RI.iid_parent(item):
5046
4997
  return self.RI.parent_node(item).children.index(item)
5047
4998
  else:
5048
- find_node = self.RI.tree[item]
5049
- return next(index for index, node in enumerate(self.RI.gen_top_nodes()) if node == find_node)
4999
+ return next(index for index, iid in enumerate(self.get_children("")) if iid == item)
5050
5000
 
5051
5001
  def item_displayed(self, item: str) -> bool:
5052
5002
  """
5053
5003
  Check if an item (row) is currently displayed on the sheet
5054
5004
  - Does not check if the item is visible to the user
5055
5005
  """
5056
- if item not in self.RI.tree:
5006
+ if item not in self.RI.rns:
5057
5007
  raise ValueError(f"Item '{item}' does not exist.")
5058
- return bisect_in(self.MT.displayed_rows, self.RI.tree_rns[item])
5008
+ return bisect_in(self.MT.displayed_rows, self.RI.rns[item])
5059
5009
 
5060
5010
  def display_item(self, item: str, redraw: bool = False) -> Sheet:
5061
5011
  """
@@ -5064,7 +5014,7 @@ class Sheet(tk.Frame):
5064
5014
  - Unlike the ttk treeview 'see' function
5065
5015
  this function does **NOT** scroll to the item
5066
5016
  """
5067
- if not self.item_displayed(item) and self.RI.tree[item].parent:
5017
+ if not self.item_displayed(item) and self.RI.iid_parent(item):
5068
5018
  self.show_rows(
5069
5019
  rows=self._tree_open(list(self.RI.get_iid_ancestors(item))),
5070
5020
  redraw=False,
@@ -5078,7 +5028,7 @@ class Sheet(tk.Frame):
5078
5028
  """
5079
5029
  self.display_item(item, redraw=False)
5080
5030
  self.see(
5081
- row=bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]),
5031
+ row=bisect_left(self.MT.displayed_rows, self.RI.rns[item]),
5082
5032
  keep_xscroll=True,
5083
5033
  redraw=False,
5084
5034
  )
@@ -5113,8 +5063,8 @@ class Sheet(tk.Frame):
5113
5063
  def selection_add(self, *items, run_binding: bool = True, redraw: bool = True) -> Sheet:
5114
5064
  to_open = []
5115
5065
  quick_displayed_check = set(self.MT.displayed_rows)
5116
- for item in filter(self.RI.tree.__contains__, unpack(items)):
5117
- if self.RI.tree_rns[item] not in quick_displayed_check and self.RI.tree[item].parent:
5066
+ for item in filter(self.RI.rns.__contains__, unpack(items)):
5067
+ if self.RI.rns[item] not in quick_displayed_check and self.RI.iid_parent(item):
5118
5068
  to_open.extend(list(self.RI.get_iid_ancestors(item)))
5119
5069
  if to_open:
5120
5070
  self.show_rows(
@@ -5126,9 +5076,9 @@ class Sheet(tk.Frame):
5126
5076
  sorted(
5127
5077
  bisect_left(
5128
5078
  self.MT.displayed_rows,
5129
- self.RI.tree_rns[item],
5079
+ self.RI.rns[item],
5130
5080
  )
5131
- for item in filter(self.RI.tree.__contains__, unpack(items))
5081
+ for item in filter(self.RI.rns.__contains__, unpack(items))
5132
5082
  )
5133
5083
  ):
5134
5084
  self.MT.create_selection_box(
@@ -5146,10 +5096,10 @@ class Sheet(tk.Frame):
5146
5096
 
5147
5097
  def selection_remove(self, *items, redraw: bool = True) -> Sheet:
5148
5098
  for item in unpack(items):
5149
- if item not in self.RI.tree:
5099
+ if item not in self.RI.rns:
5150
5100
  continue
5151
5101
  try:
5152
- self.deselect(bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]), redraw=False)
5102
+ self.deselect(bisect_left(self.MT.displayed_rows, self.RI.rns[item]), redraw=False)
5153
5103
  except Exception:
5154
5104
  continue
5155
5105
  return self.set_refresh_timer(redraw)
@@ -5159,7 +5109,7 @@ class Sheet(tk.Frame):
5159
5109
  add = []
5160
5110
  remove = []
5161
5111
  for item in unpack(items):
5162
- if item in self.RI.tree:
5112
+ if item in self.RI.rns:
5163
5113
  if item in selected:
5164
5114
  remove.append(item)
5165
5115
  else:
@@ -5307,7 +5257,7 @@ class Sheet(tk.Frame):
5307
5257
  get_displayed: bool = False,
5308
5258
  get_index: bool = False,
5309
5259
  get_index_displayed: bool = True,
5310
- only_columns: int | AnyIter[int] | None = None,
5260
+ only_columns: int | Iterator[int] | None = None,
5311
5261
  ) -> list[Any]:
5312
5262
  if only_columns is not None:
5313
5263
  if isinstance(only_columns, int):
@@ -5333,7 +5283,7 @@ class Sheet(tk.Frame):
5333
5283
  get_displayed: bool = False,
5334
5284
  get_header: bool = False,
5335
5285
  get_header_displayed: bool = True,
5336
- only_rows: int | AnyIter[int] | None = None,
5286
+ only_rows: int | Iterator[int] | None = None,
5337
5287
  ) -> list[Any]:
5338
5288
  if only_rows is not None:
5339
5289
  if isinstance(only_rows, int):
@@ -5353,8 +5303,8 @@ class Sheet(tk.Frame):
5353
5303
  get_index: bool = False,
5354
5304
  get_header_displayed: bool = True,
5355
5305
  get_index_displayed: bool = True,
5356
- only_rows: AnyIter[int] | int | None = None,
5357
- only_columns: AnyIter[int] | int | None = None,
5306
+ only_rows: Iterator[int] | int | None = None,
5307
+ only_columns: Iterator[int] | int | None = None,
5358
5308
  ) -> list[list[Any]]:
5359
5309
  if only_rows is not None:
5360
5310
  if isinstance(only_rows, int):
@@ -5407,8 +5357,8 @@ class Sheet(tk.Frame):
5407
5357
  get_index: bool = False,
5408
5358
  get_index_displayed: bool = True,
5409
5359
  get_header_displayed: bool = True,
5410
- only_rows: int | AnyIter[int] | None = None,
5411
- only_columns: int | AnyIter[int] | None = None,
5360
+ only_rows: int | Iterator[int] | None = None,
5361
+ only_columns: int | Iterator[int] | None = None,
5412
5362
  ) -> Generator[list[Any]]:
5413
5363
  if only_rows is not None:
5414
5364
  if isinstance(only_rows, int):
@@ -5667,7 +5617,7 @@ class Sheet(tk.Frame):
5667
5617
 
5668
5618
  def highlight_rows(
5669
5619
  self,
5670
- rows: AnyIter[int] | int,
5620
+ rows: Iterator[int] | int,
5671
5621
  bg: None | str = None,
5672
5622
  fg: None | str = None,
5673
5623
  highlight_index: bool = True,
@@ -5685,7 +5635,7 @@ class Sheet(tk.Frame):
5685
5635
 
5686
5636
  def highlight_columns(
5687
5637
  self,
5688
- columns: AnyIter[int] | int,
5638
+ columns: Iterator[int] | int,
5689
5639
  bg: bool | None | str = False,
5690
5640
  fg: bool | None | str = False,
5691
5641
  highlight_header: bool = True,
@@ -5987,7 +5937,7 @@ class Sheet(tk.Frame):
5987
5937
 
5988
5938
  def checkbox_row(
5989
5939
  self,
5990
- r: AnyIter[int] | int | Literal["all"] = 0,
5940
+ r: Iterator[int] | int | Literal["all"] = 0,
5991
5941
  *args,
5992
5942
  **kwargs,
5993
5943
  ) -> None:
@@ -6012,7 +5962,7 @@ class Sheet(tk.Frame):
6012
5962
 
6013
5963
  def checkbox_column(
6014
5964
  self,
6015
- c: AnyIter[int] | int | Literal["all"] = 0,
5965
+ c: Iterator[int] | int | Literal["all"] = 0,
6016
5966
  *args,
6017
5967
  **kwargs,
6018
5968
  ) -> None:
@@ -6037,7 +5987,7 @@ class Sheet(tk.Frame):
6037
5987
 
6038
5988
  def create_header_checkbox(
6039
5989
  self,
6040
- c: AnyIter[int] | int | Literal["all"] = 0,
5990
+ c: Iterator[int] | int | Literal["all"] = 0,
6041
5991
  *args,
6042
5992
  **kwargs,
6043
5993
  ) -> None:
@@ -6060,7 +6010,7 @@ class Sheet(tk.Frame):
6060
6010
 
6061
6011
  def create_index_checkbox(
6062
6012
  self,
6063
- r: AnyIter[int] | int | Literal["all"] = 0,
6013
+ r: Iterator[int] | int | Literal["all"] = 0,
6064
6014
  *args,
6065
6015
  **kwargs,
6066
6016
  ) -> None:
@@ -6110,7 +6060,7 @@ class Sheet(tk.Frame):
6110
6060
 
6111
6061
  def delete_row_checkbox(
6112
6062
  self,
6113
- r: AnyIter[int] | int | Literal["all"] = 0,
6063
+ r: Iterator[int] | int | Literal["all"] = 0,
6114
6064
  ) -> None:
6115
6065
  if isinstance(r, str) and r.lower() == "all":
6116
6066
  for r_ in self.MT.row_options:
@@ -6123,7 +6073,7 @@ class Sheet(tk.Frame):
6123
6073
 
6124
6074
  def delete_column_checkbox(
6125
6075
  self,
6126
- c: AnyIter[int] | int | Literal["all"] = 0,
6076
+ c: Iterator[int] | int | Literal["all"] = 0,
6127
6077
  ) -> None:
6128
6078
  if isinstance(c, str) and c.lower() == "all":
6129
6079
  for c_ in self.MT.col_options:
@@ -6136,7 +6086,7 @@ class Sheet(tk.Frame):
6136
6086
 
6137
6087
  def delete_header_checkbox(
6138
6088
  self,
6139
- c: AnyIter[int] | int | Literal["all"] = 0,
6089
+ c: Iterator[int] | int | Literal["all"] = 0,
6140
6090
  ) -> None:
6141
6091
  if isinstance(c, str) and c.lower() == "all":
6142
6092
  for c_ in self.CH.cell_options:
@@ -6150,7 +6100,7 @@ class Sheet(tk.Frame):
6150
6100
 
6151
6101
  def delete_index_checkbox(
6152
6102
  self,
6153
- r: AnyIter[int] | int | Literal["all"] = 0,
6103
+ r: Iterator[int] | int | Literal["all"] = 0,
6154
6104
  ) -> None:
6155
6105
  if isinstance(r, str) and r.lower() == "all":
6156
6106
  for r_ in self.RI.cell_options:
@@ -6240,7 +6190,7 @@ class Sheet(tk.Frame):
6240
6190
 
6241
6191
  def dropdown_row(
6242
6192
  self,
6243
- r: AnyIter[int] | int | Literal["all"] = 0,
6193
+ r: Iterator[int] | int | Literal["all"] = 0,
6244
6194
  *args,
6245
6195
  **kwargs,
6246
6196
  ) -> Sheet:
@@ -6265,7 +6215,7 @@ class Sheet(tk.Frame):
6265
6215
 
6266
6216
  def dropdown_column(
6267
6217
  self,
6268
- c: AnyIter[int] | int | Literal["all"] = 0,
6218
+ c: Iterator[int] | int | Literal["all"] = 0,
6269
6219
  *args,
6270
6220
  **kwargs,
6271
6221
  ) -> Sheet:
@@ -6290,7 +6240,7 @@ class Sheet(tk.Frame):
6290
6240
 
6291
6241
  def create_header_dropdown(
6292
6242
  self,
6293
- c: AnyIter[int] | int | Literal["all"] = 0,
6243
+ c: Iterator[int] | int | Literal["all"] = 0,
6294
6244
  *args,
6295
6245
  **kwargs,
6296
6246
  ) -> Sheet:
@@ -6314,7 +6264,7 @@ class Sheet(tk.Frame):
6314
6264
 
6315
6265
  def create_index_dropdown(
6316
6266
  self,
6317
- r: AnyIter[int] | int | Literal["all"] = 0,
6267
+ r: Iterator[int] | int | Literal["all"] = 0,
6318
6268
  *args,
6319
6269
  **kwargs,
6320
6270
  ) -> Sheet:
@@ -6365,7 +6315,7 @@ class Sheet(tk.Frame):
6365
6315
 
6366
6316
  def delete_row_dropdown(
6367
6317
  self,
6368
- r: AnyIter[int] | int | Literal["all"] = "all",
6318
+ r: Iterator[int] | int | Literal["all"] = "all",
6369
6319
  ) -> None:
6370
6320
  if isinstance(r, str) and r.lower() == "all":
6371
6321
  for r_ in self.MT.row_options:
@@ -6379,7 +6329,7 @@ class Sheet(tk.Frame):
6379
6329
 
6380
6330
  def delete_column_dropdown(
6381
6331
  self,
6382
- c: AnyIter[int] | int | Literal["all"] = "all",
6332
+ c: Iterator[int] | int | Literal["all"] = "all",
6383
6333
  ) -> None:
6384
6334
  if isinstance(c, str) and c.lower() == "all":
6385
6335
  for c_ in self.MT.col_options:
@@ -6391,7 +6341,7 @@ class Sheet(tk.Frame):
6391
6341
  for c_ in c:
6392
6342
  self.del_column_options_dropdown(datacn=c_)
6393
6343
 
6394
- def delete_header_dropdown(self, c: AnyIter[int] | int | Literal["all"]) -> None:
6344
+ def delete_header_dropdown(self, c: Iterator[int] | int | Literal["all"]) -> None:
6395
6345
  if isinstance(c, str) and c.lower() == "all":
6396
6346
  for c_ in self.CH.cell_options:
6397
6347
  if "dropdown" in self.CH.cell_options[c_]:
@@ -6402,7 +6352,7 @@ class Sheet(tk.Frame):
6402
6352
  for c_ in c:
6403
6353
  self.del_header_cell_options_dropdown(c_)
6404
6354
 
6405
- def delete_index_dropdown(self, r: AnyIter[int] | int | Literal["all"]) -> None:
6355
+ def delete_index_dropdown(self, r: Iterator[int] | int | Literal["all"]) -> None:
6406
6356
  if isinstance(r, str) and r.lower() == "all":
6407
6357
  for r_ in self.RI.cell_options:
6408
6358
  if "dropdown" in self.RI.cell_options[r_]:
@@ -6638,7 +6588,7 @@ class Sheet(tk.Frame):
6638
6588
 
6639
6589
  def format_row(
6640
6590
  self,
6641
- r: AnyIter[int] | int | Literal["all"],
6591
+ r: Iterator[int] | int | Literal["all"],
6642
6592
  formatter_options: dict | None = None,
6643
6593
  formatter_class: Any = None,
6644
6594
  redraw: bool = True,
@@ -6670,7 +6620,7 @@ class Sheet(tk.Frame):
6670
6620
 
6671
6621
  def delete_row_format(
6672
6622
  self,
6673
- r: AnyIter[int] | int | Literal["all"] = "all",
6623
+ r: Iterator[int] | int | Literal["all"] = "all",
6674
6624
  clear_values: bool = False,
6675
6625
  ) -> Sheet:
6676
6626
  if is_iterable(r):
@@ -6682,7 +6632,7 @@ class Sheet(tk.Frame):
6682
6632
 
6683
6633
  def format_column(
6684
6634
  self,
6685
- c: AnyIter[int] | int | Literal["all"],
6635
+ c: Iterator[int] | int | Literal["all"],
6686
6636
  formatter_options: dict | None = None,
6687
6637
  formatter_class: Any = None,
6688
6638
  redraw: bool = True,
@@ -6714,7 +6664,7 @@ class Sheet(tk.Frame):
6714
6664
 
6715
6665
  def delete_column_format(
6716
6666
  self,
6717
- c: AnyIter[int] | int | Literal["all"] = "all",
6667
+ c: Iterator[int] | int | Literal["all"] = "all",
6718
6668
  clear_values: bool = False,
6719
6669
  ) -> Sheet:
6720
6670
  if is_iterable(c):