tksheet 7.2.9__tar.gz → 7.2.10__tar.gz

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.
Files changed (24) hide show
  1. {tksheet-7.2.9/tksheet.egg-info → tksheet-7.2.10}/PKG-INFO +1 -1
  2. {tksheet-7.2.9 → tksheet-7.2.10}/pyproject.toml +1 -1
  3. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/__init__.py +1 -1
  4. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/column_headers.py +8 -9
  5. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/main_table.py +10 -13
  6. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/row_index.py +28 -19
  7. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/sheet.py +57 -25
  8. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/top_left_rectangle.py +9 -10
  9. {tksheet-7.2.9 → tksheet-7.2.10/tksheet.egg-info}/PKG-INFO +1 -1
  10. {tksheet-7.2.9 → tksheet-7.2.10}/LICENSE.txt +0 -0
  11. {tksheet-7.2.9 → tksheet-7.2.10}/README.md +0 -0
  12. {tksheet-7.2.9 → tksheet-7.2.10}/setup.cfg +0 -0
  13. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/colors.py +0 -0
  14. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/formatters.py +0 -0
  15. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/functions.py +0 -0
  16. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/other_classes.py +0 -0
  17. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/sheet_options.py +0 -0
  18. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/text_editor.py +0 -0
  19. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/themes.py +0 -0
  20. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/types.py +0 -0
  21. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/vars.py +0 -0
  22. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet.egg-info/SOURCES.txt +0 -0
  23. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet.egg-info/dependency_links.txt +0 -0
  24. {tksheet-7.2.9 → tksheet-7.2.10}/tksheet.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tksheet
3
- Version: 7.2.9
3
+ Version: 7.2.10
4
4
  Summary: Tkinter table / sheet widget
5
5
  Author-email: ragardner <github@ragardner.simplelogin.com>
6
6
  License: Copyright (c) 2019 ragardner and open source contributors
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
  name = "tksheet"
7
7
  description = "Tkinter table / sheet widget"
8
8
  readme = "README.md"
9
- version = "7.2.9"
9
+ version = "7.2.10"
10
10
  authors = [{ name = "ragardner", email = "github@ragardner.simplelogin.com" }]
11
11
  requires-python = ">=3.8"
12
12
  license = {file = "LICENSE.txt"}
@@ -4,7 +4,7 @@
4
4
  tksheet - A Python tkinter table widget
5
5
  """
6
6
 
7
- __version__ = "7.2.9"
7
+ __version__ = "7.2.10"
8
8
 
9
9
  from .colors import (
10
10
  color_map,
@@ -1760,8 +1760,7 @@ class ColumnHeaders(tk.Canvas):
1760
1760
  if self.text_editor.open and c == self.text_editor.column:
1761
1761
  self.text_editor.set_text(self.text_editor.get() + "" if not isinstance(text, str) else text)
1762
1762
  return
1763
- if self.text_editor.open:
1764
- self.hide_text_editor()
1763
+ self.hide_text_editor()
1765
1764
  if not self.MT.see(r=0, c=c, keep_yscroll=True, check_cell_visibility=True):
1766
1765
  self.MT.refresh()
1767
1766
  x = self.MT.col_positions[c] + 1
@@ -1907,14 +1906,12 @@ class ColumnHeaders(tk.Canvas):
1907
1906
  )
1908
1907
  # self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
1909
1908
 
1910
- def hide_text_editor(self, reason: None | str = None) -> None:
1909
+ def hide_text_editor(self) -> None:
1911
1910
  if self.text_editor.open:
1912
1911
  for binding in text_editor_to_unbind:
1913
1912
  self.text_editor.tktext.unbind(binding)
1914
1913
  self.itemconfig(self.text_editor.canvas_id, state="hidden")
1915
1914
  self.text_editor.open = False
1916
- if reason == "Escape":
1917
- self.focus_set()
1918
1915
 
1919
1916
  # c is displayed col
1920
1917
  def close_text_editor(self, event: tk.Event) -> Literal["break"] | None:
@@ -1933,6 +1930,7 @@ class ColumnHeaders(tk.Canvas):
1933
1930
  return "break"
1934
1931
  if event.keysym == "Escape":
1935
1932
  self.hide_text_editor_and_dropdown()
1933
+ self.focus_set()
1936
1934
  return
1937
1935
  # setting cell data with text editor value
1938
1936
  text_editor_value = self.text_editor.get()
@@ -2011,7 +2009,7 @@ class ColumnHeaders(tk.Canvas):
2011
2009
  dd_window.search_and_see(event)
2012
2010
 
2013
2011
  def open_dropdown_window(self, c: int, event: object = None) -> None:
2014
- self.hide_text_editor("Escape")
2012
+ self.hide_text_editor()
2015
2013
  kwargs = self.get_cell_kwargs(self.MT.datacn(c), key="dropdown")
2016
2014
  if kwargs["state"] == "normal":
2017
2015
  if not self.open_text_editor(event=event, c=c, dropdown=True):
@@ -2075,8 +2073,9 @@ class ColumnHeaders(tk.Canvas):
2075
2073
  return
2076
2074
  redraw = False
2077
2075
  else:
2078
- self.dropdown.window.bind("<FocusOut>", lambda _x: self.close_dropdown_window(c))
2079
2076
  self.update_idletasks()
2077
+ self.dropdown.window.bind("<FocusOut>", lambda _x: self.close_dropdown_window(c))
2078
+ self.dropdown.window.bind("<Escape>", self.close_dropdown_window)
2080
2079
  self.dropdown.window.focus_set()
2081
2080
  redraw = True
2082
2081
  self.dropdown.open = True
@@ -2116,12 +2115,12 @@ class ColumnHeaders(tk.Canvas):
2116
2115
  edited = self.set_cell_data_undo(c, datacn=datacn, value=selection, redraw=not redraw)
2117
2116
  if edited:
2118
2117
  try_binding(self.extra_end_edit_cell_func, event_data)
2119
- self.focus_set()
2120
2118
  self.MT.recreate_all_selection_boxes()
2119
+ self.focus_set()
2121
2120
  self.hide_text_editor_and_dropdown(redraw=redraw)
2122
2121
 
2123
2122
  def hide_text_editor_and_dropdown(self, redraw: bool = True) -> None:
2124
- self.hide_text_editor("Escape")
2123
+ self.hide_text_editor()
2125
2124
  self.hide_dropdown_window()
2126
2125
  if redraw:
2127
2126
  self.MT.refresh()
@@ -1796,9 +1796,7 @@ class MainTable(tk.Canvas):
1796
1796
  def cell_visible(self, r: int = 0, c: int = 0) -> bool:
1797
1797
  cx1, cy1, cx2, cy2 = self.get_canvas_visible_area()
1798
1798
  x1, y1, x2, y2 = self.get_cell_coords(r, c)
1799
- if x1 <= cx2 or y1 <= cy2 or x2 >= cx1 or y2 >= cy1:
1800
- return True
1801
- return False
1799
+ return x1 <= cx2 or y1 <= cy2 or x2 >= cx1 or y2 >= cy1
1802
1800
 
1803
1801
  def select_all(self, redraw: bool = True, run_binding_func: bool = True) -> None:
1804
1802
  selected = self.selected
@@ -5457,7 +5455,7 @@ class MainTable(tk.Canvas):
5457
5455
  if self.PAR.ops.auto_resize_row_index and redraw_row_index and self.show_index:
5458
5456
  changed_w = self.RI.auto_set_index_width(
5459
5457
  end_row=grid_end_row,
5460
- only_rows=[self.datarn(r) for r in range(text_start_row, text_end_row)],
5458
+ only_rows=map(self.datarn, range(text_start_row, text_end_row)),
5461
5459
  )
5462
5460
  if resized_cols or resized_rows or changed_w:
5463
5461
  self.recreate_all_selection_boxes()
@@ -6572,8 +6570,7 @@ class MainTable(tk.Canvas):
6572
6570
  if self.text_editor.open and (r, c) == self.text_editor.coords:
6573
6571
  self.text_editor.window.set_text(self.text_editor.get() + "" if not isinstance(text, str) else text)
6574
6572
  return
6575
- if self.text_editor.open:
6576
- self.hide_text_editor()
6573
+ self.hide_text_editor()
6577
6574
  if not self.see(r=r, c=c, check_cell_visibility=True):
6578
6575
  self.refresh()
6579
6576
  x = self.col_positions[c]
@@ -6707,14 +6704,12 @@ class MainTable(tk.Canvas):
6707
6704
  )
6708
6705
  # self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
6709
6706
 
6710
- def hide_text_editor(self, reason: None | str = None) -> None:
6707
+ def hide_text_editor(self) -> None:
6711
6708
  if self.text_editor.open:
6712
6709
  for binding in text_editor_to_unbind:
6713
6710
  self.text_editor.tktext.unbind(binding)
6714
6711
  self.itemconfig(self.text_editor.canvas_id, state="hidden")
6715
6712
  self.text_editor.open = False
6716
- if reason == "Escape":
6717
- self.focus_set()
6718
6713
 
6719
6714
  def close_text_editor(self, event: tk.Event) -> Literal["break"] | None:
6720
6715
  # checking if text editor should be closed or not
@@ -6732,6 +6727,7 @@ class MainTable(tk.Canvas):
6732
6727
  return "break"
6733
6728
  if event.keysym == "Escape":
6734
6729
  self.hide_text_editor_and_dropdown()
6730
+ self.focus_set()
6735
6731
  return
6736
6732
  # setting cell data with text editor value
6737
6733
  text_editor_value = self.text_editor.get()
@@ -6944,7 +6940,7 @@ class MainTable(tk.Canvas):
6944
6940
  c: int,
6945
6941
  event: object = None,
6946
6942
  ) -> None:
6947
- self.hide_text_editor("Escape")
6943
+ self.hide_text_editor()
6948
6944
  datarn = self.datarn(r)
6949
6945
  datacn = self.datacn(c)
6950
6946
  kwargs = self.get_cell_kwargs(datarn, datacn, key="dropdown")
@@ -7019,7 +7015,8 @@ class MainTable(tk.Canvas):
7019
7015
  else:
7020
7016
  self.update_idletasks()
7021
7017
  self.dropdown.window.bind("<FocusOut>", lambda _: self.close_dropdown_window(r, c))
7022
- self.dropdown.window.focus()
7018
+ self.dropdown.window.bind("<Escape>", self.close_dropdown_window)
7019
+ self.dropdown.window.focus_set()
7023
7020
  redraw = True
7024
7021
  self.dropdown.open = True
7025
7022
  if redraw:
@@ -7075,12 +7072,12 @@ class MainTable(tk.Canvas):
7075
7072
  )
7076
7073
  if edited:
7077
7074
  try_binding(self.extra_end_edit_cell_func, event_data)
7078
- self.focus_set()
7079
7075
  self.recreate_all_selection_boxes()
7076
+ self.focus_set()
7080
7077
  self.hide_text_editor_and_dropdown(redraw=redraw)
7081
7078
 
7082
7079
  def hide_text_editor_and_dropdown(self, redraw: bool = True) -> None:
7083
- self.hide_text_editor("Escape")
7080
+ self.hide_text_editor()
7084
7081
  self.hide_dropdown_window()
7085
7082
  if redraw:
7086
7083
  self.refresh()
@@ -358,7 +358,16 @@ class RowIndex(tk.Canvas):
358
358
  self.MT.current_cursor = "sb_v_double_arrow"
359
359
  else:
360
360
  self.rsz_h = None
361
- if self.width_resizing_enabled and not mouse_over_resize:
361
+ if (
362
+ self.width_resizing_enabled
363
+ and not mouse_over_resize
364
+ and self.PAR.ops.auto_resize_row_index is not True
365
+ and not (
366
+ self.PAR.ops.auto_resize_row_index == "empty"
367
+ and not isinstance(self.MT._row_index, int)
368
+ and not self.MT._row_index
369
+ )
370
+ ):
362
371
  try:
363
372
  x1, y1, x2, y2 = (
364
373
  self.row_width_resize_bbox[0],
@@ -761,22 +770,18 @@ class RowIndex(tk.Canvas):
761
770
  self.MT.set_yviews("moveto", 1)
762
771
 
763
772
  def event_over_dropdown(self, r: int, datarn: int, event: object, canvasy: float) -> bool:
764
- if (
773
+ return (
765
774
  canvasy < self.MT.row_positions[r] + self.MT.index_txt_height
766
775
  and self.get_cell_kwargs(datarn, key="dropdown")
767
776
  and event.x > self.current_width - self.MT.index_txt_height - 4
768
- ):
769
- return True
770
- return False
777
+ )
771
778
 
772
779
  def event_over_checkbox(self, r: int, datarn: int, event: object, canvasy: float) -> bool:
773
- if (
780
+ return (
774
781
  canvasy < self.MT.row_positions[r] + self.MT.index_txt_height
775
782
  and self.get_cell_kwargs(datarn, key="checkbox")
776
783
  and event.x < self.MT.index_txt_height + 4
777
- ):
778
- return True
779
- return False
784
+ )
780
785
 
781
786
  def b1_release(self, event: object) -> None:
782
787
  if self.being_drawn_item is not None and (to_sel := self.MT.coords_and_type(self.being_drawn_item)):
@@ -1891,8 +1896,7 @@ class RowIndex(tk.Canvas):
1891
1896
  if self.text_editor.open and r == self.text_editor.row:
1892
1897
  self.text_editor.set_text(self.text_editor.get() + "" if not isinstance(text, str) else text)
1893
1898
  return
1894
- if self.text_editor.open:
1895
- self.hide_text_editor()
1899
+ self.hide_text_editor()
1896
1900
  if not self.MT.see(r=r, c=0, keep_yscroll=True, check_cell_visibility=True):
1897
1901
  self.MT.refresh()
1898
1902
  x = 0
@@ -2025,14 +2029,12 @@ class RowIndex(tk.Canvas):
2025
2029
  )
2026
2030
  # self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
2027
2031
 
2028
- def hide_text_editor(self, reason: None | str = None) -> None:
2032
+ def hide_text_editor(self) -> None:
2029
2033
  if self.text_editor.open:
2030
2034
  for binding in text_editor_to_unbind:
2031
2035
  self.text_editor.tktext.unbind(binding)
2032
2036
  self.itemconfig(self.text_editor.canvas_id, state="hidden")
2033
2037
  self.text_editor.open = False
2034
- if reason == "Escape":
2035
- self.focus_set()
2036
2038
 
2037
2039
  # r is displayed row
2038
2040
  def close_text_editor(self, event: tk.Event) -> Literal["break"] | None:
@@ -2051,6 +2053,7 @@ class RowIndex(tk.Canvas):
2051
2053
  return "break"
2052
2054
  if event.keysym == "Escape":
2053
2055
  self.hide_text_editor_and_dropdown()
2056
+ self.focus_set()
2054
2057
  return
2055
2058
  text_editor_value = self.text_editor.get()
2056
2059
  r = self.text_editor.row
@@ -2132,7 +2135,7 @@ class RowIndex(tk.Canvas):
2132
2135
 
2133
2136
  # r is displayed row
2134
2137
  def open_dropdown_window(self, r: int, event: object = None) -> None:
2135
- self.hide_text_editor("Escape")
2138
+ self.hide_text_editor()
2136
2139
  kwargs = self.get_cell_kwargs(self.MT.datarn(r), key="dropdown")
2137
2140
  if kwargs["state"] == "normal":
2138
2141
  if not self.open_text_editor(event=event, r=r, dropdown=True):
@@ -2203,8 +2206,9 @@ class RowIndex(tk.Canvas):
2203
2206
  return
2204
2207
  redraw = False
2205
2208
  else:
2206
- self.dropdown.window.bind("<FocusOut>", lambda _x: self.close_dropdown_window(r))
2207
2209
  self.update_idletasks()
2210
+ self.dropdown.window.bind("<FocusOut>", lambda _x: self.close_dropdown_window(r))
2211
+ self.dropdown.window.bind("<Escape>", self.close_dropdown_window)
2208
2212
  self.dropdown.window.focus_set()
2209
2213
  redraw = True
2210
2214
  self.dropdown.open = True
@@ -2245,12 +2249,12 @@ class RowIndex(tk.Canvas):
2245
2249
  edited = self.set_cell_data_undo(r, datarn=datarn, value=selection, redraw=not redraw)
2246
2250
  if edited:
2247
2251
  try_binding(self.extra_end_edit_cell_func, event_data)
2248
- self.focus_set()
2249
2252
  self.MT.recreate_all_selection_boxes()
2253
+ self.focus_set()
2250
2254
  self.hide_text_editor_and_dropdown(redraw=redraw)
2251
2255
 
2252
2256
  def hide_text_editor_and_dropdown(self, redraw: bool = True) -> None:
2253
- self.hide_text_editor("Escape")
2257
+ self.hide_text_editor()
2254
2258
  self.hide_dropdown_window()
2255
2259
  if redraw:
2256
2260
  self.MT.refresh()
@@ -2520,7 +2524,7 @@ class RowIndex(tk.Canvas):
2520
2524
  if not node.parent.children:
2521
2525
  self.tree_open_ids.discard(node.parent)
2522
2526
 
2523
- def pid_causes_recursive_loop(self, iid: str, pid: str) -> bool:
2527
+ def build_pid_causes_recursive_loop(self, iid: str, pid: str) -> bool:
2524
2528
  return any(
2525
2529
  i == pid
2526
2530
  for i in chain(
@@ -2528,3 +2532,8 @@ class RowIndex(tk.Canvas):
2528
2532
  islice(self.get_iid_ancestors(iid), 1, None),
2529
2533
  )
2530
2534
  )
2535
+
2536
+ def move_pid_causes_recursive_loop(self, to_move_iid: str, move_to_parent: str) -> bool:
2537
+ # if the parent the item is being moved under is one of the item's descendants
2538
+ # then it is a recursive loop
2539
+ return any(move_to_parent == diid for diid in self.get_iid_descendants(to_move_iid))
@@ -4711,7 +4711,7 @@ class Sheet(tk.Frame):
4711
4711
  self.RI.tree[iid].text = row[text_column]
4712
4712
  else:
4713
4713
  self.RI.tree[iid] = Node(row[text_column], iid, "")
4714
- if safety and (iid == pid or self.RI.pid_causes_recursive_loop(iid, pid)):
4714
+ if safety and (iid == pid or self.RI.build_pid_causes_recursive_loop(iid, pid)):
4715
4715
  row[parent_column] = ""
4716
4716
  pid = ""
4717
4717
  if pid:
@@ -5041,7 +5041,8 @@ class Sheet(tk.Frame):
5041
5041
  def move(self, item: str, parent: str, index: int | None = None) -> Sheet:
5042
5042
  """
5043
5043
  Moves item to be under parent as child at index
5044
- 'parent' can be empty string which will make item a top node
5044
+ 'parent' can be an empty str which will put the item at top level
5045
+ Performance is not great
5045
5046
  """
5046
5047
  if (item := item.lower()) and item not in self.RI.tree:
5047
5048
  raise ValueError(f"Item '{item}' does not exist.")
@@ -5050,25 +5051,61 @@ class Sheet(tk.Frame):
5050
5051
  mapping = {}
5051
5052
  to_show = []
5052
5053
  item_node = self.RI.tree[item]
5054
+ item_r = self.RI.tree_rns[item]
5053
5055
  if parent:
5054
- if self.RI.pid_causes_recursive_loop(item, parent):
5056
+ if self.RI.move_pid_causes_recursive_loop(item, parent):
5055
5057
  raise ValueError(f"iid '{item}' causes a recursive loop with parent '{parent}'.")
5056
5058
  parent_node = self.RI.tree[parent]
5057
5059
  if parent_node.children:
5058
5060
  if index is None or index >= len(parent_node.children):
5059
- index = len(parent_node.children) - 1
5060
- item_r = self.RI.tree_rns[item]
5061
- new_r = self.RI.tree_rns[parent_node.children[index].iid]
5062
- new_r_desc = sum(1 for _ in self.RI.get_iid_descendants(parent_node.children[index].iid))
5063
- item_desc = sum(1 for _ in self.RI.get_iid_descendants(item))
5064
- if item_r < new_r:
5065
- r_ctr = new_r + new_r_desc - item_desc
5061
+ index = len(parent_node.children)
5062
+ new_r = self.RI.tree_rns[parent] + sum(1 for _ in self.RI.get_iid_descendants(parent))
5063
+ # new parent has children
5064
+ # index is on end
5065
+ # item row is less than move to row
5066
+ if item_r < new_r:
5067
+ r_ctr = new_r - sum(1 for _ in self.RI.get_iid_descendants(item))
5068
+
5069
+ # new parent has children
5070
+ # index is on end
5071
+ # item row is greater than move to row
5072
+ else:
5073
+ r_ctr = new_r + 1
5066
5074
  else:
5067
- r_ctr = new_r
5075
+ new_r = self.RI.tree_rns[parent_node.children[index].iid]
5076
+ # new parent has children
5077
+ # index is not end
5078
+ # item row is less than move to row
5079
+ if item_r < new_r:
5080
+ if self.RI.items_parent(item) == parent:
5081
+ r_ctr = (
5082
+ new_r
5083
+ + sum(1 for _ in self.RI.get_iid_descendants(parent_node.children[index].iid))
5084
+ - sum(1 for _ in self.RI.get_iid_descendants(item))
5085
+ )
5086
+ else:
5087
+ r_ctr = new_r - sum(1 for _ in self.RI.get_iid_descendants(item)) - 1
5088
+
5089
+ # new parent has children
5090
+ # index is not end
5091
+ # item row is greater than move to row
5092
+ else:
5093
+ r_ctr = new_r
5068
5094
  else:
5069
- if index is None:
5070
- index = 0
5071
- r_ctr = self.RI.tree_rns[parent_node.iid] + 1
5095
+ index = 0
5096
+ new_r = self.RI.tree_rns[parent_node.iid]
5097
+
5098
+ # new parent doesn't have children
5099
+ # index always start
5100
+ # item row is less than move to row
5101
+ if item_r < new_r:
5102
+ r_ctr = new_r - sum(1 for _ in self.RI.get_iid_descendants(item))
5103
+
5104
+ # new parent doesn't have children
5105
+ # index always start
5106
+ # item row is greater than move to row
5107
+ else:
5108
+ r_ctr = new_r + 1
5072
5109
  mapping[item_r] = r_ctr
5073
5110
  if parent in self.RI.tree_open_ids and self.item_displayed(parent):
5074
5111
  to_show.append(r_ctr)
@@ -5091,11 +5128,12 @@ class Sheet(tk.Frame):
5091
5128
  else:
5092
5129
  if (new_r := self.top_index_row(index)) is None:
5093
5130
  new_r = self.top_index_row((sum(1 for _ in self.RI.gen_top_nodes()) - 1))
5094
- item_r = self.RI.tree_rns[item]
5095
5131
  if item_r < new_r:
5096
- par_desc = sum(1 for _ in self.RI.get_iid_descendants(self.rowitem(new_r, data_index=True)))
5097
- item_desc = sum(1 for _ in self.RI.get_iid_descendants(item))
5098
- r_ctr = new_r + par_desc - item_desc
5132
+ r_ctr = (
5133
+ new_r
5134
+ + sum(1 for _ in self.RI.get_iid_descendants(self.rowitem(new_r, data_index=True)))
5135
+ - sum(1 for _ in self.RI.get_iid_descendants(item))
5136
+ )
5099
5137
  else:
5100
5138
  r_ctr = new_r
5101
5139
  mapping[item_r] = r_ctr
@@ -6258,13 +6296,7 @@ class Sheet(tk.Frame):
6258
6296
  ) -> Sheet:
6259
6297
  kwargs = get_dropdown_kwargs(*args, **kwargs)
6260
6298
  d = get_dropdown_dict(**kwargs)
6261
- if kwargs["set_value"] is None:
6262
- if kwargs["values"] and (v := self.MT.get_cell_data(r, c)) not in kwargs["values"]:
6263
- v = kwargs["values"][0]
6264
- else:
6265
- v == ""
6266
- else:
6267
- v = kwargs["set_value"]
6299
+ v = kwargs["set_value"] if kwargs["set_value"] is not None else kwargs["values"][0] if kwargs["values"] else ""
6268
6300
  if isinstance(r, str) and r.lower() == "all" and isinstance(c, int):
6269
6301
  for r_ in range(self.MT.total_data_rows()):
6270
6302
  self._create_dropdown(r_, c, v, d)
@@ -163,17 +163,16 @@ class TopLeftRectangle(tk.Canvas):
163
163
  recreate_selection_boxes: bool = True,
164
164
  ) -> None:
165
165
  try:
166
- self.update_idletasks()
167
- if new_h is None:
168
- h = self.winfo_height()
169
- if new_w is None:
170
- w = self.winfo_width()
171
- if new_w:
172
- self.config(width=new_w)
173
- w = new_w
174
- if new_h:
175
- self.config(height=new_h)
166
+ if isinstance(new_h, int):
176
167
  h = new_h
168
+ self.config(height=h)
169
+ else:
170
+ h = self.CH.current_height
171
+ if isinstance(new_w, int):
172
+ w = new_w
173
+ self.config(width=w)
174
+ else:
175
+ w = self.RI.current_width
177
176
  except Exception:
178
177
  return
179
178
  self.coords(self.rw_box, 0, h - 5, w, h)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tksheet
3
- Version: 7.2.9
3
+ Version: 7.2.10
4
4
  Summary: Tkinter table / sheet widget
5
5
  Author-email: ragardner <github@ragardner.simplelogin.com>
6
6
  License: Copyright (c) 2019 ragardner and open source contributors
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes