tksheet 7.1.1__py3-none-any.whl → 7.1.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
tksheet/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
  tksheet - A Python tkinter table widget
5
5
  """
6
6
 
7
- __version__ = "7.1.1"
7
+ __version__ = "7.1.2"
8
8
 
9
9
  from .colors import (
10
10
  color_map,
tksheet/main_table.py CHANGED
@@ -1099,29 +1099,16 @@ class MainTable(tk.Canvas):
1099
1099
  def get_max_column_idx(self, maxidx: int | None = None) -> int:
1100
1100
  if maxidx is None:
1101
1101
  maxidx = len_to_idx(self.total_data_cols())
1102
- # max column number in cell_options
1103
- if maxidx < (maxk := max(self.cell_options, key=itemgetter(1), default=(0, 0))[1]):
1104
- maxidx = maxk
1105
- # max column number in column_options, index cell options
1106
- for d in (self.col_options, self.CH.cell_options):
1107
- if maxidx < (maxk := max(d, default=0)):
1108
- maxidx = maxk
1109
- # max column number in named spans
1110
- if maxidx < (
1111
- maxk := max(
1112
- (d["from_c"] for d in self.named_spans.values() if isinstance(d["from_c"], int)),
1113
- default=0,
1114
- )
1115
- ):
1116
- maxidx = maxk
1117
- if maxidx < (
1118
- maxk := max(
1119
- (d["upto_c"] for d in self.named_spans.values() if isinstance(d["upto_c"], int)),
1120
- default=0,
1121
- )
1122
- ):
1123
- maxidx = maxk
1124
- return maxidx
1102
+ maxiget = partial(max, key=itemgetter(1))
1103
+ return max(
1104
+ max(self.cell_options, key=itemgetter(1), default=(0, maxidx))[1],
1105
+ max(self.col_options, default=maxidx),
1106
+ max(self.CH.cell_options, default=maxidx),
1107
+ maxiget(map(maxiget, self.tagged_cells.values()), default=(0, maxidx))[1],
1108
+ max(map(max, self.tagged_columns.values()), default=maxidx),
1109
+ max((d.from_c for d in self.named_spans.values() if isinstance(d.from_c, int)), default=maxidx),
1110
+ max((d.upto_c for d in self.named_spans.values() if isinstance(d.upto_c, int)), default=maxidx),
1111
+ )
1125
1112
 
1126
1113
  def get_args_for_move_rows(
1127
1114
  self,
@@ -1329,28 +1316,16 @@ class MainTable(tk.Canvas):
1329
1316
  def get_max_row_idx(self, maxidx: int | None = None) -> int:
1330
1317
  if maxidx is None:
1331
1318
  maxidx = len_to_idx(self.total_data_rows())
1332
- if maxidx < (maxk := max(self.cell_options, key=itemgetter(0), default=(0, 0))[0]):
1333
- maxidx = maxk
1334
- # max row number in row_options, index cell options
1335
- for d in (self.row_options, self.RI.cell_options):
1336
- if maxidx < (maxk := max(d, default=0)):
1337
- maxidx = maxk
1338
- # max row number in named spans
1339
- if maxidx < (
1340
- maxk := max(
1341
- (d["from_r"] for d in self.named_spans.values() if isinstance(d["from_r"], int)),
1342
- default=0,
1343
- )
1344
- ):
1345
- maxidx = maxk
1346
- if maxidx < (
1347
- maxk := max(
1348
- (d["upto_r"] for d in self.named_spans.values() if isinstance(d["upto_r"], int)),
1349
- default=0,
1350
- )
1351
- ):
1352
- maxidx = maxk
1353
- return maxidx
1319
+ maxiget = partial(max, key=itemgetter(0))
1320
+ return max(
1321
+ max(self.cell_options, key=itemgetter(0), default=(maxidx, 0))[0],
1322
+ max(self.row_options, default=maxidx),
1323
+ max(self.RI.cell_options, default=maxidx),
1324
+ maxiget(map(maxiget, self.tagged_cells.values()), default=(maxidx, 0))[0],
1325
+ max(map(max, self.tagged_rows.values()), default=maxidx),
1326
+ max((d.from_r for d in self.named_spans.values() if isinstance(d.from_r, int)), default=maxidx),
1327
+ max((d.upto_r for d in self.named_spans.values() if isinstance(d.upto_r, int)), default=maxidx),
1328
+ )
1354
1329
 
1355
1330
  def get_full_new_idxs(
1356
1331
  self,
@@ -3982,7 +3957,7 @@ class MainTable(tk.Canvas):
3982
3957
  # if to_add then it's an undo/redo and don't
3983
3958
  # need to create fresh options
3984
3959
  if create_ops:
3985
- # if rows are none it's a row options span
3960
+ # if cols are none it's a row options span
3986
3961
  if span["from_c"] is None:
3987
3962
  new_ops(
3988
3963
  mod_span(
@@ -6293,7 +6268,7 @@ class MainTable(tk.Canvas):
6293
6268
  box.coords.from_c <= c and box.coords.upto_c > c
6294
6269
  for item, box in self.get_selection_items(
6295
6270
  cells=False,
6296
- columns=False,
6271
+ rows=False,
6297
6272
  )
6298
6273
  )
6299
6274
 
tksheet/row_index.py CHANGED
@@ -129,7 +129,7 @@ class RowIndex(tk.Canvas):
129
129
  self.align = kwargs["row_index_align"]
130
130
  self.default_index = kwargs["default_row_index"].lower()
131
131
 
132
- self.reset_tree()
132
+ self.tree_reset()
133
133
  self.basic_bindings()
134
134
 
135
135
  def basic_bindings(self, enable: bool = True) -> None:
@@ -148,7 +148,7 @@ class RowIndex(tk.Canvas):
148
148
  self.unbind("<Double-Button-1>")
149
149
  self.unbind(rc_binding)
150
150
 
151
- def reset_tree(self) -> None:
151
+ def tree_reset(self) -> None:
152
152
  # treeview mode
153
153
  self.tree = {}
154
154
  self.tree_open_ids = set()
tksheet/sheet.py CHANGED
@@ -1476,7 +1476,7 @@ class Sheet(tk.Frame):
1476
1476
  if sheet_options:
1477
1477
  self.ops = new_sheet_options()
1478
1478
  if tree:
1479
- self.RI.reset_tree()
1479
+ self.RI.tree_reset()
1480
1480
  self.set_refresh_timer(redraw)
1481
1481
  return self
1482
1482
 
@@ -2998,9 +2998,10 @@ class Sheet(tk.Frame):
2998
2998
 
2999
2999
  def get_selected_min_max(
3000
3000
  self,
3001
- ) -> (
3002
- tuple[int, int, int, int] | tuple[None, None, None, None]
3003
- ): # returns (min_y, min_x, max_y, max_x) of any selections including rows/columns
3001
+ ) -> tuple[int, int, int, int] | tuple[None, None, None, None]:
3002
+ """
3003
+ Returns (min_y, min_x, max_y, max_x) of all selection boxes
3004
+ """
3004
3005
  return self.MT.get_selected_min_max()
3005
3006
 
3006
3007
  # Modifying Selected Cells
@@ -3286,12 +3287,12 @@ class Sheet(tk.Frame):
3286
3287
 
3287
3288
  def get_column_widths(self, canvas_positions: bool = False) -> list[float]:
3288
3289
  if canvas_positions:
3289
- return [int(n) for n in self.MT.col_positions]
3290
+ return self.MT.col_positions
3290
3291
  return self.MT.get_column_widths()
3291
3292
 
3292
3293
  def get_row_heights(self, canvas_positions: bool = False) -> list[float]:
3293
3294
  if canvas_positions:
3294
- return [int(n) for n in self.MT.row_positions]
3295
+ return self.MT.row_positions
3295
3296
  return self.MT.get_row_heights()
3296
3297
 
3297
3298
  def set_column_widths(
@@ -4391,6 +4392,61 @@ class Sheet(tk.Frame):
4391
4392
  )
4392
4393
  return self
4393
4394
 
4395
+ def tree_reset(self) -> Sheet:
4396
+ self.deselect()
4397
+ self.RI.tree_reset()
4398
+ return self
4399
+
4400
+ def tree_get_open(self) -> set[str]:
4401
+ """
4402
+ Returns the set[str] of iids that are open in the treeview
4403
+ """
4404
+ return self.RI.tree_open_ids
4405
+
4406
+ def tree_set_open(self, open_ids: set[str]) -> Sheet:
4407
+ """
4408
+ Accepts set[str] of iids that are open in the treeview
4409
+ Closes everything else
4410
+ """
4411
+ self.RI.tree_open_ids = open_ids
4412
+ self.hide_rows(
4413
+ set(self.MT.displayed_rows),
4414
+ redraw=False,
4415
+ deselect_all=False,
4416
+ data_indexes=True,
4417
+ )
4418
+ self.show_rows(
4419
+ (self.RI.tree_rns[iid] for iid in self.get_children("")),
4420
+ redraw=False,
4421
+ deselect_all=True,
4422
+ )
4423
+ self.tree_open(*open_ids)
4424
+ return self
4425
+
4426
+ def tree_open(self, *items) -> Sheet:
4427
+ """
4428
+ If used without args all items are opened
4429
+ """
4430
+ if items:
4431
+ for item in items:
4432
+ self.item(item, open_=True)
4433
+ else:
4434
+ for item in self.get_children():
4435
+ self.item(item, open_=True)
4436
+ return self
4437
+
4438
+ def tree_close(self, *items) -> Sheet:
4439
+ """
4440
+ If used without args all items are closed
4441
+ """
4442
+ if items:
4443
+ for item in items:
4444
+ self.item(item, open_=False)
4445
+ else:
4446
+ for item in self.get_children():
4447
+ self.item(item, open_=False)
4448
+ return self
4449
+
4394
4450
  def insert(
4395
4451
  self,
4396
4452
  parent: str = "",
@@ -4460,7 +4516,12 @@ class Sheet(tk.Frame):
4460
4516
  text: str | None = None,
4461
4517
  values: list | None = None,
4462
4518
  open_: bool | None = None,
4463
- ) -> DotDict:
4519
+ ) -> DotDict | Sheet:
4520
+ """
4521
+ Modify options for item
4522
+ If no options are set then returns DotDict of options for item
4523
+ Else returns Sheet
4524
+ """
4464
4525
  if not (item := item.lower()) or item not in self.RI.tree:
4465
4526
  raise ValueError(f"Item '{item}' does not exist.")
4466
4527
  if isinstance(iid, str):
@@ -4479,28 +4540,33 @@ class Sheet(tk.Frame):
4479
4540
  if isinstance(values, list):
4480
4541
  self.set_data(self.RI.tree_rns[item], values)
4481
4542
  if isinstance(open_, bool):
4482
- if not self.RI.tree[item].children or not open_:
4543
+ if self.RI.tree[item].children:
4544
+ if open_:
4545
+ self.RI.tree_open_ids.add(item)
4546
+ self.show_rows(
4547
+ (self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item, check_open=True)),
4548
+ redraw=False,
4549
+ deselect_all=False,
4550
+ )
4551
+ else:
4552
+ self.RI.tree_open_ids.discard(item)
4553
+ self.hide_rows(
4554
+ (self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item)),
4555
+ redraw=False,
4556
+ deselect_all=False,
4557
+ data_indexes=True,
4558
+ )
4559
+ else:
4483
4560
  self.RI.tree_open_ids.discard(item)
4484
- if open_:
4485
- self.RI.tree_open_ids.add(item)
4486
- self.show_rows(
4487
- (self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item, check_open=True)),
4488
- redraw=False,
4489
- deselect_all=False,
4490
- )
4491
- elif self.RI.tree[item].children:
4492
- self.hide_rows(
4493
- (self.RI.tree_rns[did] for did in self.RI.get_iid_descendants(item)),
4494
- redraw=False,
4495
- deselect_all=False,
4496
- data_indexes=True,
4497
- )
4498
- self.set_refresh_timer(isinstance(text, str) or isinstance(values, list) or isinstance(open_, bool))
4499
- return DotDict(
4500
- text=self.RI.tree[item].text,
4501
- values=self[self.RI.tree_rns[item]].options(ndim=1).data,
4502
- open_=item in self.RI.tree_open_ids,
4503
- )
4561
+ get = not (isinstance(iid, str) or isinstance(text, str) or isinstance(values, list) or isinstance(open_, bool))
4562
+ self.set_refresh_timer(redraw=not get)
4563
+ if get:
4564
+ return DotDict(
4565
+ text=self.RI.tree[item].text,
4566
+ values=self[self.RI.tree_rns[item]].options(ndim=1).data,
4567
+ open_=item in self.RI.tree_open_ids,
4568
+ )
4569
+ return self
4504
4570
 
4505
4571
  def itemrow(self, item: str) -> int:
4506
4572
  return self.RI.tree_rns[item.lower()]
@@ -4522,11 +4588,6 @@ class Sheet(tk.Frame):
4522
4588
  else:
4523
4589
  yield from (n.iid for n in self.RI.tree[item].children)
4524
4590
 
4525
- def reset_tree(self) -> Sheet:
4526
- self.deselect()
4527
- self.RI.reset_tree()
4528
- return self
4529
-
4530
4591
  def del_items(self, *items) -> Sheet:
4531
4592
  """
4532
4593
  Also deletes all descendants of items
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tksheet
3
- Version: 7.1.1
3
+ Version: 7.1.2
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=-P8w8KS0O82elJMwvIYsdoTCWYEV3mRGX_60GToTxWI,1874
1
+ tksheet/__init__.py,sha256=XdNk6UqANLa3RfjSgcbjOXH8Rjtf-9LLCGU8EESkoMY,1874
2
2
  tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
3
3
  tksheet/column_headers.py,sha256=1I49CQS4unBcJ-y044R-DtYhJ4zUplrOfImOk8qHIj8,99396
4
4
  tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
5
5
  tksheet/functions.py,sha256=NnBFBvTqT6VhCK8pFlXqTwKekKpcsCYeuxaALcJeVzw,38651
6
- tksheet/main_table.py,sha256=SwJVPoivJuu8D37lvoo1Hn52P75TvjFwg-E2QHILhuw,319302
6
+ tksheet/main_table.py,sha256=Kh8ND0JnVHVeiwTt07FJkbP2GTlen3qCS5bt0xpbrdA,318848
7
7
  tksheet/other_classes.py,sha256=s559IxoFEeAgxTKrrHZnAeXUXWIEmiP4tBncIdQIXSQ,13544
8
- tksheet/row_index.py,sha256=4Q_J83AKKZhajeK23_deby9CXfL4wl1MOWnSu8LW2PU,104428
9
- tksheet/sheet.py,sha256=66AKMY-wNiLi2briyUlbUHtsVNwEWKnljx58q1c1tKU,254086
8
+ tksheet/row_index.py,sha256=GzK6Gfi4v6zwALn5IvBz22SdSFLUgxS1yLX4bm7z3sg,104428
9
+ tksheet/sheet.py,sha256=ZoxxO1VZZzgshmp_3eJkkzXjx6S3M5T95sw3CTfUqHo,255904
10
10
  tksheet/sheet_options.py,sha256=Vcy4RxTKvf2HM-Yc53ex0lpBe6ATXc_pdx4oLhfjDgU,11906
11
11
  tksheet/text_editor.py,sha256=7xsEbgIyAWHDBWroh2wk1VeoVftFALlPZC9OANgD6LA,6662
12
12
  tksheet/themes.py,sha256=OwUe31NRbosjw3ZoZsMyB8lNVyYin9YcKLhCturi5q8,13398
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=Iukk7-MMT9X7vv0m3nQPKzbp2Iw2Pg1wJEW7js919Mo,2092
16
- tksheet-7.1.1.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
17
- tksheet-7.1.1.dist-info/METADATA,sha256=2PCCoZogg-1iMfDoYbKCV6a_2N8Tf0kYgIX4o908q98,6013
18
- tksheet-7.1.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
19
- tksheet-7.1.1.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
20
- tksheet-7.1.1.dist-info/RECORD,,
16
+ tksheet-7.1.2.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
17
+ tksheet-7.1.2.dist-info/METADATA,sha256=plUvLhmwtF-WEveHRmf99r4YViVdRJDZTCCJ6noYtZU,6013
18
+ tksheet-7.1.2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
19
+ tksheet-7.1.2.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
20
+ tksheet-7.1.2.dist-info/RECORD,,