tksheet 7.1.3__py3-none-any.whl → 7.1.5__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
@@ -75,6 +75,7 @@ from .functions import (
75
75
  )
76
76
  from .other_classes import (
77
77
  Box_nt,
78
+ Box_st,
78
79
  Box_t,
79
80
  DotDict,
80
81
  DropdownStorage,
@@ -1802,7 +1803,7 @@ class MainTable(tk.Canvas):
1802
1803
  cells=False,
1803
1804
  ):
1804
1805
  self.hide_selection_box(item)
1805
- elif r is not None and c is None and cell is None:
1806
+ elif isinstance(r, int) and c is None and cell is None:
1806
1807
  for item, box in self.get_selection_items(columns=False, cells=False):
1807
1808
  r1, c1, r2, c2 = box.coords
1808
1809
  if r >= r1 and r < r2:
@@ -1846,7 +1847,7 @@ class MainTable(tk.Canvas):
1846
1847
  set_current=resel and to_sel >= r + 1 and to_sel < r2,
1847
1848
  )
1848
1849
  break
1849
- elif c is not None and r is None and cell is None:
1850
+ elif isinstance(c, int) and r is None and cell is None:
1850
1851
  for item, box in self.get_selection_items(rows=False, cells=False):
1851
1852
  r1, c1, r2, c2 = box.coords
1852
1853
  if c >= c1 and c < c2:
@@ -1890,7 +1891,7 @@ class MainTable(tk.Canvas):
1890
1891
  set_current=resel and to_sel >= c + 1 and to_sel < c2,
1891
1892
  )
1892
1893
  break
1893
- elif (r is not None and c is not None and cell is None) or cell is not None:
1894
+ elif (isinstance(r, int) and isinstance(c, int) and cell is None) or cell is not None:
1894
1895
  if cell is not None:
1895
1896
  r, c = cell[0], cell[1]
1896
1897
  for item, box in self.get_selection_items(reverse=True):
@@ -1908,11 +1909,11 @@ class MainTable(tk.Canvas):
1908
1909
  def page_UP(self, event=None):
1909
1910
  height = self.winfo_height()
1910
1911
  top = self.canvasy(0)
1911
- scrollto = top - height
1912
- if scrollto < 0:
1913
- scrollto = 0
1912
+ scrollto_y = top - height
1913
+ if scrollto_y < 0:
1914
+ scrollto_y = 0
1914
1915
  if self.PAR.ops.page_up_down_select_row:
1915
- r = bisect_left(self.row_positions, scrollto)
1916
+ r = bisect_left(self.row_positions, scrollto_y)
1916
1917
  if self.selected and self.selected.row == r:
1917
1918
  r -= 1
1918
1919
  if r < 0:
@@ -1925,11 +1926,11 @@ class MainTable(tk.Canvas):
1925
1926
  elif (self.single_selection_enabled or self.toggle_selection_enabled) and self.anything_selected(
1926
1927
  exclude_columns=True, exclude_rows=True
1927
1928
  ):
1928
- box = self.get_all_selection_boxes_with_types()[0][0]
1929
- self.see(r, box[1], keep_xscroll=True, check_cell_visibility=False)
1930
- self.select_cell(r, box[1])
1929
+ c = next(reversed(self.selection_boxes.values())).coords.from_c
1930
+ self.see(r, c, keep_xscroll=True, check_cell_visibility=False)
1931
+ self.select_cell(r, c)
1931
1932
  else:
1932
- args = ("moveto", scrollto / (self.row_positions[-1] + 100))
1933
+ args = ("moveto", scrollto_y / (self.row_positions[-1] + 100))
1933
1934
  self.yview(*args)
1934
1935
  self.RI.yview(*args)
1935
1936
  self.main_table_redraw_grid_and_text(redraw_row_index=True)
@@ -1952,9 +1953,9 @@ class MainTable(tk.Canvas):
1952
1953
  elif (self.single_selection_enabled or self.toggle_selection_enabled) and self.anything_selected(
1953
1954
  exclude_columns=True, exclude_rows=True
1954
1955
  ):
1955
- box = self.get_all_selection_boxes_with_types()[0][0]
1956
- self.see(r, box[1], keep_xscroll=True, check_cell_visibility=False)
1957
- self.select_cell(r, box[1])
1956
+ c = next(reversed(self.selection_boxes.values())).coords.from_c
1957
+ self.see(r, c, keep_xscroll=True, check_cell_visibility=False)
1958
+ self.select_cell(r, c)
1958
1959
  else:
1959
1960
  end = self.row_positions[-1]
1960
1961
  if scrollto > end + 100:
@@ -1969,7 +1970,7 @@ class MainTable(tk.Canvas):
1969
1970
  return
1970
1971
  if self.selected.type_ == "rows":
1971
1972
  r = self.selected.row
1972
- if r != 0 and self.RI.row_selection_enabled:
1973
+ if r and self.RI.row_selection_enabled:
1973
1974
  if self.cell_completely_visible(r=r - 1, c=0):
1974
1975
  self.RI.select_row(r - 1, redraw=True)
1975
1976
  else:
@@ -1978,63 +1979,16 @@ class MainTable(tk.Canvas):
1978
1979
  elif self.selected.type_ in ("cells", "columns"):
1979
1980
  r = self.selected.row
1980
1981
  c = self.selected.column
1981
- if r == 0 and self.CH.col_selection_enabled:
1982
+ if not r and self.CH.col_selection_enabled:
1982
1983
  if not self.cell_completely_visible(r=r, c=0):
1983
- self.see(r, c, keep_xscroll=True, check_cell_visibility=False)
1984
- elif r != 0 and (self.single_selection_enabled or self.toggle_selection_enabled):
1984
+ self.see(r, c, check_cell_visibility=False)
1985
+ elif r and (self.single_selection_enabled or self.toggle_selection_enabled):
1985
1986
  if self.cell_completely_visible(r=r - 1, c=c):
1986
1987
  self.select_cell(r - 1, c, redraw=True)
1987
1988
  else:
1988
1989
  self.select_cell(r - 1, c)
1989
1990
  self.see(r - 1, c, keep_xscroll=True, check_cell_visibility=False)
1990
1991
 
1991
- def arrowkey_RIGHT(self, event=None):
1992
- if not self.selected:
1993
- return
1994
- if self.selected.type_ == "rows":
1995
- r = self.selected.row
1996
- if self.single_selection_enabled or self.toggle_selection_enabled:
1997
- if self.cell_completely_visible(r=r, c=0):
1998
- self.select_cell(r, 0, redraw=True)
1999
- else:
2000
- self.select_cell(r, 0)
2001
- self.see(
2002
- r,
2003
- 0,
2004
- keep_yscroll=True,
2005
- bottom_right_corner=True,
2006
- check_cell_visibility=False,
2007
- )
2008
- elif self.selected.type_ == "columns":
2009
- c = self.selected.column
2010
- if c < len(self.col_positions) - 2 and self.CH.col_selection_enabled:
2011
- if self.cell_completely_visible(r=0, c=c + 1):
2012
- self.CH.select_col(c + 1, redraw=True)
2013
- else:
2014
- self.CH.select_col(c + 1)
2015
- self.see(
2016
- 0,
2017
- c + 1,
2018
- keep_yscroll=True,
2019
- bottom_right_corner=False if self.PAR.ops.arrow_key_down_right_scroll_page else True,
2020
- check_cell_visibility=False,
2021
- )
2022
- else:
2023
- r = self.selected.row
2024
- c = self.selected.column
2025
- if c < len(self.col_positions) - 2 and (self.single_selection_enabled or self.toggle_selection_enabled):
2026
- if self.cell_completely_visible(r=r, c=c + 1):
2027
- self.select_cell(r, c + 1, redraw=True)
2028
- else:
2029
- self.select_cell(r, c + 1)
2030
- self.see(
2031
- r,
2032
- c + 1,
2033
- keep_yscroll=True,
2034
- bottom_right_corner=False if self.PAR.ops.arrow_key_down_right_scroll_page else True,
2035
- check_cell_visibility=False,
2036
- )
2037
-
2038
1992
  def arrowkey_DOWN(self, event=None):
2039
1993
  if not self.selected:
2040
1994
  return
@@ -2070,15 +2024,17 @@ class MainTable(tk.Canvas):
2070
2024
  elif self.selected.type_ == "columns":
2071
2025
  c = self.selected.column
2072
2026
  if self.single_selection_enabled or self.toggle_selection_enabled:
2073
- if self.cell_completely_visible(r=0, c=c):
2074
- self.select_cell(0, c, redraw=True)
2027
+ if self.selected.row == len(self.row_positions) - 2:
2028
+ r = self.selected.row
2075
2029
  else:
2076
- self.select_cell(0, c)
2030
+ r = self.selected.row + 1
2031
+ if self.cell_completely_visible(r=r, c=c):
2032
+ self.select_cell(r, c, redraw=True)
2033
+ else:
2034
+ self.select_cell(r, c)
2077
2035
  self.see(
2078
- 0,
2036
+ r,
2079
2037
  c,
2080
- keep_xscroll=True,
2081
- bottom_right_corner=True,
2082
2038
  check_cell_visibility=False,
2083
2039
  )
2084
2040
  else:
@@ -2117,7 +2073,7 @@ class MainTable(tk.Canvas):
2117
2073
  return
2118
2074
  if self.selected.type_ == "columns":
2119
2075
  c = self.selected.column
2120
- if c != 0 and self.CH.col_selection_enabled:
2076
+ if c and self.CH.col_selection_enabled:
2121
2077
  if self.cell_completely_visible(r=0, c=c - 1):
2122
2078
  self.CH.select_col(c - 1, redraw=True)
2123
2079
  else:
@@ -2129,19 +2085,70 @@ class MainTable(tk.Canvas):
2129
2085
  bottom_right_corner=True,
2130
2086
  check_cell_visibility=False,
2131
2087
  )
2088
+ elif self.selected.type_ == "rows" and self.selected.column:
2089
+ self.select_cell(self.selected.row, self.selected.column - 1)
2090
+ self.see(self.selected.row, self.selected.column, check_cell_visibility=True)
2132
2091
  elif self.selected.type_ == "cells":
2133
2092
  r = self.selected.row
2134
2093
  c = self.selected.column
2135
- if c == 0 and self.RI.row_selection_enabled:
2136
- if not self.cell_completely_visible(r=r, c=0):
2137
- self.see(r, c, keep_yscroll=True, check_cell_visibility=False)
2138
- elif c != 0 and (self.single_selection_enabled or self.toggle_selection_enabled):
2094
+ if not c and not self.cell_completely_visible(r=r, c=0):
2095
+ self.see(r, c, keep_yscroll=True, check_cell_visibility=False)
2096
+ elif c and (self.single_selection_enabled or self.toggle_selection_enabled):
2139
2097
  if self.cell_completely_visible(r=r, c=c - 1):
2140
2098
  self.select_cell(r, c - 1, redraw=True)
2141
2099
  else:
2142
2100
  self.select_cell(r, c - 1)
2143
2101
  self.see(r, c - 1, keep_yscroll=True, check_cell_visibility=False)
2144
2102
 
2103
+ def arrowkey_RIGHT(self, event=None):
2104
+ if not self.selected:
2105
+ return
2106
+ if self.selected.type_ == "rows":
2107
+ r = self.selected.row
2108
+ if self.single_selection_enabled or self.toggle_selection_enabled:
2109
+ if self.selected.column == len(self.col_positions) - 2:
2110
+ c = self.selected.column
2111
+ else:
2112
+ c = self.selected.column + 1
2113
+ if self.cell_completely_visible(r=r, c=c):
2114
+ self.select_cell(r, c, redraw=True)
2115
+ else:
2116
+ self.select_cell(r, c)
2117
+ self.see(
2118
+ r,
2119
+ c,
2120
+ check_cell_visibility=False,
2121
+ )
2122
+ elif self.selected.type_ == "columns":
2123
+ c = self.selected.column
2124
+ if c < len(self.col_positions) - 2 and self.CH.col_selection_enabled:
2125
+ if self.cell_completely_visible(r=0, c=c + 1):
2126
+ self.CH.select_col(c + 1, redraw=True)
2127
+ else:
2128
+ self.CH.select_col(c + 1)
2129
+ self.see(
2130
+ 0,
2131
+ c + 1,
2132
+ keep_yscroll=True,
2133
+ bottom_right_corner=False if self.PAR.ops.arrow_key_down_right_scroll_page else True,
2134
+ check_cell_visibility=False,
2135
+ )
2136
+ else:
2137
+ r = self.selected.row
2138
+ c = self.selected.column
2139
+ if c < len(self.col_positions) - 2 and (self.single_selection_enabled or self.toggle_selection_enabled):
2140
+ if self.cell_completely_visible(r=r, c=c + 1):
2141
+ self.select_cell(r, c + 1, redraw=True)
2142
+ else:
2143
+ self.select_cell(r, c + 1)
2144
+ self.see(
2145
+ r,
2146
+ c + 1,
2147
+ keep_yscroll=True,
2148
+ bottom_right_corner=False if self.PAR.ops.arrow_key_down_right_scroll_page else True,
2149
+ check_cell_visibility=False,
2150
+ )
2151
+
2145
2152
  def key_bindings(self) -> None:
2146
2153
  for widget in (self, self.RI, self.CH, self.TL):
2147
2154
  for binding in self.PAR.ops.copy_bindings:
@@ -3375,7 +3382,7 @@ class MainTable(tk.Canvas):
3375
3382
  def set_table_font_help(self):
3376
3383
  self.table_txt_width, self.table_txt_height = self.get_txt_dimensions("|", self.PAR.ops.table_font)
3377
3384
  self.table_half_txt_height = ceil(self.table_txt_height / 2)
3378
- if self.table_half_txt_height % 2 == 0:
3385
+ if not self.table_half_txt_height % 2:
3379
3386
  self.table_first_ln_ins = self.table_half_txt_height + 2
3380
3387
  else:
3381
3388
  self.table_first_ln_ins = self.table_half_txt_height + 3
@@ -3403,7 +3410,7 @@ class MainTable(tk.Canvas):
3403
3410
  def set_header_font_help(self):
3404
3411
  self.header_txt_width, self.header_txt_height = self.get_txt_dimensions("|", self.PAR.ops.header_font)
3405
3412
  self.header_half_txt_height = ceil(self.header_txt_height / 2)
3406
- if self.header_half_txt_height % 2 == 0:
3413
+ if not self.header_half_txt_height % 2:
3407
3414
  self.header_first_ln_ins = self.header_half_txt_height + 2
3408
3415
  else:
3409
3416
  self.header_first_ln_ins = self.header_half_txt_height + 3
@@ -3434,7 +3441,7 @@ class MainTable(tk.Canvas):
3434
3441
  def set_index_font_help(self):
3435
3442
  self.index_txt_width, self.index_txt_height = self.get_txt_dimensions("|", self.PAR.ops.index_font)
3436
3443
  self.index_half_txt_height = ceil(self.index_txt_height / 2)
3437
- if self.index_half_txt_height % 2 == 0:
3444
+ if not self.index_half_txt_height % 2:
3438
3445
  self.index_first_ln_ins = self.index_half_txt_height + 2
3439
3446
  else:
3440
3447
  self.index_first_ln_ins = self.index_half_txt_height + 3
@@ -3561,19 +3568,22 @@ class MainTable(tk.Canvas):
3561
3568
  else:
3562
3569
  return False
3563
3570
 
3564
- def set_all_cell_sizes_to_text(self, include_index: bool = False) -> tuple[list[float], list[float]]:
3571
+ def set_all_cell_sizes_to_text(self, w: int | None = None) -> tuple[list[float], list[float]]:
3565
3572
  min_column_width = int(self.min_column_width)
3566
3573
  min_rh = int(self.min_row_height)
3567
- w = min_column_width
3574
+ w = min_column_width if w is None else w
3568
3575
  h = min_rh
3569
3576
  rhs = defaultdict(lambda: int(min_rh))
3570
3577
  cws = []
3571
- itmcon = self.txt_measure_canvas.itemconfig
3572
- itmbbx = self.txt_measure_canvas.bbox
3573
- self.txt_measure_canvas.itemconfig(self.txt_measure_canvas_text, font=self.PAR.ops.table_font)
3578
+ qconf = self.txt_measure_canvas.itemconfig
3579
+ qbbox = self.txt_measure_canvas.bbox
3580
+ qtxtm = self.txt_measure_canvas_text
3581
+ qtxth = self.table_txt_height
3582
+ qfont = self.PAR.ops.table_font
3574
3583
  numrows = self.total_data_rows()
3584
+ numcols = self.total_data_cols()
3575
3585
  if self.all_columns_displayed:
3576
- itercols = range(self.total_data_cols())
3586
+ itercols = range(numcols)
3577
3587
  else:
3578
3588
  itercols = self.displayed_columns
3579
3589
  if self.all_rows_displayed:
@@ -3590,23 +3600,28 @@ class MainTable(tk.Canvas):
3590
3600
  if h > rhs[datarn]:
3591
3601
  rhs[datarn] = h
3592
3602
  for datacn in itercols:
3593
- w, h_ = self.CH.get_cell_dimensions(datacn)
3594
- if self.all_rows_displayed:
3595
- iterrows = range(numrows)
3603
+ if (hw := self.CH.get_cell_dimensions(datacn)[0]) > w:
3604
+ w = hw
3596
3605
  for datarn in iterrows:
3597
3606
  txt = self.get_valid_cell_data_as_str(datarn, datacn, get_displayed=True)
3598
3607
  if txt:
3599
- itmcon(self.txt_measure_canvas_text, text=txt)
3600
- b = itmbbx(self.txt_measure_canvas_text)
3608
+ qconf(qtxtm, text=txt, font=qfont)
3609
+ b = qbbox(qtxtm)
3601
3610
  tw = b[2] - b[0] + 7
3602
3611
  h = b[3] - b[1] + 5
3603
3612
  else:
3604
3613
  tw = min_column_width
3605
3614
  h = min_rh
3606
- if self.get_cell_kwargs(datarn, datacn, key="dropdown") or self.get_cell_kwargs(
3607
- datarn, datacn, key="checkbox"
3615
+ if self.get_cell_kwargs(
3616
+ datarn,
3617
+ datacn,
3618
+ key="dropdown",
3619
+ ) or self.get_cell_kwargs(
3620
+ datarn,
3621
+ datacn,
3622
+ key="checkbox",
3608
3623
  ):
3609
- tw += self.table_txt_height
3624
+ tw += qtxth
3610
3625
  if tw > w:
3611
3626
  w = tw
3612
3627
  if h < min_rh:
@@ -3620,8 +3635,8 @@ class MainTable(tk.Canvas):
3620
3635
  elif w > self.max_column_width:
3621
3636
  w = int(self.max_column_width)
3622
3637
  cws.append(w)
3623
- self.set_row_positions(itr=(height for height in rhs.values()))
3624
- self.set_col_positions(itr=(width for width in cws))
3638
+ self.set_row_positions(itr=rhs.values())
3639
+ self.set_col_positions(itr=cws)
3625
3640
  self.recreate_all_selection_boxes()
3626
3641
  return self.row_positions, self.col_positions
3627
3642
 
@@ -5583,6 +5598,9 @@ class MainTable(tk.Canvas):
5583
5598
  columns: bool = True,
5584
5599
  reverse: bool = False,
5585
5600
  ) -> Generator[int]:
5601
+ """
5602
+ Most recent selection box should be last
5603
+ """
5586
5604
  itr = reversed(self.selection_boxes.items()) if reverse else self.selection_boxes.items()
5587
5605
  return tuple(
5588
5606
  (iid, box)
@@ -5590,7 +5608,7 @@ class MainTable(tk.Canvas):
5590
5608
  if cells and box.type_ == "cells" or rows and box.type_ == "rows" or columns and box.type_ == "columns"
5591
5609
  )
5592
5610
 
5593
- def get_boxes(self) -> dict:
5611
+ def get_boxes(self) -> dict[Box_nt, Literal["cells", "rows", "columns"]]:
5594
5612
  return {box.coords: box.type_ for box in self.selection_boxes.values()}
5595
5613
 
5596
5614
  def reselect_from_get_boxes(
@@ -5685,6 +5703,7 @@ class MainTable(tk.Canvas):
5685
5703
  c: int,
5686
5704
  type_: Literal["cells", "rows", "columns"],
5687
5705
  fill_iid: int,
5706
+ lower_selection_boxes: bool = True,
5688
5707
  ) -> int:
5689
5708
  fill, outline = self.get_selected_box_bg_fg(type_=type_)
5690
5709
  x1 = self.col_positions[c] + 1
@@ -5695,6 +5714,7 @@ class MainTable(tk.Canvas):
5695
5714
  if self.PAR.ops.show_selected_cells_border:
5696
5715
  fill = ""
5697
5716
  else:
5717
+ fill = outline
5698
5718
  outline = ""
5699
5719
  iid = self.display_box(
5700
5720
  x1,
@@ -5715,10 +5735,7 @@ class MainTable(tk.Canvas):
5715
5735
  iid=iid,
5716
5736
  fill_iid=fill_iid,
5717
5737
  )
5718
- if self.PAR.ops.show_selected_cells_border:
5719
- self.tag_raise(iid)
5720
- else:
5721
- self.tag_lower(iid)
5738
+ if lower_selection_boxes:
5722
5739
  self.lower_selection_boxes()
5723
5740
  return iid
5724
5741
 
@@ -5867,19 +5884,25 @@ class MainTable(tk.Canvas):
5867
5884
  elif isinstance(set_current, tuple):
5868
5885
  curr_r = set_current[0]
5869
5886
  curr_c = set_current[1]
5870
- self.create_currently_selected_box(curr_r, curr_c, type_, fill_iid)
5887
+ self.create_currently_selected_box(curr_r, curr_c, type_, fill_iid, lower_selection_boxes=False)
5871
5888
  self.lower_selection_boxes()
5872
5889
  if run_binding:
5873
5890
  self.run_selection_binding(type_)
5874
5891
  return fill_iid
5875
5892
 
5876
5893
  def lower_selection_boxes(self) -> None:
5877
- for iid, box in reversed(self.selection_boxes.items()):
5878
- self.tag_lower(iid)
5879
- self.RI.tag_lower(box.index)
5880
- self.CH.tag_lower(box.header)
5881
- if self.PAR.ops.show_selected_cells_border and self.selected:
5882
- self.tag_raise(self.selected.iid)
5894
+ if self.selected:
5895
+ if not self.PAR.ops.show_selected_cells_border:
5896
+ self.tag_lower(self.selected.iid)
5897
+ self.tag_lower("rows")
5898
+ self.tag_lower("columns")
5899
+ self.tag_lower("cells")
5900
+ self.RI.tag_lower("rows")
5901
+ self.RI.tag_lower("cells")
5902
+ self.CH.tag_lower("columns")
5903
+ self.CH.tag_lower("cells")
5904
+ if self.PAR.ops.show_selected_cells_border:
5905
+ self.tag_raise(self.selected.iid)
5883
5906
 
5884
5907
  def recreate_selection_box(
5885
5908
  self,
@@ -6216,7 +6239,7 @@ class MainTable(tk.Canvas):
6216
6239
  return tuple(box.coords for item, box in self.get_selection_items())
6217
6240
 
6218
6241
  def get_all_selection_boxes_with_types(self) -> list[tuple[tuple[int, int, int, int], str]]:
6219
- return [(box.coords, box.type_) for item, box in self.get_selection_items()]
6242
+ return [Box_st(box.coords, box.type_) for item, box in self.get_selection_items()]
6220
6243
 
6221
6244
  def all_selected(self) -> bool:
6222
6245
  return any(
@@ -6243,20 +6266,20 @@ class MainTable(tk.Canvas):
6243
6266
  )
6244
6267
  )
6245
6268
 
6246
- def col_selected(self, c: int) -> bool:
6269
+ def col_selected(self, c: int, cells: bool = False) -> bool:
6247
6270
  return isinstance(c, int) and any(
6248
6271
  box.coords.from_c <= c and box.coords.upto_c > c
6249
6272
  for item, box in self.get_selection_items(
6250
- cells=False,
6273
+ cells=cells,
6251
6274
  rows=False,
6252
6275
  )
6253
6276
  )
6254
6277
 
6255
- def row_selected(self, r: int) -> bool:
6278
+ def row_selected(self, r: int, cells: bool = False) -> bool:
6256
6279
  return isinstance(r, int) and any(
6257
6280
  box.coords.from_r <= r and box.coords.upto_r > r
6258
6281
  for item, box in self.get_selection_items(
6259
- cells=False,
6282
+ cells=cells,
6260
6283
  columns=False,
6261
6284
  )
6262
6285
  )
@@ -6414,12 +6437,12 @@ class MainTable(tk.Canvas):
6414
6437
  }
6415
6438
  ),
6416
6439
  "sheet_ops": self.PAR.ops,
6417
- "border_color": self.PAR.ops.table_selected_cells_border_fg,
6440
+ "border_color": self.PAR.ops.table_selected_box_cells_fg,
6418
6441
  "text": text,
6419
6442
  "state": state,
6420
6443
  "width": w,
6421
6444
  "height": h,
6422
- "show_border": self.PAR.ops.show_selected_cells_border,
6445
+ "show_border": True,
6423
6446
  "bg": bg,
6424
6447
  "fg": fg,
6425
6448
  "align": self.get_cell_align(r, c),
@@ -6458,6 +6481,8 @@ class MainTable(tk.Canvas):
6458
6481
  check_lines: bool = True,
6459
6482
  ) -> None:
6460
6483
  curr_height = self.text_editor.window.winfo_height()
6484
+ if curr_height < self.min_row_height:
6485
+ return
6461
6486
  if not check_lines or self.get_lines_cell_height(self.text_editor.window.get_num_lines() + 1) > curr_height:
6462
6487
  new_height = curr_height + self.table_xtra_lines_increment
6463
6488
  space_bot = self.get_space_bot(r)
@@ -6757,6 +6782,7 @@ class MainTable(tk.Canvas):
6757
6782
  if not self.open_text_editor(event=event, r=r, c=c, dropdown=True):
6758
6783
  return
6759
6784
  win_h, anchor = self.get_dropdown_height_anchor(r, c)
6785
+ win_w = self.col_positions[c + 1] - self.col_positions[c] + 1
6760
6786
  if anchor == "nw":
6761
6787
  if kwargs["state"] == "normal":
6762
6788
  ypos = self.row_positions[r] + self.text_editor.window.winfo_height() - 1
@@ -6764,33 +6790,29 @@ class MainTable(tk.Canvas):
6764
6790
  ypos = self.row_positions[r + 1]
6765
6791
  else:
6766
6792
  ypos = self.row_positions[r]
6767
- if self.dropdown.window is not None:
6768
- self.dropdown.window.search_function = kwargs["search_function"]
6769
- self.dropdown.window.r = r
6770
- self.dropdown.window.c = c
6771
- self.dropdown.window.row = -1
6772
- self.dropdown.window.set_options()
6773
- self.dropdown.window.values(kwargs["values"])
6774
- if not self.dropdown.open:
6775
- self.itemconfig(self.dropdown.canvas_id, state="normal")
6793
+ reset_kwargs = {
6794
+ "r": r,
6795
+ "c": c,
6796
+ "width": win_w,
6797
+ "height": win_h,
6798
+ "font": self.PAR.ops.table_font,
6799
+ "ops": self.PAR.ops,
6800
+ "outline_color": self.get_selected_box_bg_fg(type_="cells")[1],
6801
+ "align": self.get_cell_align(r, c),
6802
+ "values": kwargs["values"],
6803
+ }
6804
+ if self.dropdown.window:
6805
+ self.dropdown.window.reset(**reset_kwargs)
6806
+ self.itemconfig(self.dropdown.canvas_id, state="normal")
6776
6807
  self.coords(self.dropdown.canvas_id, self.col_positions[c], ypos)
6777
6808
  else:
6778
6809
  self.dropdown.window = self.PAR.dropdown_class(
6779
6810
  self.winfo_toplevel(),
6780
- r,
6781
- c,
6782
- width=self.col_positions[c + 1] - self.col_positions[c] + 1,
6783
- height=win_h,
6784
- font=self.PAR.ops.table_font,
6785
- ops=self.PAR.ops,
6786
- outline_color=self.get_selected_box_bg_fg(type_="cells")[1],
6787
- outline_thickness=2,
6788
- values=kwargs["values"],
6811
+ **reset_kwargs,
6789
6812
  close_dropdown_window=self.close_dropdown_window,
6790
6813
  search_function=kwargs["search_function"],
6791
6814
  arrowkey_RIGHT=self.arrowkey_RIGHT,
6792
6815
  arrowkey_LEFT=self.arrowkey_LEFT,
6793
- align="w", # self.get_cell_align(r, c)
6794
6816
  )
6795
6817
  self.dropdown.canvas_id = self.create_window(
6796
6818
  (self.col_positions[c], ypos),
tksheet/other_classes.py CHANGED
@@ -17,6 +17,10 @@ Box_t = namedtuple(
17
17
  "Box_t",
18
18
  "from_r from_c upto_r upto_c type_",
19
19
  )
20
+ Box_st = namedtuple(
21
+ "Box_st",
22
+ "coords type_"
23
+ )
20
24
 
21
25
  Highlight = namedtuple(
22
26
  "Highlight",