tksheet 7.1.22__py3-none-any.whl → 7.1.23__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
tksheet/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
  tksheet - A Python tkinter table widget
5
5
  """
6
6
 
7
- __version__ = "7.1.22"
7
+ __version__ = "7.1.23"
8
8
 
9
9
  from .colors import (
10
10
  color_map,
tksheet/main_table.py CHANGED
@@ -5281,7 +5281,7 @@ class MainTable(tk.Canvas):
5281
5281
  for i, w in enumerate(widths):
5282
5282
  if i not in diffs:
5283
5283
  widths[i] -= change
5284
- self.set_col_positions(itr=widths)
5284
+ self.col_positions = list(accumulate(chain([0], widths)))
5285
5285
  if self.PAR.ops.auto_resize_rows and self.allow_auto_resize_rows and row_pos_exists:
5286
5286
  max_h = can_height - self.PAR.ops.empty_vertical
5287
5287
  if self.PAR.ops.auto_resize_rows < self.min_row_height:
@@ -5306,17 +5306,18 @@ class MainTable(tk.Canvas):
5306
5306
  if i not in diffs:
5307
5307
  heights[i] -= change
5308
5308
  self.row_positions = list(accumulate(chain([0], heights)))
5309
- if can_width >= self.col_positions[-1] + self.PAR.ops.empty_horizontal and self.PAR.xscroll_showing:
5310
- self.PAR.xscroll.grid_forget()
5311
- self.PAR.xscroll_showing = False
5312
- elif (
5313
- can_width < self.col_positions[-1] + self.PAR.ops.empty_horizontal
5314
- and not self.PAR.xscroll_showing
5315
- and not self.PAR.xscroll_disabled
5316
- and can_height > 40
5317
- ):
5318
- self.PAR.xscroll.grid(row=2, column=0, columnspan=2, sticky="nswe")
5319
- self.PAR.xscroll_showing = True
5309
+ if self.PAR.ops.auto_resize_row_index is not True:
5310
+ if can_width >= self.col_positions[-1] + self.PAR.ops.empty_horizontal and self.PAR.xscroll_showing:
5311
+ self.PAR.xscroll.grid_forget()
5312
+ self.PAR.xscroll_showing = False
5313
+ elif (
5314
+ can_width < self.col_positions[-1] + self.PAR.ops.empty_horizontal
5315
+ and not self.PAR.xscroll_showing
5316
+ and not self.PAR.xscroll_disabled
5317
+ and can_height > 40
5318
+ ):
5319
+ self.PAR.xscroll.grid(row=2, column=0, columnspan=2, sticky="nswe")
5320
+ self.PAR.xscroll_showing = True
5320
5321
  if can_height >= self.row_positions[-1] + self.PAR.ops.empty_vertical and self.PAR.yscroll_showing:
5321
5322
  self.PAR.yscroll.grid_forget()
5322
5323
  self.PAR.yscroll_showing = False
@@ -5354,7 +5355,7 @@ class MainTable(tk.Canvas):
5354
5355
  start_col = bisect_left(self.col_positions, scrollpos_left)
5355
5356
  end_col = bisect_right(self.col_positions, scrollpos_right)
5356
5357
  changed_w = False
5357
- if redraw_row_index and self.show_index:
5358
+ if self.PAR.ops.auto_resize_row_index and redraw_row_index and self.show_index:
5358
5359
  changed_w = self.RI.auto_set_index_width(
5359
5360
  end_row=end_row - 1,
5360
5361
  only_rows=[self.datarn(r) for r in range(start_row if not start_row else start_row - 1, end_row - 1)],
tksheet/row_index.py CHANGED
@@ -1192,23 +1192,22 @@ class RowIndex(tk.Canvas):
1192
1192
  self.MT.recreate_all_selection_boxes()
1193
1193
 
1194
1194
  def auto_set_index_width(self, end_row: int, only_rows: list) -> bool:
1195
- if self.PAR.ops.auto_resize_row_index:
1196
- if not isinstance(self.MT._row_index, int) and not self.MT._row_index:
1197
- if self.default_index == "letters":
1198
- new_w = self.MT.get_txt_w(f"{num2alpha(end_row)}") + 20
1199
- elif self.default_index == "numbers":
1200
- new_w = self.MT.get_txt_w(f"{end_row}") + 20
1201
- elif self.default_index == "both":
1202
- new_w = self.MT.get_txt_w(f"{end_row + 1} {num2alpha(end_row)}") + 20
1203
- elif self.PAR.ops.auto_resize_row_index is True:
1204
- new_w = self.set_width_of_index_to_text(only_rows=only_rows, set_width=False)
1205
- else:
1206
- new_w = None
1207
- if new_w is not None and (sheet_w_x := floor(self.PAR.winfo_width() * 0.7)) < new_w:
1208
- new_w = sheet_w_x
1209
- if new_w and (self.current_width - new_w > 15 or new_w - self.current_width > 3):
1210
- self.set_width(new_w, set_TL=True)
1211
- return True
1195
+ if not isinstance(self.MT._row_index, int) and not self.MT._row_index:
1196
+ if self.default_index == "letters":
1197
+ new_w = self.MT.get_txt_w(f"{num2alpha(end_row)}") + 20
1198
+ elif self.default_index == "numbers":
1199
+ new_w = self.MT.get_txt_w(f"{end_row}") + 20
1200
+ elif self.default_index == "both":
1201
+ new_w = self.MT.get_txt_w(f"{end_row + 1} {num2alpha(end_row)}") + 20
1202
+ elif self.PAR.ops.auto_resize_row_index is True:
1203
+ new_w = self.set_width_of_index_to_text(only_rows=only_rows, set_width=False)
1204
+ else:
1205
+ new_w = None
1206
+ if new_w is not None and (sheet_w_x := floor(self.PAR.winfo_width() * 0.7)) < new_w:
1207
+ new_w = sheet_w_x
1208
+ if new_w and (self.current_width - new_w > 15 or new_w - self.current_width > 3):
1209
+ self.set_width(new_w, set_TL=True)
1210
+ return True
1212
1211
  return False
1213
1212
 
1214
1213
  def redraw_highlight_get_text_fg(self, fr, sr, r, c_2, c_3, selections, datarn):
tksheet/sheet.py CHANGED
@@ -4561,7 +4561,7 @@ class Sheet(tk.Frame):
4561
4561
  self.tree_set_open(open_ids=open_ids)
4562
4562
  else:
4563
4563
  self.hide_rows(
4564
- set(self.RI.tree_rns[iid] for iid in self.get_children() if self.RI.tree[iid].parent),
4564
+ {self.RI.tree_rns[iid] for iid in self.get_children() if self.RI.tree[iid].parent},
4565
4565
  deselect_all=False,
4566
4566
  data_indexes=True,
4567
4567
  row_heights=False if row_heights is False else True,
@@ -4585,46 +4585,76 @@ class Sheet(tk.Frame):
4585
4585
  Closes everything else
4586
4586
  """
4587
4587
  self.hide_rows(
4588
- # set(self.MT.displayed_rows),
4589
4588
  set(rn for rn in self.MT.displayed_rows if self.MT._row_index[rn].parent),
4590
4589
  redraw=False,
4591
4590
  deselect_all=False,
4592
4591
  data_indexes=True,
4593
4592
  )
4594
- # self.show_rows(
4595
- # (self.RI.tree_rns[iid] for iid in self.get_children("")),
4596
- # redraw=False,
4597
- # deselect_all=True,
4598
- # )
4599
4593
  open_ids = set(filter(self.exists, map(str.lower, open_ids)))
4600
4594
  self.RI.tree_open_ids = set()
4601
4595
  if open_ids:
4602
- self.tree_open(open_ids)
4603
- return self
4596
+ to_open = self._tree_open(open_ids)
4597
+ self.show_rows(
4598
+ rows=to_open,
4599
+ redraw=False,
4600
+ deselect_all=False,
4601
+ )
4602
+ return self.set_refresh_timer(True)
4603
+
4604
+ def _tree_open(self, items: set[str]) -> list[int]:
4605
+ """
4606
+ Only meant for internal use
4607
+ """
4608
+ to_open = []
4609
+ for item in filter(items.__contains__, self.get_children()):
4610
+ if self.RI.tree[item].children:
4611
+ self.RI.tree_open_ids.add(item)
4612
+ to_open.extend(self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item, check_open=True))
4613
+ return to_open
4604
4614
 
4605
- def tree_open(self, *items) -> Sheet:
4615
+ def tree_open(self, *items, redraw: bool = True) -> Sheet:
4606
4616
  """
4607
4617
  If used without args all items are opened
4608
4618
  """
4609
4619
  if items := set(unpack(items)):
4610
- for item in filter(items.__contains__, self.get_children()):
4611
- self.item(item, open_=True)
4620
+ to_open = self._tree_open(items)
4612
4621
  else:
4622
+ to_open = []
4613
4623
  for item in self.get_children():
4614
- self.item(item, open_=True)
4615
- return self
4624
+ if self.RI.tree[item].children:
4625
+ self.RI.tree_open_ids.add(item)
4626
+ to_open.extend(self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item, check_open=True))
4627
+ return self.show_rows(
4628
+ rows=to_open,
4629
+ redraw=redraw,
4630
+ deselect_all=False,
4631
+ )
4616
4632
 
4617
- def tree_close(self, *items) -> Sheet:
4633
+ def tree_close(self, *items, redraw: bool = True) -> Sheet:
4618
4634
  """
4619
4635
  If used without args all items are closed
4620
4636
  """
4637
+ to_close = set()
4621
4638
  if items:
4622
4639
  for item in unpack(items):
4623
- self.item(item, open_=False)
4640
+ if self.RI.tree[item].children:
4641
+ self.RI.tree_open_ids.discard(item)
4642
+ if self.RI.tree_rns[item] in self.MT.displayed_rows:
4643
+ for did in self.RI.get_iid_descendants(item, check_open=True):
4644
+ to_close.add(self.RI.tree_rns[did])
4624
4645
  else:
4625
4646
  for item in self.get_children():
4626
- self.item(item, open_=False)
4627
- return self
4647
+ if self.RI.tree[item].children:
4648
+ self.RI.tree_open_ids.discard(item)
4649
+ if self.RI.tree_rns[item] in self.MT.displayed_rows:
4650
+ for did in self.RI.get_iid_descendants(item, check_open=True):
4651
+ to_close.add(self.RI.tree_rns[did])
4652
+ return self.hide_rows(
4653
+ rows=to_close,
4654
+ redraw=redraw,
4655
+ deselect_all=False,
4656
+ data_indexes=True,
4657
+ )
4628
4658
 
4629
4659
  def insert(
4630
4660
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tksheet
3
- Version: 7.1.22
3
+ Version: 7.1.23
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
@@ -1,20 +1,20 @@
1
- tksheet/__init__.py,sha256=WycEvqmjym6j4M6uhjfRP1epMXGkfU87U08AeMbavAI,2125
1
+ tksheet/__init__.py,sha256=-p2HkPQzNlT61u0_M_sJ-7FLOi8TfAc00slnmCD9Itc,2125
2
2
  tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
3
3
  tksheet/column_headers.py,sha256=cWTHyYaA5nNMfT6WyFJB0lyeNQFRVXZPbX9C-lLH4Yg,100770
4
4
  tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
5
5
  tksheet/functions.py,sha256=rNfDpQRoXZm_Ro-tlF92ox3fi37p71Mio1PGTreM_oc,40835
6
- tksheet/main_table.py,sha256=Z9ih53-4t2OoPyIbXczSSPiIt3oCBzR7UQJF9l3dfFg,322148
6
+ tksheet/main_table.py,sha256=Bvzt8SdLL0gEak3fdYBzMJH184SvmmrB-8UIWaFfc-U,322314
7
7
  tksheet/other_classes.py,sha256=P3FYUYreLhstATvHCNow8sDQoCsD_02KB6oXcca3ahE,13628
8
- tksheet/row_index.py,sha256=6J72VDTufsoPCxhmH4C-ARPcy0Qq5QaXq4erQXPLosE,107058
9
- tksheet/sheet.py,sha256=07BGVsrBYV1xviJ7quKnmZA-QwLVJV6CcbAYz23Llp4,264445
8
+ tksheet/row_index.py,sha256=ZAhdV3QthyJuvEEaGE7AmvOzWcMrtCaX4e5mYIm0il8,106946
9
+ tksheet/sheet.py,sha256=82EumnVqs7VUdLrp6CY_o6L7t4-CwqOm_yDZT6LGL7I,265879
10
10
  tksheet/sheet_options.py,sha256=rf1xtaZdGnJYSgR_sFsYlGSEj3bYHpSm15CH2aZETUo,12231
11
11
  tksheet/text_editor.py,sha256=DGFgukHZ5gruA_hWN1cuhv88z0nR5316xGynx3OioWQ,6548
12
12
  tksheet/themes.py,sha256=IeOgexzqgEM11i8Ie3awIL7nH9DVm65eW4XCcrRK9HE,14480
13
13
  tksheet/top_left_rectangle.py,sha256=-2u9GfOvcqhkKwHEtbqdFvXCY3RbvL5k2Sh9l3r_k04,8275
14
14
  tksheet/types.py,sha256=IgoEHMbceKpakcZtanxKaKJ4RdCq7UW6EoEIIz5O59k,340
15
15
  tksheet/vars.py,sha256=86ubZZElsnQuC6Lv6bW2lt2NhD9wAp6PxtkK7ufKqq0,3452
16
- tksheet-7.1.22.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
17
- tksheet-7.1.22.dist-info/METADATA,sha256=fPSQKrzQyNTD_TImpXq5a2Baaj0VOpchtk9nUGavYGw,6146
18
- tksheet-7.1.22.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
19
- tksheet-7.1.22.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
20
- tksheet-7.1.22.dist-info/RECORD,,
16
+ tksheet-7.1.23.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
17
+ tksheet-7.1.23.dist-info/METADATA,sha256=Q-0dTLu2rhobiuJ305tNs6Gu0LWXAqhv9Jue3i5Dk5U,6146
18
+ tksheet-7.1.23.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
19
+ tksheet-7.1.23.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
20
+ tksheet-7.1.23.dist-info/RECORD,,