tksheet 7.2.4__py3-none-any.whl → 7.2.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/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
  tksheet - A Python tkinter table widget
5
5
  """
6
6
 
7
- __version__ = "7.2.4"
7
+ __version__ = "7.2.5"
8
8
 
9
9
  from .colors import (
10
10
  color_map,
@@ -53,6 +53,7 @@ from .functions import (
53
53
  get_new_indexes,
54
54
  get_seq_without_gaps_at_index,
55
55
  insert_items,
56
+ is_contiguous,
56
57
  is_iterable,
57
58
  move_elements_by_mapping,
58
59
  move_elements_to,
tksheet/functions.py CHANGED
@@ -412,8 +412,8 @@ def consecutive_ranges(seq: Sequence[int]) -> Generator[tuple[int, int]]:
412
412
  yield seq[start], seq[-1] + 1
413
413
 
414
414
 
415
- def is_contiguous(seq: list[int]) -> bool:
416
- itr = iter(seq)
415
+ def is_contiguous(iterable: Iterator[int]) -> bool:
416
+ itr = iter(iterable)
417
417
  prev = next(itr)
418
418
  return all(i == (prev := prev + 1) for i in itr)
419
419
 
@@ -485,7 +485,6 @@ def move_elements_to(
485
485
  return move_elements_by_mapping(
486
486
  seq,
487
487
  *get_new_indexes(
488
- len(seq),
489
488
  move_to,
490
489
  to_move,
491
490
  get_inverse=True,
@@ -494,19 +493,15 @@ def move_elements_to(
494
493
 
495
494
 
496
495
  def get_new_indexes(
497
- seqlen: int,
498
496
  move_to: int,
499
497
  to_move: list[int],
500
- keep_len: bool = True,
501
498
  get_inverse: bool = False,
502
499
  ) -> tuple[dict]:
503
- # returns
504
- # {old idx: new idx, ...}
505
- offset = len(to_move) - 1
506
- if move_to <= to_move[0]:
507
- new_idxs = range(move_to, move_to + len(to_move))
508
- else:
509
- new_idxs = range(move_to - offset, move_to - offset + len(to_move))
500
+ """
501
+ returns {old idx: new idx, ...}
502
+ """
503
+ offset = sum(1 for i in to_move if i < move_to)
504
+ new_idxs = range(move_to - offset, move_to - offset + len(to_move))
510
505
  new_idxs = {old: new for old, new in zip(to_move, new_idxs)}
511
506
  if get_inverse:
512
507
  return new_idxs, dict(zip(new_idxs.values(), new_idxs))
tksheet/main_table.py CHANGED
@@ -996,18 +996,15 @@ class MainTable(tk.Canvas):
996
996
  data_indexes: bool = False,
997
997
  ) -> tuple[dict[int, int], dict[int, int], int, dict[int, int]]:
998
998
  if not data_indexes or self.all_columns_displayed:
999
- disp_new_idxs = get_new_indexes(
1000
- seqlen=len(self.col_positions) - 1,
1001
- move_to=move_to,
1002
- to_move=to_move,
1003
- )
999
+ disp_new_idxs = get_new_indexes(move_to=move_to, to_move=to_move)
1004
1000
  else:
1005
1001
  disp_new_idxs = {}
1006
- totalcols = self.equalize_data_row_lengths(at_least_cols=move_to + 1)
1007
- if self.all_columns_displayed or data_indexes:
1008
- data_new_idxs = get_new_indexes(seqlen=totalcols, move_to=move_to, to_move=to_move)
1009
- elif not self.all_columns_displayed and not data_indexes:
1010
- data_new_idxs = get_new_indexes(seqlen=len(self.displayed_columns), move_to=move_to, to_move=to_move)
1002
+ if not self.all_columns_displayed and not data_indexes:
1003
+ totalcols = self.equalize_data_row_lengths(at_least_cols=self.datacn(move_to) + 1)
1004
+ else:
1005
+ totalcols = self.equalize_data_row_lengths(at_least_cols=move_to + 1)
1006
+ data_new_idxs = get_new_indexes(move_to=move_to, to_move=to_move)
1007
+ if not self.all_columns_displayed and not data_indexes:
1011
1008
  moved = {self.displayed_columns[i] for i in to_move}
1012
1009
  data_new_idxs = dict(
1013
1010
  filter(
@@ -1233,22 +1230,13 @@ class MainTable(tk.Canvas):
1233
1230
  data_indexes: bool = False,
1234
1231
  ) -> tuple[dict[int, int], dict[int, int], int, dict[int, int]]:
1235
1232
  if not data_indexes or self.all_rows_displayed:
1236
- disp_new_idxs = get_new_indexes(
1237
- seqlen=len(self.row_positions) - 1,
1238
- move_to=move_to,
1239
- to_move=to_move,
1240
- )
1233
+ disp_new_idxs = get_new_indexes(move_to=move_to, to_move=to_move)
1241
1234
  else:
1242
1235
  disp_new_idxs = {}
1243
- self.fix_data_len(move_to)
1244
- totalrows = max(
1245
- self.total_data_rows(),
1246
- len(self.row_positions) - 1,
1247
- )
1248
- if self.all_rows_displayed or data_indexes:
1249
- data_new_idxs = get_new_indexes(seqlen=totalrows, move_to=move_to, to_move=to_move)
1250
- elif not self.all_rows_displayed and not data_indexes:
1251
- data_new_idxs = get_new_indexes(seqlen=len(self.displayed_rows), move_to=move_to, to_move=to_move)
1236
+ self.fix_data_len(self.datarn(move_to) if not self.all_rows_displayed and not data_indexes else move_to)
1237
+ totalrows = max(self.total_data_rows(), len(self.row_positions) - 1)
1238
+ data_new_idxs = get_new_indexes(move_to=move_to, to_move=to_move)
1239
+ if not self.all_rows_displayed and not data_indexes:
1252
1240
  moved = {self.displayed_rows[i] for i in to_move}
1253
1241
  data_new_idxs = dict(
1254
1242
  filter(
@@ -1284,7 +1272,7 @@ class MainTable(tk.Canvas):
1284
1272
  len(self.row_positions) - 1,
1285
1273
  max(data_new_idxs.values(), default=0),
1286
1274
  )
1287
- self.fix_data_len(totalrows)
1275
+ self.fix_data_len(totalrows - 1)
1288
1276
  if event_data is None:
1289
1277
  event_data = event_dict(
1290
1278
  name="move_rows",
@@ -4373,7 +4361,7 @@ class MainTable(tk.Canvas):
4373
4361
  create_ops=create_ops,
4374
4362
  )
4375
4363
  if create_selections:
4376
- self.deselect("all")
4364
+ self.deselect("all", redraw=False)
4377
4365
  for boxst, boxend in consecutive_ranges(tuple(reversed(column_widths))):
4378
4366
  self.create_selection_box(
4379
4367
  0,
@@ -4517,7 +4505,7 @@ class MainTable(tk.Canvas):
4517
4505
  create_ops=create_ops,
4518
4506
  )
4519
4507
  if create_selections:
4520
- self.deselect("all")
4508
+ self.deselect("all", redraw=False)
4521
4509
  for boxst, boxend in consecutive_ranges(tuple(reversed(row_heights))):
4522
4510
  self.create_selection_box(
4523
4511
  boxst,
@@ -6378,6 +6366,18 @@ class MainTable(tk.Canvas):
6378
6366
  for c in range(box.coords.from_c, box.coords.upto_c)
6379
6367
  }
6380
6368
 
6369
+ def gen_selected_cells(
6370
+ self,
6371
+ get_rows: bool = False,
6372
+ get_cols: bool = False,
6373
+ ) -> Generator[tuple[int, int]]:
6374
+ yield from (
6375
+ (r, c)
6376
+ for item, box in self.get_selection_items(rows=get_rows, columns=get_cols)
6377
+ for r in range(box.coords.from_r, box.coords.upto_r)
6378
+ for c in range(box.coords.from_c, box.coords.upto_c)
6379
+ )
6380
+
6381
6381
  def get_all_selection_boxes(self) -> tuple[tuple[int, int, int, int]]:
6382
6382
  return tuple(box.coords for item, box in self.get_selection_items())
6383
6383
 
tksheet/row_index.py CHANGED
@@ -2488,6 +2488,14 @@ class RowIndex(tk.Canvas):
2488
2488
  ):
2489
2489
  yield from self.get_iid_descendants(cnode.iid, check_open)
2490
2490
 
2491
+ def items_parent(self, iid: str) -> str:
2492
+ if self.tree[iid].parent:
2493
+ return self.tree[iid].parent.iid
2494
+ return ""
2495
+
2496
+ def gen_top_nodes(self) -> Generator[Node]:
2497
+ yield from (node for node in self.MT._row_index if node.parent == "")
2498
+
2491
2499
  def get_treeview_indent(self, iid: str) -> int:
2492
2500
  if isinstance(self.PAR.ops.treeview_indent, str):
2493
2501
  indent = self.MT.index_txt_width * int(self.PAR.ops.treeview_indent)
tksheet/sheet.py CHANGED
@@ -19,6 +19,7 @@ from .column_headers import ColumnHeaders
19
19
  from .functions import (
20
20
  add_highlight,
21
21
  add_to_options,
22
+ consecutive_ranges,
22
23
  convert_align,
23
24
  data_to_displayed_idxs,
24
25
  del_from_options,
@@ -2440,23 +2441,29 @@ class Sheet(tk.Frame):
2440
2441
  include_header=include_header,
2441
2442
  )
2442
2443
 
2443
- def full_move_rows_idxs(self, data_idxs: dict[int, int]) -> dict[int, int]:
2444
+ def full_move_rows_idxs(self, data_idxs: dict[int, int], max_idx: int | None = None) -> dict[int, int]:
2444
2445
  """
2445
2446
  Converts the dict provided by moving rows event data
2446
2447
  Under the keys ['moved']['rows']['data']
2447
2448
  Into a dict of {old index: new index} for every row
2448
2449
  Includes row numbers in cell options, spans, etc.
2449
2450
  """
2450
- return self.MT.get_full_new_idxs(self.MT.get_max_row_idx(), data_idxs)
2451
+ return self.MT.get_full_new_idxs(
2452
+ self.MT.get_max_row_idx() if max_idx is None else max_idx,
2453
+ data_idxs,
2454
+ )
2451
2455
 
2452
- def full_move_columns_idxs(self, data_idxs: dict[int, int]) -> dict[int, int]:
2456
+ def full_move_columns_idxs(self, data_idxs: dict[int, int], max_idx: int | None = None) -> dict[int, int]:
2453
2457
  """
2454
2458
  Converts the dict provided by moving columns event data
2455
2459
  Under the keys ['moved']['columns']['data']
2456
2460
  Into a dict of {old index: new index} for every column
2457
2461
  Includes column numbers in cell options, spans, etc.
2458
2462
  """
2459
- return self.MT.get_full_new_idxs(self.MT.get_max_column_idx(), data_idxs)
2463
+ return self.MT.get_full_new_idxs(
2464
+ self.MT.get_max_column_idx() if max_idx is None else max_idx,
2465
+ data_idxs,
2466
+ )
2460
2467
 
2461
2468
  # Highlighting Cells
2462
2469
 
@@ -3005,8 +3012,8 @@ class Sheet(tk.Frame):
3005
3012
  box=selected[3],
3006
3013
  )
3007
3014
  else:
3008
- self.MT.deselect()
3009
- return self
3015
+ self.MT.deselect(redraw=False)
3016
+ return self.set_refresh_timer()
3010
3017
 
3011
3018
  def get_selected_rows(
3012
3019
  self,
@@ -3053,6 +3060,13 @@ class Sheet(tk.Frame):
3053
3060
  )
3054
3061
  return self.MT.get_selected_cells(get_rows=get_rows, get_cols=get_columns)
3055
3062
 
3063
+ def gen_selected_cells(
3064
+ self,
3065
+ get_rows: bool = False,
3066
+ get_columns: bool = False,
3067
+ ) -> Generator[tuple[int, int]]:
3068
+ yield from self.MT.gen_selected_cells(get_rows=get_rows, get_cols=get_columns)
3069
+
3056
3070
  def get_all_selection_boxes(self) -> tuple[tuple[int, int, int, int]]:
3057
3071
  return self.MT.get_all_selection_boxes()
3058
3072
 
@@ -3065,11 +3079,11 @@ class Sheet(tk.Frame):
3065
3079
 
3066
3080
  @boxes.setter
3067
3081
  def boxes(self, boxes: Sequence[tuple[tuple[int, int, int, int], str]]) -> Sheet:
3068
- self.MT.deselect()
3082
+ self.MT.deselect(redraw=False)
3069
3083
  self.MT.reselect_from_get_boxes(
3070
3084
  boxes={box[0] if isinstance(box[0], tuple) else tuple(box[0]): box[1] for box in boxes}
3071
3085
  )
3072
- return self
3086
+ return self.set_refresh_timer()
3073
3087
 
3074
3088
  @property
3075
3089
  def canvas_boxes(self) -> dict[int, SelectionBox]:
@@ -4700,6 +4714,7 @@ class Sheet(tk.Frame):
4700
4714
  create_selections=False,
4701
4715
  fill=False,
4702
4716
  push_ops=push_ops,
4717
+ redraw=False,
4703
4718
  )
4704
4719
  self.MT.all_rows_displayed = False
4705
4720
  self.MT.displayed_rows = list(range(len(self.MT._row_index)))
@@ -4740,9 +4755,8 @@ class Sheet(tk.Frame):
4740
4755
  open_ids = set(filter(self.exists, map(str.lower, open_ids)))
4741
4756
  self.RI.tree_open_ids = set()
4742
4757
  if open_ids:
4743
- to_open = self._tree_open(open_ids)
4744
4758
  self.show_rows(
4745
- rows=to_open,
4759
+ rows=self._tree_open(open_ids),
4746
4760
  redraw=False,
4747
4761
  deselect_all=False,
4748
4762
  )
@@ -4991,13 +5005,11 @@ class Sheet(tk.Frame):
4991
5005
  self.move(iid, parent)
4992
5006
  return self
4993
5007
 
4994
- def find_rn_at_top_index(self, index: int) -> int:
4995
- wo_par = 0
4996
- for rn, n in enumerate(self.MT._row_index):
4997
- if not n.parent:
4998
- if wo_par == index:
4999
- return rn
5000
- wo_par += 1
5008
+ def top_index_row(self, index: int) -> int:
5009
+ try:
5010
+ return next(self.RI.tree_rns[n.iid] for i, n in enumerate(self.RI.gen_top_nodes()) if i == index)
5011
+ except Exception:
5012
+ return None
5001
5013
 
5002
5014
  def move(self, item: str, parent: str, index: int | None = None) -> Sheet:
5003
5015
  """
@@ -5020,8 +5032,6 @@ class Sheet(tk.Frame):
5020
5032
  index = len(parent_node.children) - 1
5021
5033
  item_r = self.RI.tree_rns[item]
5022
5034
  new_r = self.RI.tree_rns[parent_node.children[index].iid]
5023
- if item_node not in parent_node.children:
5024
- new_r += 1
5025
5035
  new_r_desc = sum(1 for _ in self.RI.get_iid_descendants(parent_node.children[index].iid))
5026
5036
  item_desc = sum(1 for _ in self.RI.get_iid_descendants(item))
5027
5037
  if item_r < new_r:
@@ -5029,6 +5039,8 @@ class Sheet(tk.Frame):
5029
5039
  else:
5030
5040
  r_ctr = new_r
5031
5041
  else:
5042
+ if index is None:
5043
+ index = 0
5032
5044
  r_ctr = self.RI.tree_rns[parent_node.iid] + 1
5033
5045
  mapping[item_r] = r_ctr
5034
5046
  if parent in self.RI.tree_open_ids and self.item_displayed(parent):
@@ -5039,11 +5051,19 @@ class Sheet(tk.Frame):
5039
5051
  if to_show and self.RI.ancestors_all_open(did, item_node.parent):
5040
5052
  to_show.append(r_ctr)
5041
5053
  r_ctr += 1
5042
- self.RI.remove_node_from_parents_children(item_node)
5043
- item_node.parent = parent_node
5044
- parent_node.children.append(item_node)
5054
+ if parent == self.RI.items_parent(item):
5055
+ pop_index = parent_node.children.index(item_node)
5056
+ parent_node.children.insert(index, parent_node.children.pop(pop_index))
5057
+ else:
5058
+ self.RI.remove_node_from_parents_children(item_node)
5059
+ item_node.parent = parent_node
5060
+ parent_node.children.insert(index, item_node)
5045
5061
  else:
5046
- new_r = self.find_rn_at_top_index((sum(1 for _ in self.get_children("")) - 1) if index is None else index)
5062
+ if index is None:
5063
+ new_r = self.top_index_row((sum(1 for _ in self.RI.gen_top_nodes()) - 1))
5064
+ else:
5065
+ if (new_r := self.top_index_row(index)) is None:
5066
+ new_r = self.top_index_row((sum(1 for _ in self.RI.gen_top_nodes()) - 1))
5047
5067
  item_r = self.RI.tree_rns[item]
5048
5068
  if item_r < new_r:
5049
5069
  par_desc = sum(1 for _ in self.RI.get_iid_descendants(self.rowitem(new_r, data_index=True)))
@@ -5086,7 +5106,7 @@ class Sheet(tk.Frame):
5086
5106
  if (item := item.lower()) not in self.RI.tree:
5087
5107
  raise ValueError(f"Item '{item}' does not exist.")
5088
5108
  if not self.RI.tree[item].parent:
5089
- return sorted(self.RI.tree_rns[iid] for iid in self.get_children("")).index(self.RI.tree_rns[item])
5109
+ return next(index for index, node in enumerate(self.RI.gen_top_nodes()) if node == self.RI.tree[item])
5090
5110
  return self.RI.tree[item].parent.children.index(self.RI.tree[item])
5091
5111
 
5092
5112
  def item_displayed(self, item: str) -> bool:
@@ -5098,7 +5118,7 @@ class Sheet(tk.Frame):
5098
5118
  raise ValueError(f"Item '{item}' does not exist.")
5099
5119
  return self.RI.tree_rns[item] in self.MT.displayed_rows
5100
5120
 
5101
- def display_item(self, item: str) -> Sheet:
5121
+ def display_item(self, item: str, redraw=False) -> Sheet:
5102
5122
  """
5103
5123
  Ensure that item is displayed in the tree
5104
5124
  - Opens all of an item's ancestors
@@ -5109,16 +5129,22 @@ class Sheet(tk.Frame):
5109
5129
  raise ValueError(f"Item '{item}' does not exist.")
5110
5130
  if self.RI.tree[item].parent:
5111
5131
  for iid in self.RI.get_iid_ancestors(item):
5112
- self.item(iid, open_=True)
5132
+ self.item(iid, open_=True, redraw=False)
5133
+ return self.set_refresh_timer(redraw)
5113
5134
 
5114
- def scroll_to_item(self, item: str) -> Sheet:
5135
+ def scroll_to_item(self, item: str, redraw=False) -> Sheet:
5115
5136
  """
5116
5137
  Scrolls to an item and ensures that it is displayed
5117
5138
  """
5118
5139
  if (item := item.lower()) not in self.RI.tree:
5119
5140
  raise ValueError(f"Item '{item}' does not exist.")
5120
- self.display_item(item)
5121
- self.see(row=bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]), keep_xscroll=True)
5141
+ self.display_item(item, redraw=False)
5142
+ self.see(
5143
+ row=bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]),
5144
+ keep_xscroll=True,
5145
+ redraw=False,
5146
+ )
5147
+ return self.set_refresh_timer(redraw)
5122
5148
 
5123
5149
  def selection(self, cells: bool = False) -> list[str]:
5124
5150
  """
@@ -5129,45 +5155,68 @@ class Sheet(tk.Frame):
5129
5155
  for rn in self.get_selected_rows(get_cells_as_rows=cells)
5130
5156
  ]
5131
5157
 
5132
- def selection_set(self, *items) -> Sheet:
5158
+ def selection_set(self, *items, redraw: bool = True) -> Sheet:
5133
5159
  if any(item.lower() in self.RI.tree for item in unpack(items)):
5134
- self.deselect()
5135
- self.selection_add(*items)
5136
- return self
5160
+ self.deselect(redraw=False)
5161
+ self.selection_add(*items, redraw=False)
5162
+ return self.set_refresh_timer(redraw)
5137
5163
 
5138
- def selection_add(self, *items) -> Sheet:
5164
+ def selection_add(self, *items, redraw: bool = True) -> Sheet:
5165
+ to_open = []
5166
+ quick_displayed_check = set(self.MT.displayed_rows)
5139
5167
  for item in unpack(items):
5140
- if (item := item.lower()) not in self.RI.tree:
5141
- continue
5142
- if not self.item_displayed(item):
5143
- self.display_item(item)
5144
- self.add_row_selection(bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]))
5145
- return self
5168
+ if self.RI.tree_rns[(item := item.lower())] not in quick_displayed_check and self.RI.tree[item].parent:
5169
+ to_open.extend(list(self.RI.get_iid_ancestors(item)))
5170
+ if to_open:
5171
+ self.show_rows(
5172
+ rows=self._tree_open(to_open),
5173
+ redraw=False,
5174
+ deselect_all=False,
5175
+ )
5176
+ for startr, endr in consecutive_ranges(
5177
+ sorted(
5178
+ bisect_left(
5179
+ self.MT.displayed_rows,
5180
+ self.RI.tree_rns[item.lower()],
5181
+ )
5182
+ for item in unpack(items)
5183
+ )
5184
+ ):
5185
+ self.MT.create_selection_box(
5186
+ startr,
5187
+ 0,
5188
+ endr,
5189
+ len(self.MT.col_positions) - 1,
5190
+ "rows",
5191
+ set_current=True,
5192
+ ext=True,
5193
+ )
5194
+ self.MT.run_selection_binding("rows")
5195
+ return self.set_refresh_timer(redraw)
5146
5196
 
5147
- def selection_remove(self, *items) -> Sheet:
5197
+ def selection_remove(self, *items, redraw: bool = True) -> Sheet:
5148
5198
  for item in unpack(items):
5149
5199
  if (item := item.lower()) not in self.RI.tree:
5150
5200
  continue
5151
5201
  try:
5152
- self.deselect(bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]))
5202
+ self.deselect(bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]), redraw=False)
5153
5203
  except Exception:
5154
5204
  continue
5155
- return self
5205
+ return self.set_refresh_timer(redraw)
5156
5206
 
5157
- def selection_toggle(self, *items) -> Sheet:
5207
+ def selection_toggle(self, *items, redraw: bool = True) -> Sheet:
5158
5208
  selected = set(self.MT._row_index[self.displayed_row_to_data(rn)].iid for rn in self.get_selected_rows())
5159
5209
  add = []
5160
5210
  remove = []
5161
5211
  for item in unpack(items):
5162
- if (item := item.lower()) not in self.RI.tree:
5163
- continue
5164
- if item in selected:
5165
- remove.append(item)
5166
- else:
5167
- add.append(item)
5168
- self.selection_remove(*remove)
5169
- self.selection_add(*add)
5170
- return self
5212
+ if (item := item.lower()) in self.RI.tree:
5213
+ if item in selected:
5214
+ remove.append(item)
5215
+ else:
5216
+ add.append(item)
5217
+ self.selection_remove(*remove, redraw=False)
5218
+ self.selection_add(*add, redraw=False)
5219
+ return self.set_refresh_timer(redraw)
5171
5220
 
5172
5221
  # Functions not in docs
5173
5222
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tksheet
3
- Version: 7.2.4
3
+ Version: 7.2.5
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=BW3Re3N7ZT4N4duPVUyOe9D4v3KgirJH9kck_Mxl3JA,2124
1
+ tksheet/__init__.py,sha256=jxysTI4P2sqhdCWqckgkzFoja_LNIxd-Xbd57GWir6A,2144
2
2
  tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
3
3
  tksheet/column_headers.py,sha256=PTkKI8OHWn4GzBhPJYU7c8Lz0X52DldV-0J4mPQbjkE,102045
4
4
  tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
5
- tksheet/functions.py,sha256=rNfDpQRoXZm_Ro-tlF92ox3fi37p71Mio1PGTreM_oc,40835
6
- tksheet/main_table.py,sha256=VIP-SV3Z9QVH9qVbBth1koI-9PVj6yPQZQ4w_yrVp5U,327474
5
+ tksheet/functions.py,sha256=Ie53z5GWbGoUXUiTf0DtoyOadWFbMFXMFwUjM67vetI,40706
6
+ tksheet/main_table.py,sha256=tC3spF57o_yEc-o5b0USonf25d3dCZT9LS1UFKWfjaU,327559
7
7
  tksheet/other_classes.py,sha256=CDN38ZjKxZro9YOS_g0DjMC82-Mi9udedny4wdd90W0,14347
8
- tksheet/row_index.py,sha256=36e4xgNMwMuvciKLIboKpsiFBrMy_URh7y4OZX8Ygvo,108219
9
- tksheet/sheet.py,sha256=MWd753gZeFZ4u4w7ZLLSloaIqJg2TNsdvJFvAcxuL-E,270230
8
+ tksheet/row_index.py,sha256=IdmELtqq5siD2dLtCMdP2IkW6XljCVJyBwZo3GFWoOE,108497
9
+ tksheet/sheet.py,sha256=hWNp4E0UtbUbbbBNfTOecfadGWoWrRbxbfcLQEVW7pw,272364
10
10
  tksheet/sheet_options.py,sha256=Azo7_-H0e0ssYEoU7Mq_OWy3S-U05rp4_6Q2E2Ffuu8,12262
11
11
  tksheet/text_editor.py,sha256=aRm1Y5GfORiEAJthtN1uQ30CT3VoF8mRWvR-SIXPrJU,6548
12
12
  tksheet/themes.py,sha256=N9nAj6vcWk4UdcrAakvz2LPbJEJWXdv3j7Om6AnvX5k,14474
13
13
  tksheet/top_left_rectangle.py,sha256=o-M6i5NjaJwo60tV-BDP9SbaT1CzQNoPjuoC7p-nb5Q,8436
14
14
  tksheet/types.py,sha256=IgoEHMbceKpakcZtanxKaKJ4RdCq7UW6EoEIIz5O59k,340
15
15
  tksheet/vars.py,sha256=86ubZZElsnQuC6Lv6bW2lt2NhD9wAp6PxtkK7ufKqq0,3452
16
- tksheet-7.2.4.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
17
- tksheet-7.2.4.dist-info/METADATA,sha256=zPj4U-AFwX_X_Vhzq6SlOAk73teNB50Ple_OvTHLvN4,6284
18
- tksheet-7.2.4.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
19
- tksheet-7.2.4.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
20
- tksheet-7.2.4.dist-info/RECORD,,
16
+ tksheet-7.2.5.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
17
+ tksheet-7.2.5.dist-info/METADATA,sha256=svT0ORmBRA9KUD05sBQFVDLkvLBjFWicOi-pJvnw3HQ,6284
18
+ tksheet-7.2.5.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
19
+ tksheet-7.2.5.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
20
+ tksheet-7.2.5.dist-info/RECORD,,