tksheet 7.2.6__tar.gz → 7.2.8__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.6/tksheet.egg-info → tksheet-7.2.8}/PKG-INFO +1 -1
  2. {tksheet-7.2.6 → tksheet-7.2.8}/pyproject.toml +1 -1
  3. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/__init__.py +1 -1
  4. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/column_headers.py +24 -22
  5. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/main_table.py +51 -55
  6. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/row_index.py +45 -35
  7. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/themes.py +8 -8
  8. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/top_left_rectangle.py +1 -0
  9. {tksheet-7.2.6 → tksheet-7.2.8/tksheet.egg-info}/PKG-INFO +1 -1
  10. {tksheet-7.2.6 → tksheet-7.2.8}/LICENSE.txt +0 -0
  11. {tksheet-7.2.6 → tksheet-7.2.8}/README.md +0 -0
  12. {tksheet-7.2.6 → tksheet-7.2.8}/setup.cfg +0 -0
  13. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/colors.py +0 -0
  14. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/formatters.py +0 -0
  15. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/functions.py +0 -0
  16. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/other_classes.py +0 -0
  17. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/sheet.py +0 -0
  18. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/sheet_options.py +0 -0
  19. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/text_editor.py +0 -0
  20. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/types.py +0 -0
  21. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet/vars.py +0 -0
  22. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet.egg-info/SOURCES.txt +0 -0
  23. {tksheet-7.2.6 → tksheet-7.2.8}/tksheet.egg-info/dependency_links.txt +0 -0
  24. {tksheet-7.2.6 → tksheet-7.2.8}/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.6
3
+ Version: 7.2.8
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.6"
9
+ version = "7.2.8"
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.6"
7
+ __version__ = "7.2.8"
8
8
 
9
9
  from .colors import (
10
10
  color_map,
@@ -946,8 +946,10 @@ class ColumnHeaders(tk.Canvas):
946
946
  run_binding_func: bool = True,
947
947
  ext: bool = False,
948
948
  ) -> int:
949
- self.MT.deselect("all", redraw=False)
949
+ boxes_to_hide = tuple(iid for iid in self.MT.selection_boxes)
950
950
  fill_iid = self.MT.create_selection_box(0, c, len(self.MT.row_positions) - 1, c + 1, "columns", ext=ext)
951
+ for iid in boxes_to_hide:
952
+ self.MT.hide_selection_box(iid)
951
953
  if redraw:
952
954
  self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
953
955
  if run_binding_func:
@@ -1301,35 +1303,35 @@ class ColumnHeaders(tk.Canvas):
1301
1303
  tag: str | tuple[str],
1302
1304
  draw_outline: bool = True,
1303
1305
  draw_arrow: bool = True,
1304
- dd_is_open: bool = False,
1306
+ open_: bool = False,
1305
1307
  ) -> None:
1306
1308
  if draw_outline and self.PAR.ops.show_dropdown_borders:
1307
1309
  self.redraw_highlight(x1 + 1, y1 + 1, x2, y2, fill="", outline=self.PAR.ops.header_fg, tag=tag)
1308
1310
  if draw_arrow:
1309
1311
  mod = (self.MT.header_txt_height - 1) if self.MT.header_txt_height % 2 else self.MT.header_txt_height
1310
- half_mod = mod / 2
1311
- qtr_mod = mod / 4
1312
- mid_y = (
1313
- (self.MT.header_first_ln_ins - 1) if self.MT.header_first_ln_ins % 2 else self.MT.header_first_ln_ins
1314
- )
1315
- if dd_is_open:
1312
+ small_mod = int(mod / 5)
1313
+ mid_y = floor(self.MT.min_header_height / 2)
1314
+ if open_:
1315
+ # up arrow
1316
1316
  points = (
1317
- x2 - 3 - mod,
1318
- y1 + mid_y + qtr_mod,
1319
- x2 - 3 - half_mod,
1320
- y1 + mid_y - qtr_mod,
1317
+ x2 - 3 - small_mod - small_mod - small_mod - small_mod,
1318
+ y1 + mid_y + small_mod,
1319
+ x2 - 3 - small_mod - small_mod,
1320
+ y1 + mid_y - small_mod,
1321
1321
  x2 - 3,
1322
- y1 + mid_y + qtr_mod,
1322
+ y1 + mid_y + small_mod,
1323
1323
  )
1324
1324
  else:
1325
+ # down arrow
1325
1326
  points = (
1326
- x2 - 3 - mod,
1327
- y1 + mid_y - qtr_mod,
1328
- x2 - 3 - half_mod,
1329
- y1 + mid_y + qtr_mod,
1327
+ x2 - 3 - small_mod - small_mod - small_mod - small_mod,
1328
+ y1 + mid_y - small_mod,
1329
+ x2 - 3 - small_mod - small_mod,
1330
+ y1 + mid_y + small_mod,
1330
1331
  x2 - 3,
1331
- y1 + mid_y - qtr_mod,
1332
+ y1 + mid_y - small_mod,
1332
1333
  )
1334
+
1333
1335
  if self.hidd_dropdown:
1334
1336
  t, sh = self.hidd_dropdown.popitem()
1335
1337
  self.coords(t, points)
@@ -1502,7 +1504,7 @@ class ColumnHeaders(tk.Canvas):
1502
1504
  tag="dd",
1503
1505
  draw_outline=not dd_drawn,
1504
1506
  draw_arrow=mw >= 5,
1505
- dd_is_open=dd_coords == c,
1507
+ open_=dd_coords == c,
1506
1508
  )
1507
1509
  else:
1508
1510
  mw = crightgridln - cleftgridln - 1
@@ -1521,7 +1523,7 @@ class ColumnHeaders(tk.Canvas):
1521
1523
  tag="dd",
1522
1524
  draw_outline=not dd_drawn,
1523
1525
  draw_arrow=mw >= 5,
1524
- dd_is_open=dd_coords == c,
1526
+ open_=dd_coords == c,
1525
1527
  )
1526
1528
  else:
1527
1529
  mw = crightgridln - cleftgridln - 1
@@ -1541,7 +1543,7 @@ class ColumnHeaders(tk.Canvas):
1541
1543
  tag="dd",
1542
1544
  draw_outline=not dd_drawn,
1543
1545
  draw_arrow=mw >= 5,
1544
- dd_is_open=dd_coords == c,
1546
+ open_=dd_coords == c,
1545
1547
  )
1546
1548
  else:
1547
1549
  mw = crightgridln - cleftgridln - 1
@@ -2022,7 +2024,7 @@ class ColumnHeaders(tk.Canvas):
2022
2024
  "height": win_h,
2023
2025
  "font": self.PAR.ops.header_font,
2024
2026
  "ops": self.PAR.ops,
2025
- "outline_color": self.PAR.ops.popup_menu_fg,
2027
+ "outline_color": self.PAR.ops.header_selected_columns_bg,
2026
2028
  "align": self.get_cell_align(c),
2027
2029
  "values": kwargs["values"],
2028
2030
  }
@@ -1000,25 +1000,21 @@ class MainTable(tk.Canvas):
1000
1000
  else:
1001
1001
  disp_new_idxs = {}
1002
1002
  # at_least_cols should not be len in this case as move_to can be len
1003
+ fix_len = (move_to - 1) if move_to else move_to
1003
1004
  if not self.all_columns_displayed and not data_indexes:
1004
- totalcols = self.equalize_data_row_lengths(at_least_cols=self.datacn(move_to))
1005
- else:
1006
- totalcols = self.equalize_data_row_lengths(at_least_cols=move_to)
1005
+ fix_len = self.datacn(fix_len)
1006
+ totalcols = self.equalize_data_row_lengths(at_least_cols=fix_len)
1007
1007
  data_new_idxs = get_new_indexes(move_to=move_to, to_move=to_move)
1008
1008
  if not self.all_columns_displayed and not data_indexes:
1009
- moved = {self.displayed_columns[i] for i in to_move}
1010
1009
  data_new_idxs = dict(
1011
- filter(
1012
- lambda tup: tup[0] in moved,
1013
- zip(
1014
- move_elements_by_mapping(
1015
- self.displayed_columns,
1016
- data_new_idxs,
1017
- dict(zip(data_new_idxs.values(), data_new_idxs)),
1018
- ),
1010
+ zip(
1011
+ move_elements_by_mapping(
1019
1012
  self.displayed_columns,
1013
+ data_new_idxs,
1014
+ dict(zip(data_new_idxs.values(), data_new_idxs)),
1020
1015
  ),
1021
- )
1016
+ self.displayed_columns,
1017
+ ),
1022
1018
  )
1023
1019
  return data_new_idxs, dict(zip(data_new_idxs.values(), data_new_idxs)), totalcols, disp_new_idxs
1024
1020
 
@@ -1108,6 +1104,7 @@ class MainTable(tk.Canvas):
1108
1104
  tags: {full_new_idxs[k] for k in tagged} for tags, tagged in self.tagged_columns.items()
1109
1105
  }
1110
1106
  self.CH.cell_options = {full_new_idxs[k]: v for k, v in self.CH.cell_options.items()}
1107
+ self.displayed_columns = sorted(full_new_idxs[k] for k in self.displayed_columns)
1111
1108
  if self.named_spans:
1112
1109
  totalrows = self.total_data_rows()
1113
1110
  new_ops = self.PAR.create_options_from_span
@@ -1206,8 +1203,6 @@ class MainTable(tk.Canvas):
1206
1203
  del self.cell_options[(r, full_new_idxs[k])][span["type_"]]
1207
1204
  # finally, change the span coords
1208
1205
  span["from_c"], span["upto_c"] = newfrom, newupto
1209
- if data_indexes:
1210
- self.displayed_columns = sorted(full_new_idxs[k] for k in self.displayed_columns)
1211
1206
  return data_new_idxs, disp_new_idxs, event_data
1212
1207
 
1213
1208
  def get_max_column_idx(self, maxidx: int | None = None) -> int:
@@ -1222,6 +1217,7 @@ class MainTable(tk.Canvas):
1222
1217
  max(map(max, self.tagged_columns.values()), default=maxidx),
1223
1218
  max((d.from_c for d in self.named_spans.values() if isinstance(d.from_c, int)), default=maxidx),
1224
1219
  max((d.upto_c for d in self.named_spans.values() if isinstance(d.upto_c, int)), default=maxidx),
1220
+ self.displayed_columns[-1] if self.displayed_columns else maxidx,
1225
1221
  )
1226
1222
 
1227
1223
  def get_args_for_move_rows(
@@ -1235,27 +1231,22 @@ class MainTable(tk.Canvas):
1235
1231
  else:
1236
1232
  disp_new_idxs = {}
1237
1233
  # move_to can be len and fix_data_len() takes index so - 1
1234
+ fix_len = (move_to - 1) if move_to else move_to
1238
1235
  if not self.all_rows_displayed and not data_indexes:
1239
- fix_len = self.datarn(move_to) - 1
1240
- else:
1241
- fix_len = move_to - 1
1236
+ fix_len = self.datarn(fix_len)
1242
1237
  self.fix_data_len(fix_len)
1243
1238
  totalrows = max(self.total_data_rows(), len(self.row_positions) - 1)
1244
1239
  data_new_idxs = get_new_indexes(move_to=move_to, to_move=to_move)
1245
1240
  if not self.all_rows_displayed and not data_indexes:
1246
- moved = {self.displayed_rows[i] for i in to_move}
1247
1241
  data_new_idxs = dict(
1248
- filter(
1249
- lambda tup: tup[0] in moved,
1250
- zip(
1251
- move_elements_by_mapping(
1252
- self.displayed_rows,
1253
- data_new_idxs,
1254
- dict(zip(data_new_idxs.values(), data_new_idxs)),
1255
- ),
1242
+ zip(
1243
+ move_elements_by_mapping(
1256
1244
  self.displayed_rows,
1245
+ data_new_idxs,
1246
+ dict(zip(data_new_idxs.values(), data_new_idxs)),
1257
1247
  ),
1258
- )
1248
+ self.displayed_rows,
1249
+ ),
1259
1250
  )
1260
1251
  return data_new_idxs, dict(zip(data_new_idxs.values(), data_new_idxs)), totalrows, disp_new_idxs
1261
1252
 
@@ -1343,6 +1334,7 @@ class MainTable(tk.Canvas):
1343
1334
  self.row_options = {full_new_idxs[k]: v for k, v in self.row_options.items()}
1344
1335
  self.RI.cell_options = {full_new_idxs[k]: v for k, v in self.RI.cell_options.items()}
1345
1336
  self.RI.tree_rns = {v: full_new_idxs[k] for v, k in self.RI.tree_rns.items()}
1337
+ self.displayed_rows = sorted(full_new_idxs[k] for k in self.displayed_rows)
1346
1338
  if self.named_spans:
1347
1339
  totalcols = self.total_data_cols()
1348
1340
  new_ops = self.PAR.create_options_from_span
@@ -1441,8 +1433,6 @@ class MainTable(tk.Canvas):
1441
1433
  del self.cell_options[(full_new_idxs[k], c)][span["type_"]]
1442
1434
  # finally, change the span coords
1443
1435
  span["from_r"], span["upto_r"] = newfrom, newupto
1444
- if data_indexes:
1445
- self.displayed_rows = sorted(full_new_idxs[k] for k in self.displayed_rows)
1446
1436
  return data_new_idxs, disp_new_idxs, event_data
1447
1437
 
1448
1438
  def get_max_row_idx(self, maxidx: int | None = None) -> int:
@@ -1457,6 +1447,7 @@ class MainTable(tk.Canvas):
1457
1447
  max(map(max, self.tagged_rows.values()), default=maxidx),
1458
1448
  max((d.from_r for d in self.named_spans.values() if isinstance(d.from_r, int)), default=maxidx),
1459
1449
  max((d.upto_r for d in self.named_spans.values() if isinstance(d.upto_r, int)), default=maxidx),
1450
+ self.displayed_rows[-1] if self.displayed_rows else maxidx,
1460
1451
  )
1461
1452
 
1462
1453
  def get_full_new_idxs(
@@ -3319,7 +3310,7 @@ class MainTable(tk.Canvas):
3319
3310
  self.yview_scroll(-1, "units")
3320
3311
  self.RI.yview_scroll(-1, "units")
3321
3312
  self.y_move_synced_scrolls("moveto", self.yview()[0])
3322
- self.main_table_redraw_grid_and_text(redraw_row_index=True)
3313
+ self.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
3323
3314
 
3324
3315
  def shift_mousewheel(self, event: object) -> None:
3325
3316
  if event.delta < 0 or event.num == 5:
@@ -3332,7 +3323,7 @@ class MainTable(tk.Canvas):
3332
3323
  self.xview_scroll(-1, "units")
3333
3324
  self.CH.xview_scroll(-1, "units")
3334
3325
  self.x_move_synced_scrolls("moveto", self.xview()[0])
3335
- self.main_table_redraw_grid_and_text(redraw_header=True)
3326
+ self.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
3336
3327
 
3337
3328
  def ctrl_mousewheel(self, event):
3338
3329
  if event.delta < 0 or event.num == 5:
@@ -3697,7 +3688,11 @@ class MainTable(tk.Canvas):
3697
3688
  else:
3698
3689
  return False
3699
3690
 
3700
- def set_all_cell_sizes_to_text(self, width: int | None = None, slim: bool = False) -> tuple[list[float], list[float]]:
3691
+ def set_all_cell_sizes_to_text(
3692
+ self,
3693
+ width: int | None = None,
3694
+ slim: bool = False,
3695
+ ) -> tuple[list[float], list[float]]:
3701
3696
  min_column_width = int(self.min_column_width)
3702
3697
  min_rh = int(self.min_row_height)
3703
3698
  h = min_rh
@@ -5239,32 +5234,33 @@ class MainTable(tk.Canvas):
5239
5234
  tag,
5240
5235
  draw_outline=True,
5241
5236
  draw_arrow=True,
5242
- dd_is_open=False,
5237
+ open_=False,
5243
5238
  ):
5244
5239
  if draw_outline and self.PAR.ops.show_dropdown_borders:
5245
5240
  self.redraw_highlight(x1 + 1, y1 + 1, x2, y2, fill="", outline=self.PAR.ops.table_fg, tag=tag)
5246
5241
  if draw_arrow:
5247
5242
  mod = (self.table_txt_height - 1) if self.table_txt_height % 2 else self.table_txt_height
5248
- half_mod = mod / 2
5249
- qtr_mod = mod / 4
5250
- mid_y = (self.table_first_ln_ins - 1) if self.table_first_ln_ins % 2 else self.table_first_ln_ins
5251
- if dd_is_open:
5243
+ small_mod = int(mod / 5)
5244
+ mid_y = floor(self.min_row_height / 2)
5245
+ if open_:
5246
+ # up arrow
5252
5247
  points = (
5253
- x2 - 3 - mod,
5254
- y1 + mid_y + qtr_mod,
5255
- x2 - 3 - half_mod,
5256
- y1 + mid_y - qtr_mod,
5248
+ x2 - 3 - small_mod - small_mod - small_mod - small_mod,
5249
+ y1 + mid_y + small_mod,
5250
+ x2 - 3 - small_mod - small_mod,
5251
+ y1 + mid_y - small_mod,
5257
5252
  x2 - 3,
5258
- y1 + mid_y + qtr_mod,
5253
+ y1 + mid_y + small_mod,
5259
5254
  )
5260
5255
  else:
5256
+ # down arrow
5261
5257
  points = (
5262
- x2 - 3 - mod,
5263
- y1 + mid_y - qtr_mod,
5264
- x2 - 3 - half_mod,
5265
- y1 + mid_y + qtr_mod,
5258
+ x2 - 3 - small_mod - small_mod - small_mod - small_mod,
5259
+ y1 + mid_y - small_mod,
5260
+ x2 - 3 - small_mod - small_mod,
5261
+ y1 + mid_y + small_mod,
5266
5262
  x2 - 3,
5267
- y1 + mid_y - qtr_mod,
5263
+ y1 + mid_y - small_mod,
5268
5264
  )
5269
5265
  if self.hidd_dropdown:
5270
5266
  t, sh = self.hidd_dropdown.popitem()
@@ -5609,7 +5605,7 @@ class MainTable(tk.Canvas):
5609
5605
  tag=f"dd_{r}_{c}",
5610
5606
  draw_outline=not dd_drawn,
5611
5607
  draw_arrow=mw >= 5,
5612
- dd_is_open=dd_coords == (r, c),
5608
+ open_=dd_coords == (r, c),
5613
5609
  )
5614
5610
  else:
5615
5611
  mw = crightgridln - cleftgridln - 1
@@ -5627,7 +5623,7 @@ class MainTable(tk.Canvas):
5627
5623
  tag=f"dd_{r}_{c}",
5628
5624
  draw_outline=not dd_drawn,
5629
5625
  draw_arrow=mw >= 5,
5630
- dd_is_open=dd_coords == (r, c),
5626
+ open_=dd_coords == (r, c),
5631
5627
  )
5632
5628
  else:
5633
5629
  mw = crightgridln - cleftgridln - 1
@@ -5646,7 +5642,7 @@ class MainTable(tk.Canvas):
5646
5642
  tag=f"dd_{r}_{c}",
5647
5643
  draw_outline=not dd_drawn,
5648
5644
  draw_arrow=mw >= 5,
5649
- dd_is_open=dd_coords == (r, c),
5645
+ open_=dd_coords == (r, c),
5650
5646
  )
5651
5647
  else:
5652
5648
  mw = crightgridln - cleftgridln - 1
@@ -6049,7 +6045,7 @@ class MainTable(tk.Canvas):
6049
6045
  mt_border_col = self.PAR.ops.table_selected_columns_border_fg
6050
6046
  if self.selection_boxes:
6051
6047
  self.itemconfig(next(reversed(self.selection_boxes)), state="normal")
6052
- x1, y1, x2, y2 = self.box_sheet_coords_x_canvas_coords(r1, c1, r2, c2, type_)
6048
+ x1, y1, x2, y2 = self.box_coords_x_canvas_coords(r1, c1, r2, c2, type_)
6053
6049
  fill_iid = self.display_box(
6054
6050
  x1,
6055
6051
  y1,
@@ -6062,7 +6058,7 @@ class MainTable(tk.Canvas):
6062
6058
  width=1,
6063
6059
  )
6064
6060
  index_iid = self.RI.display_box(
6065
- 1,
6061
+ 0,
6066
6062
  y1,
6067
6063
  self.RI.current_width - 1,
6068
6064
  y2,
@@ -6136,7 +6132,7 @@ class MainTable(tk.Canvas):
6136
6132
  if self.PAR.ops.show_selected_cells_border:
6137
6133
  self.tag_raise(self.selected.iid)
6138
6134
 
6139
- def box_sheet_coords_x_canvas_coords(
6135
+ def box_coords_x_canvas_coords(
6140
6136
  self,
6141
6137
  r1: int,
6142
6138
  c1: int,
@@ -6183,7 +6179,7 @@ class MainTable(tk.Canvas):
6183
6179
  state = "normal"
6184
6180
  if self.selected.fill_iid == fill_iid:
6185
6181
  self.selected = self.selected._replace(box=Box_nt(r1, c1, r2, c2))
6186
- x1, y1, x2, y2 = self.box_sheet_coords_x_canvas_coords(r1, c1, r2, c2, type_)
6182
+ x1, y1, x2, y2 = self.box_coords_x_canvas_coords(r1, c1, r2, c2, type_)
6187
6183
  self.display_box(x1, y1, x2, y2, fill=mt_bg, outline="", state=state, tags=type_, width=1, iid=fill_iid)
6188
6184
  self.RI.display_box(
6189
6185
  1,
@@ -893,7 +893,7 @@ class RowIndex(tk.Canvas):
893
893
  self.open_cell(event)
894
894
  elif (iid := self.event_over_tree_arrow(r, canvasy, event.x)) is not None:
895
895
  if self.MT.selection_boxes:
896
- self.select_row(r, redraw=False)
896
+ self.select_row(r, ext=True, redraw=False)
897
897
  self.PAR.item(iid, open_=iid not in self.tree_open_ids)
898
898
  else:
899
899
  self.mouseclick_outside_editor_or_dropdown_all_canvases(inside=True)
@@ -957,9 +957,10 @@ class RowIndex(tk.Canvas):
957
957
  run_binding_func: bool = True,
958
958
  ext: bool = False,
959
959
  ) -> int:
960
- self.MT.deselect("all", redraw=False)
961
- box = (r, 0, r + 1, len(self.MT.col_positions) - 1, "rows")
962
- fill_iid = self.MT.create_selection_box(*box, ext=ext)
960
+ boxes_to_hide = tuple(iid for iid in self.MT.selection_boxes)
961
+ fill_iid = self.MT.create_selection_box(r, 0, r + 1, len(self.MT.col_positions) - 1, "rows", ext=ext)
962
+ for iid in boxes_to_hide:
963
+ self.MT.hide_selection_box(iid)
963
964
  if redraw:
964
965
  self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
965
966
  if run_binding_func:
@@ -1344,29 +1345,37 @@ class RowIndex(tk.Canvas):
1344
1345
  open_: bool = False,
1345
1346
  ) -> None:
1346
1347
  mod = (self.MT.index_txt_height - 1) if self.MT.index_txt_height % 2 else self.MT.index_txt_height
1347
- half_mod = mod / 2
1348
- qtr_mod = mod / 4
1349
- small_mod = int(half_mod / 4) - 1
1350
- mid_y = int(self.MT.min_row_height / 2)
1348
+ small_mod = int(mod / 5)
1349
+ mid_y = floor(self.MT.min_row_height / 2)
1351
1350
  # up arrow
1352
1351
  if open_:
1353
1352
  points = (
1354
- x1 + 2 + indent,
1355
- y1 + mid_y + qtr_mod,
1356
- x1 + 2 + half_mod + indent,
1357
- y1 + mid_y - qtr_mod,
1358
- x1 + 2 + mod + indent,
1359
- y1 + mid_y + qtr_mod,
1353
+ # the left hand downward point
1354
+ x1 + 5 + indent,
1355
+ y1 + mid_y + small_mod,
1356
+
1357
+ # the middle upward point
1358
+ x1 + 5 + indent + small_mod + small_mod,
1359
+ y1 + mid_y - small_mod,
1360
+
1361
+ # the right hand downward point
1362
+ x1 + 5 + indent + small_mod + small_mod + small_mod + small_mod,
1363
+ y1 + mid_y + small_mod,
1360
1364
  )
1361
1365
  # right pointing arrow
1362
1366
  else:
1363
1367
  points = (
1364
- x1 + half_mod + indent,
1365
- y1 + mid_y - half_mod + small_mod,
1366
- x1 + mod + indent - small_mod,
1368
+ # the upper point
1369
+ x1 + 5 + indent + small_mod + small_mod,
1370
+ y1 + mid_y - small_mod - small_mod,
1371
+
1372
+ # the middle point
1373
+ x1 + 5 + indent + small_mod + small_mod + small_mod + small_mod,
1367
1374
  y1 + mid_y,
1368
- x1 + half_mod + indent,
1369
- y1 + mid_y + half_mod - small_mod,
1375
+
1376
+ # the bottom point
1377
+ x1 + 5 + indent + small_mod + small_mod,
1378
+ y1 + mid_y + small_mod + small_mod,
1370
1379
  )
1371
1380
  if self.hidd_tree_arrow:
1372
1381
  t, sh = self.hidd_tree_arrow.popitem()
@@ -1404,26 +1413,27 @@ class RowIndex(tk.Canvas):
1404
1413
  self.redraw_highlight(x1 + 1, y1 + 1, x2, y2, fill="", outline=self.PAR.ops.index_fg, tag=tag)
1405
1414
  if draw_arrow:
1406
1415
  mod = (self.MT.index_txt_height - 1) if self.MT.index_txt_height % 2 else self.MT.index_txt_height
1407
- half_mod = mod / 2
1408
- qtr_mod = mod / 4
1409
- mid_y = (self.MT.index_first_ln_ins - 1) if self.MT.index_first_ln_ins % 2 else self.MT.index_first_ln_ins
1416
+ small_mod = int(mod / 5)
1417
+ mid_y = floor(self.MT.min_row_height / 2)
1410
1418
  if open_:
1419
+ # up arrow
1411
1420
  points = (
1412
- x2 - 3 - mod,
1413
- y1 + mid_y + qtr_mod,
1414
- x2 - 3 - half_mod,
1415
- y1 + mid_y - qtr_mod,
1421
+ x2 - 3 - small_mod - small_mod - small_mod - small_mod,
1422
+ y1 + mid_y + small_mod,
1423
+ x2 - 3 - small_mod - small_mod,
1424
+ y1 + mid_y - small_mod,
1416
1425
  x2 - 3,
1417
- y1 + mid_y + qtr_mod,
1426
+ y1 + mid_y + small_mod,
1418
1427
  )
1419
1428
  else:
1429
+ # down arrow
1420
1430
  points = (
1421
- x2 - 3 - mod,
1422
- y1 + mid_y - qtr_mod,
1423
- x2 - 3 - half_mod,
1424
- y1 + mid_y + qtr_mod,
1431
+ x2 - 3 - small_mod - small_mod - small_mod - small_mod,
1432
+ y1 + mid_y - small_mod,
1433
+ x2 - 3 - small_mod - small_mod,
1434
+ y1 + mid_y + small_mod,
1425
1435
  x2 - 3,
1426
- y1 + mid_y - qtr_mod,
1436
+ y1 + mid_y - small_mod,
1427
1437
  )
1428
1438
  if self.hidd_dropdown:
1429
1439
  t, sh = self.hidd_dropdown.popitem()
@@ -1683,12 +1693,12 @@ class RowIndex(tk.Canvas):
1683
1693
  iid = self.MT._row_index[datarn].iid
1684
1694
  mw -= self.MT.index_txt_height
1685
1695
  if align == "w":
1686
- draw_x += self.MT.index_txt_height + 1
1696
+ draw_x += self.MT.index_txt_height + 3
1687
1697
  indent = self.get_treeview_indent(iid)
1688
1698
  draw_x += indent + 5
1689
1699
  if self.tree[iid].children:
1690
1700
  self.redraw_tree_arrow(
1691
- 0,
1701
+ 2,
1692
1702
  rtopgridln,
1693
1703
  r=r,
1694
1704
  fill=tree_arrow_fg,
@@ -2145,7 +2155,7 @@ class RowIndex(tk.Canvas):
2145
2155
  "height": win_h,
2146
2156
  "font": self.PAR.ops.index_font,
2147
2157
  "ops": self.PAR.ops,
2148
- "outline_color": self.PAR.ops.popup_menu_fg,
2158
+ "outline_color": self.PAR.ops.index_selected_rows_bg,
2149
2159
  "align": self.get_cell_align(r),
2150
2160
  "values": kwargs["values"],
2151
2161
  }
@@ -21,7 +21,7 @@ theme_light_blue: dict[str, str] = DotDict({
21
21
  "index_fg": "black",
22
22
  "index_selected_cells_bg": "#D3E3FD",
23
23
  "index_selected_cells_fg": "black",
24
- "top_left_bg": "#FFFFFF",
24
+ "top_left_bg": "#F9FBFD",
25
25
  "top_left_fg": "#C7C7C7",
26
26
  "top_left_fg_highlight": "#747775",
27
27
  "table_bg": "#FFFFFF",
@@ -84,19 +84,19 @@ theme_light_green: dict[str, str] = DotDict({
84
84
  "popup_menu_highlight_fg": "#000000",
85
85
  "index_hidden_rows_expander_bg": "gray30",
86
86
  "header_hidden_columns_expander_bg": "gray30",
87
- "header_bg": "#ECECEC",
87
+ "header_bg": "#F5F5F5",
88
88
  "header_border_fg": "#ababab",
89
89
  "header_grid_fg": "#ababab",
90
90
  "header_fg": "black",
91
- "header_selected_cells_bg": "#d6d4d2",
91
+ "header_selected_cells_bg": "#CAEAD8",
92
92
  "header_selected_cells_fg": "#217346",
93
- "index_bg": "#ECECEC",
93
+ "index_bg": "#F5F5F5",
94
94
  "index_border_fg": "#ababab",
95
95
  "index_grid_fg": "#ababab",
96
96
  "index_fg": "black",
97
- "index_selected_cells_bg": "#d6d4d2",
97
+ "index_selected_cells_bg": "#CAEAD8",
98
98
  "index_selected_cells_fg": "#107C41",
99
- "top_left_bg": "#ECECEC",
99
+ "top_left_bg": "#F5F5F5",
100
100
  "top_left_fg": "#b7b7b7",
101
101
  "top_left_fg_highlight": "#5f6368",
102
102
  "table_bg": "#FFFFFF",
@@ -171,7 +171,7 @@ theme_dark: dict[str, str] = DotDict({
171
171
  "index_fg": "gray70",
172
172
  "index_selected_cells_bg": "#545454",
173
173
  "index_selected_cells_fg": "#6aa2fc",
174
- "top_left_bg": "#141414",
174
+ "top_left_bg": "#28282a",
175
175
  "top_left_fg": "#505054",
176
176
  "top_left_fg_highlight": "white",
177
177
  "table_bg": "#000000",
@@ -246,7 +246,7 @@ theme_black: dict[str, str] = DotDict({
246
246
  "index_fg": "#FBB86C",
247
247
  "index_selected_cells_bg": "#545454",
248
248
  "index_selected_cells_fg": "#FBB86C",
249
- "top_left_bg": "#000000",
249
+ "top_left_bg": "#141416",
250
250
  "top_left_fg": "#505054",
251
251
  "top_left_fg_highlight": "#FBB86C",
252
252
  "table_bg": "#000000",
@@ -163,6 +163,7 @@ class TopLeftRectangle(tk.Canvas):
163
163
  recreate_selection_boxes: bool = True,
164
164
  ) -> None:
165
165
  try:
166
+ self.update_idletasks()
166
167
  if new_h is None:
167
168
  h = self.winfo_height()
168
169
  if new_w is None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tksheet
3
- Version: 7.2.6
3
+ Version: 7.2.8
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