tksheet 7.2.1__py3-none-any.whl → 7.2.3__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/sheet.py CHANGED
@@ -4,7 +4,7 @@ import tkinter as tk
4
4
  from bisect import bisect_left
5
5
  from collections import defaultdict, deque
6
6
  from collections.abc import Callable, Generator, Iterator, Sequence
7
- from itertools import accumulate, chain, islice, product
7
+ from itertools import accumulate, chain, islice, product, repeat
8
8
  from timeit import default_timer
9
9
  from tkinter import ttk
10
10
  from typing import Literal
@@ -592,7 +592,7 @@ class Sheet(tk.Frame):
592
592
  self.MT.enable_bindings(bindings)
593
593
  return self
594
594
 
595
- def disable_bindings(self, *bindings) -> Sheet:
595
+ def disable_bindings(self, *bindings: str) -> Sheet:
596
596
  self.MT.disable_bindings(bindings)
597
597
  return self
598
598
 
@@ -1081,8 +1081,11 @@ class Sheet(tk.Frame):
1081
1081
  Includes child widgets such as scroll bars
1082
1082
  Returns bool
1083
1083
  """
1084
- widget = self.focus_get()
1085
- return widget == self or any(widget == c for c in self.children.values())
1084
+ try:
1085
+ widget = self.focus_get()
1086
+ return widget == self or any(widget == c for c in self.children.values())
1087
+ except Exception:
1088
+ return False
1086
1089
 
1087
1090
  def focus_set(
1088
1091
  self,
@@ -1289,8 +1292,6 @@ class Sheet(tk.Frame):
1289
1292
  self,
1290
1293
  *key: CreateSpanTypes,
1291
1294
  ) -> object:
1292
- span = self.span_from_key(*key)
1293
- rows, cols = self.ranges_from_span(span)
1294
1295
  """
1295
1296
  e.g. retrieves entire table as pandas dataframe
1296
1297
  sheet["A1"].expand().options(pandas.DataFrame).data
@@ -1350,6 +1351,8 @@ class Sheet(tk.Frame):
1350
1351
  convert(data) - sends the data to an optional convert function
1351
1352
 
1352
1353
  """
1354
+ span = self.span_from_key(*key)
1355
+ rows, cols = self.ranges_from_span(span)
1353
1356
  tdisp, idisp, hdisp = span.tdisp, span.idisp, span.hdisp
1354
1357
  table, index, header = span.table, span.index, span.header
1355
1358
  fmt_kw = span.kwargs if span.type_ == "format" and span.kwargs else None
@@ -1500,6 +1503,7 @@ class Sheet(tk.Frame):
1500
1503
  self.MT.deselect(redraw=False)
1501
1504
  if sheet_options:
1502
1505
  self.ops = new_sheet_options()
1506
+ self.change_theme(redraw=False)
1503
1507
  if tree:
1504
1508
  self.RI.tree_reset()
1505
1509
  if tree or row_heights or column_widths:
@@ -1546,16 +1550,12 @@ class Sheet(tk.Frame):
1546
1550
  emit_event: bool | None = None,
1547
1551
  redraw: bool = True,
1548
1552
  ) -> EventDataDict:
1549
- span = self.span_from_key(*key)
1550
- if data is None:
1551
- data = []
1552
1553
  """
1553
1554
  e.g.
1554
1555
  df = pandas.DataFrame([[1, 2, 3], [4, 5, 6]])
1555
1556
  sheet["A1"] = df.values.tolist()
1556
1557
 
1557
- can't use slices or expand
1558
- just uses the from_r, from_c values
1558
+ just uses the spans from_r, from_c values
1559
1559
 
1560
1560
  'data' parameter could be:
1561
1561
  - list of lists
@@ -1599,6 +1599,9 @@ class Sheet(tk.Frame):
1599
1599
  - h stands for header
1600
1600
 
1601
1601
  """
1602
+ span = self.span_from_key(*key)
1603
+ if data is None:
1604
+ data = []
1602
1605
  startr, startc = span_froms(span)
1603
1606
  table, index, header = span.table, span.index, span.header
1604
1607
  fmt_kw = span.kwargs if span.type_ == "format" and span.kwargs else None
@@ -2266,16 +2269,14 @@ class Sheet(tk.Frame):
2266
2269
  mod_positions: bool = True,
2267
2270
  mod_data: bool = True,
2268
2271
  ) -> int | Sheet:
2272
+ total_rows = self.MT.total_data_rows()
2269
2273
  if number is None:
2270
- return self.MT.total_data_rows()
2274
+ return total_rows
2271
2275
  if not isinstance(number, int) or number < 0:
2272
2276
  raise ValueError("number argument must be integer and > 0")
2273
- if number > len(self.MT.data):
2274
- if mod_positions:
2275
- height = self.MT.get_default_row_height()
2276
- for r in range(number - len(self.MT.data)):
2277
- self.MT.insert_row_position("end", height)
2278
- elif number < len(self.MT.data):
2277
+ if number > total_rows and mod_positions:
2278
+ self.MT.insert_row_positions(heights=number - total_rows)
2279
+ elif number < total_rows:
2279
2280
  if not self.MT.all_rows_displayed:
2280
2281
  self.MT.display_rows(enable=False, reset_row_positions=False, deselect_all=True)
2281
2282
  self.MT.row_positions[number + 1 :] = []
@@ -2294,11 +2295,8 @@ class Sheet(tk.Frame):
2294
2295
  return total_cols
2295
2296
  if not isinstance(number, int) or number < 0:
2296
2297
  raise ValueError("number argument must be integer and > 0")
2297
- if number > total_cols:
2298
- if mod_positions:
2299
- width = self.ops.default_column_width
2300
- for c in range(number - total_cols):
2301
- self.MT.insert_col_position("end", width)
2298
+ if number > total_cols and mod_positions:
2299
+ self.MT.insert_col_positions(widths=number - total_cols)
2302
2300
  elif number < total_cols:
2303
2301
  if not self.MT.all_columns_displayed:
2304
2302
  self.MT.display_columns(enable=False, reset_col_positions=False, deselect_all=True)
@@ -3334,7 +3332,7 @@ class Sheet(tk.Frame):
3334
3332
  only_set_if_too_small: bool = False,
3335
3333
  redraw: bool = True,
3336
3334
  ) -> Sheet:
3337
- self.MT.set_cell_size_to_text(r=row, c=column, only_set_if_too_small=only_set_if_too_small)
3335
+ self.MT.set_cell_size_to_text(r=row, c=column, only_if_too_small=only_set_if_too_small)
3338
3336
  return self.set_refresh_timer(redraw)
3339
3337
 
3340
3338
  def set_all_cell_sizes_to_text(
@@ -3356,7 +3354,7 @@ class Sheet(tk.Frame):
3356
3354
  ) -> Sheet:
3357
3355
  self.CH.set_width_of_all_cols(
3358
3356
  width=width,
3359
- only_set_if_too_small=only_set_if_too_small,
3357
+ only_if_too_small=only_set_if_too_small,
3360
3358
  recreate=recreate_selection_boxes,
3361
3359
  )
3362
3360
  return self.set_refresh_timer(redraw)
@@ -3370,7 +3368,7 @@ class Sheet(tk.Frame):
3370
3368
  ) -> Sheet:
3371
3369
  self.RI.set_height_of_all_rows(
3372
3370
  height=height,
3373
- only_set_if_too_small=only_set_if_too_small,
3371
+ only_if_too_small=only_set_if_too_small,
3374
3372
  recreate=recreate_selection_boxes,
3375
3373
  )
3376
3374
  return self.set_refresh_timer(redraw)
@@ -3385,13 +3383,12 @@ class Sheet(tk.Frame):
3385
3383
  if column == "all" and width == "default":
3386
3384
  self.MT.reset_col_positions()
3387
3385
  elif column == "displayed" and width == "text":
3388
- sc, ec = self.MT.get_visible_columns(self.MT.canvasx(0), self.MT.canvasx(self.winfo_width()))
3389
- for c in range(sc, ec - 1):
3386
+ for c in range(*self.MT.visible_text_columns):
3390
3387
  self.CH.set_col_width(c)
3391
3388
  elif width == "text" and isinstance(column, int):
3392
- self.CH.set_col_width(col=column, width=None, only_set_if_too_small=only_set_if_too_small)
3389
+ self.CH.set_col_width(col=column, width=None, only_if_too_small=only_set_if_too_small)
3393
3390
  elif isinstance(width, int) and isinstance(column, int):
3394
- self.CH.set_col_width(col=column, width=width, only_set_if_too_small=only_set_if_too_small)
3391
+ self.CH.set_col_width(col=column, width=width, only_if_too_small=only_set_if_too_small)
3395
3392
  elif isinstance(column, int):
3396
3393
  return int(self.MT.col_positions[column + 1] - self.MT.col_positions[column])
3397
3394
  return self.set_refresh_timer(redraw)
@@ -3406,13 +3403,12 @@ class Sheet(tk.Frame):
3406
3403
  if row == "all" and height == "default":
3407
3404
  self.MT.reset_row_positions()
3408
3405
  elif row == "displayed" and height == "text":
3409
- sr, er = self.MT.get_visible_rows(self.MT.canvasy(0), self.MT.canvasy(self.winfo_width()))
3410
- for r in range(sr, er - 1):
3406
+ for r in range(*self.MT.visible_text_rows):
3411
3407
  self.RI.set_row_height(r)
3412
3408
  elif height == "text" and isinstance(row, int):
3413
- self.RI.set_row_height(row=row, height=None, only_set_if_too_small=only_set_if_too_small)
3409
+ self.RI.set_row_height(row=row, height=None, only_if_too_small=only_set_if_too_small)
3414
3410
  elif isinstance(height, int) and isinstance(row, int):
3415
- self.RI.set_row_height(row=row, height=height, only_set_if_too_small=only_set_if_too_small)
3411
+ self.RI.set_row_height(row=row, height=height, only_if_too_small=only_set_if_too_small)
3416
3412
  elif isinstance(row, int):
3417
3413
  return int(self.MT.row_positions[row + 1] - self.MT.row_positions[row])
3418
3414
  return self.set_refresh_timer(redraw)
@@ -3427,9 +3423,33 @@ class Sheet(tk.Frame):
3427
3423
  return self.MT.row_positions
3428
3424
  return self.MT.get_row_heights()
3429
3425
 
3426
+ def get_row_text_height(
3427
+ self,
3428
+ row: int,
3429
+ visible_only: bool = False,
3430
+ only_if_too_small: bool = False,
3431
+ ) -> int:
3432
+ return self.RI.get_row_text_height(
3433
+ row=row,
3434
+ visible_only=visible_only,
3435
+ only_if_too_small=only_if_too_small,
3436
+ )
3437
+
3438
+ def get_column_text_width(
3439
+ self,
3440
+ column: int,
3441
+ visible_only: bool = False,
3442
+ only_if_too_small: bool = False,
3443
+ ) -> int:
3444
+ return self.CH.get_col_text_width(
3445
+ col=column,
3446
+ visible_only=visible_only,
3447
+ only_if_too_small=only_if_too_small,
3448
+ )
3449
+
3430
3450
  def set_column_widths(
3431
3451
  self,
3432
- column_widths: Iterator[int, float] | None = None,
3452
+ column_widths: Iterator[float] | None = None,
3433
3453
  canvas_positions: bool = False,
3434
3454
  reset: bool = False,
3435
3455
  ) -> Sheet:
@@ -3439,12 +3459,12 @@ class Sheet(tk.Frame):
3439
3459
  if canvas_positions and isinstance(column_widths, list):
3440
3460
  self.MT.col_positions = column_widths
3441
3461
  else:
3442
- self.MT.col_positions = list(accumulate(chain([0], (width for width in column_widths))))
3462
+ self.MT.col_positions = list(accumulate(chain([0], column_widths)))
3443
3463
  return self
3444
3464
 
3445
3465
  def set_row_heights(
3446
3466
  self,
3447
- row_heights: Iterator[int, float] | None = None,
3467
+ row_heights: Iterator[float] | None = None,
3448
3468
  canvas_positions: bool = False,
3449
3469
  reset: bool = False,
3450
3470
  ) -> Sheet:
@@ -3454,7 +3474,7 @@ class Sheet(tk.Frame):
3454
3474
  if canvas_positions and isinstance(row_heights, list):
3455
3475
  self.MT.row_positions = row_heights
3456
3476
  else:
3457
- self.MT.row_positions = list(accumulate(chain([0], (height for height in row_heights))))
3477
+ self.MT.row_positions = list(accumulate(chain([0], row_heights)))
3458
3478
  return self
3459
3479
 
3460
3480
  def set_width_of_index_to_text(self, text: None | str = None, *args, **kwargs) -> Sheet:
@@ -3556,10 +3576,10 @@ class Sheet(tk.Frame):
3556
3576
  return len(self.MT.row_positions) - 1, len(self.MT.col_positions) - 1
3557
3577
  if isinstance(total_rows, int):
3558
3578
  height = self.MT.get_default_row_height()
3559
- self.MT.row_positions = list(accumulate(chain([0], (height for row in range(total_rows)))))
3579
+ self.MT.row_positions = list(accumulate(chain([0], repeat(height, total_rows))))
3560
3580
  if isinstance(total_columns, int):
3561
3581
  width = self.ops.default_column_width
3562
- self.MT.col_positions = list(accumulate(chain([0], (width for column in range(total_columns)))))
3582
+ self.MT.col_positions = list(accumulate(chain([0], repeat(width, total_columns))))
3563
3583
  return self
3564
3584
 
3565
3585
  def move_row_position(self, row: int, moveto: int) -> Sheet:
@@ -3573,14 +3593,14 @@ class Sheet(tk.Frame):
3573
3593
  def get_example_canvas_column_widths(self, total_cols: int | None = None) -> list[float]:
3574
3594
  colpos = int(self.ops.default_column_width)
3575
3595
  if isinstance(total_cols, int):
3576
- return list(accumulate(chain([0], (colpos for c in range(total_cols)))))
3577
- return list(accumulate(chain([0], (colpos for c in range(len(self.MT.col_positions) - 1)))))
3596
+ return list(accumulate(chain([0], repeat(colpos, total_cols))))
3597
+ return list(accumulate(chain([0], repeat(colpos, len(self.MT.col_positions) - 1))))
3578
3598
 
3579
3599
  def get_example_canvas_row_heights(self, total_rows: int | None = None) -> list[float]:
3580
3600
  rowpos = self.MT.get_default_row_height()
3581
3601
  if isinstance(total_rows, int):
3582
- return list(accumulate(chain([0], (rowpos for c in range(total_rows)))))
3583
- return list(accumulate(chain([0], (rowpos for c in range(len(self.MT.row_positions) - 1)))))
3602
+ return list(accumulate(chain([0], repeat(rowpos, total_rows))))
3603
+ return list(accumulate(chain([0], repeat(rowpos, len(self.MT.row_positions) - 1))))
3584
3604
 
3585
3605
  def verify_row_heights(self, row_heights: list[float], canvas_positions: bool = False) -> bool:
3586
3606
  if not isinstance(row_heights, list):
@@ -3590,7 +3610,7 @@ class Sheet(tk.Frame):
3590
3610
  return False
3591
3611
  return not any(
3592
3612
  x - z < self.MT.min_row_height or not isinstance(x, int) or isinstance(x, bool)
3593
- for z, x in zip(islice(row_heights, 0, None), islice(row_heights, 1, None))
3613
+ for z, x in zip(row_heights, islice(row_heights, 1, None))
3594
3614
  )
3595
3615
  return not any(z < self.MT.min_row_height or not isinstance(z, int) or isinstance(z, bool) for z in row_heights)
3596
3616
 
@@ -3602,7 +3622,7 @@ class Sheet(tk.Frame):
3602
3622
  return False
3603
3623
  return not any(
3604
3624
  x - z < self.MT.min_column_width or not isinstance(x, int) or isinstance(x, bool)
3605
- for z, x in zip(islice(column_widths, 0, None), islice(column_widths, 1, None))
3625
+ for z, x in zip(column_widths, islice(column_widths, 1, None))
3606
3626
  )
3607
3627
  return not any(
3608
3628
  z < self.MT.min_column_width or not isinstance(z, int) or isinstance(z, bool) for z in column_widths
@@ -3622,6 +3642,20 @@ class Sheet(tk.Frame):
3622
3642
  return self.MT.max_column_width
3623
3643
  return width
3624
3644
 
3645
+ @property
3646
+ def visible_rows(self) -> tuple[int, int]:
3647
+ """
3648
+ returns: tuple[visible start row int, visible end row int]
3649
+ """
3650
+ return self.MT.visible_text_rows
3651
+
3652
+ @property
3653
+ def visible_columns(self) -> tuple[int, int]:
3654
+ """
3655
+ returns: tuple[visible start column int, visible end column int]
3656
+ """
3657
+ return self.MT.visible_text_columns
3658
+
3625
3659
  # Identifying Bound Event Mouse Position
3626
3660
 
3627
3661
  def identify_region(self, event: object) -> Literal["table", "index", "header", "top left"]:
@@ -4258,6 +4292,9 @@ class Sheet(tk.Frame):
4258
4292
  if any(k in kwargs for k in scrollbar_options_keys):
4259
4293
  self.set_scrollbar_options()
4260
4294
  self.MT.create_rc_menus()
4295
+ if "treeview" in kwargs:
4296
+ self.set_options(auto_resize_row_index=True, redraw=False)
4297
+ self.index_align("w", redraw=False)
4261
4298
  return self.set_refresh_timer(redraw)
4262
4299
 
4263
4300
  def set_scrollbar_options(self) -> Sheet:
@@ -4760,9 +4797,11 @@ class Sheet(tk.Frame):
4760
4797
  idx += sum(1 for _ in self.RI.get_iid_descendants(cid)) + 1
4761
4798
  else:
4762
4799
  idx = len(self.MT._row_index)
4800
+ if values is None:
4801
+ values = []
4763
4802
  self.insert_rows(
4764
4803
  idx=idx,
4765
- rows=[[self.RI.tree[iid]] + [] if values is None else values],
4804
+ rows=[[self.RI.tree[iid]] + values],
4766
4805
  row_index=True,
4767
4806
  create_selections=create_selections,
4768
4807
  fill=False,
@@ -140,7 +140,7 @@ class TopLeftRectangle(tk.Canvas):
140
140
  fill=self.PAR.ops.top_left_fg,
141
141
  )
142
142
 
143
- def basic_bindings(self, enable=True) -> None:
143
+ def basic_bindings(self, enable: bool = True) -> None:
144
144
  if enable:
145
145
  self.bind("<Motion>", self.mouse_motion)
146
146
  self.bind("<ButtonPress-1>", self.b1_press)
@@ -156,7 +156,12 @@ class TopLeftRectangle(tk.Canvas):
156
156
  self.unbind("<Double-Button-1>")
157
157
  self.unbind(rc_binding)
158
158
 
159
- def set_dimensions(self, new_w=None, new_h=None, recreate_selection_boxes: bool = True) -> None:
159
+ def set_dimensions(
160
+ self,
161
+ new_w: None | int = None,
162
+ new_h: None | int = None,
163
+ recreate_selection_boxes: bool = True,
164
+ ) -> None:
160
165
  try:
161
166
  if new_h is None:
162
167
  h = self.winfo_height()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tksheet
3
- Version: 7.2.1
3
+ Version: 7.2.3
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
@@ -40,14 +40,16 @@ Requires-Python: >=3.8
40
40
  Description-Content-Type: text/markdown
41
41
  License-File: LICENSE.txt
42
42
 
43
- # tksheet
43
+ <p align="center" width="100%">
44
+ <img width="33%" src="https://github.com/ragardner/tksheet/assets/26602401/4124c3ce-cf62-4925-9158-c5bdf712765b">
45
+ </p>
46
+
47
+ # <div align="center">tksheet - python tkinter table widget</div>
44
48
 
45
49
  [![PyPI version shields.io](https://img.shields.io/pypi/v/tksheet.svg)](https://pypi.python.org/pypi/tksheet/) ![python](https://img.shields.io/badge/python-3.8|3.9|3.10|3.11|3.12-blue) [![License: MIT](https://img.shields.io/badge/License-MIT%20-blue.svg)](https://github.com/ragardner/tksheet/blob/master/LICENSE.txt)
46
50
 
47
51
  [![GitHub Release Date](https://img.shields.io/github/release-date-pre/ragardner/tksheet.svg)](https://github.com/ragardner/tksheet/releases) [![Downloads](https://img.shields.io/pypi/dm/tksheet.svg)](https://pypi.org/project/tksheet/)
48
52
 
49
- ### **A python tkinter table widget**
50
-
51
53
  | **Help** | |
52
54
  |-------------------|------------------------------------------------------------------|
53
55
  | Versions 6.x.x -> | [Documentation Wiki](https://github.com/ragardner/tksheet/wiki/Version-6) | |
@@ -0,0 +1,20 @@
1
+ tksheet/__init__.py,sha256=ExwA5frHCiXaPMRIH-EKonUH_RKCgMI6IpAps9dtesE,2124
2
+ tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
3
+ tksheet/column_headers.py,sha256=zArcBsPeob8xUvM0cYB4RjwcKMfLLkHiz7oUtDFBAeg,102039
4
+ tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
5
+ tksheet/functions.py,sha256=rNfDpQRoXZm_Ro-tlF92ox3fi37p71Mio1PGTreM_oc,40835
6
+ tksheet/main_table.py,sha256=CudkuoJ8NSlCwTZjQCxQHRNdBTYdjSyo3CqnIZSmynI,325631
7
+ tksheet/other_classes.py,sha256=P3FYUYreLhstATvHCNow8sDQoCsD_02KB6oXcca3ahE,13628
8
+ tksheet/row_index.py,sha256=aBNZIKMBnbIHdCSsmKdLgZSQ8ESDyAXwFxlSRVR1RO8,108213
9
+ tksheet/sheet.py,sha256=q8MSMTCLHaud-Hddh2vMflWbl785SuiwlZ6H2tam1cw,268536
10
+ tksheet/sheet_options.py,sha256=Azo7_-H0e0ssYEoU7Mq_OWy3S-U05rp4_6Q2E2Ffuu8,12262
11
+ tksheet/text_editor.py,sha256=aRm1Y5GfORiEAJthtN1uQ30CT3VoF8mRWvR-SIXPrJU,6548
12
+ tksheet/themes.py,sha256=N9nAj6vcWk4UdcrAakvz2LPbJEJWXdv3j7Om6AnvX5k,14474
13
+ tksheet/top_left_rectangle.py,sha256=o-M6i5NjaJwo60tV-BDP9SbaT1CzQNoPjuoC7p-nb5Q,8436
14
+ tksheet/types.py,sha256=IgoEHMbceKpakcZtanxKaKJ4RdCq7UW6EoEIIz5O59k,340
15
+ tksheet/vars.py,sha256=86ubZZElsnQuC6Lv6bW2lt2NhD9wAp6PxtkK7ufKqq0,3452
16
+ tksheet-7.2.3.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
17
+ tksheet-7.2.3.dist-info/METADATA,sha256=Phxh9tGDvtVNUVESqLiCDYnot995x8l2rhmkJYbOEK4,6319
18
+ tksheet-7.2.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
19
+ tksheet-7.2.3.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
20
+ tksheet-7.2.3.dist-info/RECORD,,
@@ -1,20 +0,0 @@
1
- tksheet/__init__.py,sha256=C4NK-mpjy4W3wFrleFiFx5nw7mP49S9vKhQWk28NY8g,2124
2
- tksheet/colors.py,sha256=1k06VorynLmnC4FdJg8H4reIA6rXaeXBpdMwXLhN8oc,51594
3
- tksheet/column_headers.py,sha256=HsNnDswX_k1vDGfCWKV0-C5fnjOsZHUfDc72YyelwHM,101151
4
- tksheet/formatters.py,sha256=DXif00aq9DgFpXwkbiqD86KxtDg0Meop51hLY-KcGNQ,10037
5
- tksheet/functions.py,sha256=rNfDpQRoXZm_Ro-tlF92ox3fi37p71Mio1PGTreM_oc,40835
6
- tksheet/main_table.py,sha256=w6SMPHkNQ4-J6Y6kgCSvqH7-XashI1_WU28g9trhObw,324259
7
- tksheet/other_classes.py,sha256=P3FYUYreLhstATvHCNow8sDQoCsD_02KB6oXcca3ahE,13628
8
- tksheet/row_index.py,sha256=loLYW_fbGrKIeZ1d8l7jA6gUaUI7158Zx3s5a65G3Os,107384
9
- tksheet/sheet.py,sha256=ek0_QLi52G5lLh8jYnCdEThRxbxxvaGOKa1gGlA4eSk,267749
10
- tksheet/sheet_options.py,sha256=Azo7_-H0e0ssYEoU7Mq_OWy3S-U05rp4_6Q2E2Ffuu8,12262
11
- tksheet/text_editor.py,sha256=aRm1Y5GfORiEAJthtN1uQ30CT3VoF8mRWvR-SIXPrJU,6548
12
- tksheet/themes.py,sha256=N9nAj6vcWk4UdcrAakvz2LPbJEJWXdv3j7Om6AnvX5k,14474
13
- tksheet/top_left_rectangle.py,sha256=JDByauKiEBPoJfLWcZsU26XTqMLVtrGsI0wFLT9Yv2w,8356
14
- tksheet/types.py,sha256=IgoEHMbceKpakcZtanxKaKJ4RdCq7UW6EoEIIz5O59k,340
15
- tksheet/vars.py,sha256=86ubZZElsnQuC6Lv6bW2lt2NhD9wAp6PxtkK7ufKqq0,3452
16
- tksheet-7.2.1.dist-info/LICENSE.txt,sha256=ndbcCPe9SlHfweE_W2RAueWUe2k7yudyxYLq6WjFdn4,1101
17
- tksheet-7.2.1.dist-info/METADATA,sha256=7Dw-DR96upy8SdhsTKb7NKbZK3jMmtOpPTr_AaIxyQ8,6145
18
- tksheet-7.2.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
19
- tksheet-7.2.1.dist-info/top_level.txt,sha256=my61PXCcck_HHAc9cq3NAlyAr3A3FXxCy9gptEOaCN8,8
20
- tksheet-7.2.1.dist-info/RECORD,,