tksheet 7.1.3__tar.gz → 7.1.4__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.1.3/tksheet.egg-info → tksheet-7.1.4}/PKG-INFO +1 -1
  2. {tksheet-7.1.3 → tksheet-7.1.4}/pyproject.toml +1 -1
  3. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/__init__.py +1 -1
  4. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/column_headers.py +26 -38
  5. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/main_table.py +21 -17
  6. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/other_classes.py +4 -0
  7. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/row_index.py +26 -38
  8. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/sheet.py +42 -9
  9. {tksheet-7.1.3 → tksheet-7.1.4/tksheet.egg-info}/PKG-INFO +1 -1
  10. {tksheet-7.1.3 → tksheet-7.1.4}/LICENSE.txt +0 -0
  11. {tksheet-7.1.3 → tksheet-7.1.4}/README.md +0 -0
  12. {tksheet-7.1.3 → tksheet-7.1.4}/setup.cfg +0 -0
  13. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/colors.py +0 -0
  14. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/formatters.py +0 -0
  15. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/functions.py +0 -0
  16. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/sheet_options.py +0 -0
  17. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/text_editor.py +0 -0
  18. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/themes.py +0 -0
  19. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/top_left_rectangle.py +0 -0
  20. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/types.py +0 -0
  21. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet/vars.py +0 -0
  22. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet.egg-info/SOURCES.txt +0 -0
  23. {tksheet-7.1.3 → tksheet-7.1.4}/tksheet.egg-info/dependency_links.txt +0 -0
  24. {tksheet-7.1.3 → tksheet-7.1.4}/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.1.3
3
+ Version: 7.1.4
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.1.3"
9
+ version = "7.1.4"
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.1.3"
7
+ __version__ = "7.1.4"
8
8
 
9
9
  from .colors import (
10
10
  color_map,
@@ -197,8 +197,7 @@ class ColumnHeaders(tk.Canvas):
197
197
  self.toggle_select_col(c, redraw=True)
198
198
  if self.MT.rc_popup_menus_enabled:
199
199
  popup_menu = self.ch_rc_popup_menu
200
- if self.extra_rc_func is not None:
201
- self.extra_rc_func(event)
200
+ try_binding(self.extra_rc_func, event)
202
201
  if popup_menu is not None:
203
202
  self.popup_menu_loc = c
204
203
  popup_menu.tk_popup(event.x_root, event.y_root)
@@ -218,10 +217,9 @@ class ColumnHeaders(tk.Canvas):
218
217
  self.being_drawn_item = True
219
218
  self.being_drawn_item = self.add_selection(c, set_as_current=True, run_binding_func=False)
220
219
  self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
221
- if self.ctrl_selection_binding_func is not None:
222
- self.ctrl_selection_binding_func(
223
- self.MT.get_select_event(being_drawn_item=self.being_drawn_item),
224
- )
220
+ sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
221
+ try_binding(self.ctrl_selection_binding_func, sel_event)
222
+ self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
225
223
  elif c_selected:
226
224
  self.MT.deselect(c=c)
227
225
  elif not self.MT.ctrl_select_enabled:
@@ -252,10 +250,9 @@ class ColumnHeaders(tk.Canvas):
252
250
  set_as_current=True,
253
251
  )
254
252
  self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
255
- if self.ctrl_selection_binding_func is not None:
256
- self.ctrl_selection_binding_func(
257
- self.MT.get_select_event(being_drawn_item=self.being_drawn_item),
258
- )
253
+ sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
254
+ try_binding(self.ctrl_selection_binding_func, sel_event)
255
+ self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
259
256
  elif c_selected:
260
257
  self.dragged_col = DraggedRowColumn(
261
258
  dragged=c,
@@ -275,15 +272,14 @@ class ColumnHeaders(tk.Canvas):
275
272
  if self.MT.selected and self.MT.selected.type_ == "columns":
276
273
  r_to_sel, c_to_sel = self.MT.selected.row, self.MT.selected.column
277
274
  self.MT.deselect("all", redraw=False)
278
- self.being_drawn_item = self.MT.create_selection_box(*self.get_shift_select_box(c, c_to_sel))
275
+ self.being_drawn_item = self.MT.create_selection_box(*self.get_shift_select_box(c, c_to_sel), "columns")
279
276
  self.MT.set_currently_selected(r_to_sel, c_to_sel, self.being_drawn_item)
280
277
  else:
281
278
  self.being_drawn_item = self.select_col(c, run_binding_func=False)
282
279
  self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
283
- if self.shift_selection_binding_func is not None:
284
- self.shift_selection_binding_func(
285
- self.MT.get_select_event(being_drawn_item=self.being_drawn_item),
286
- )
280
+ sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
281
+ try_binding(self.shift_selection_binding_func, sel_event)
282
+ self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
287
283
  elif c_selected:
288
284
  self.dragged_col = DraggedRowColumn(
289
285
  dragged=c,
@@ -371,8 +367,7 @@ class ColumnHeaders(tk.Canvas):
371
367
  self.MT.current_cursor = "hand2"
372
368
  if not mouse_over_resize and not mouse_over_selected:
373
369
  self.MT.reset_mouse_motion_creations()
374
- if self.extra_motion_func is not None:
375
- self.extra_motion_func(event)
370
+ try_binding(self.extra_motion_func, event)
376
371
 
377
372
  def double_b1(self, event: object):
378
373
  self.mouseclick_outside_editor_or_dropdown_all_canvases(inside=True)
@@ -412,8 +407,7 @@ class ColumnHeaders(tk.Canvas):
412
407
  self.open_cell(event)
413
408
  self.rsz_w = None
414
409
  self.mouse_motion(event)
415
- if self.extra_double_b1_func is not None:
416
- self.extra_double_b1_func(event)
410
+ try_binding(self.extra_double_b1_func, event)
417
411
 
418
412
  def b1_press(self, event: object):
419
413
  self.MT.unbind("<MouseWheel>")
@@ -478,8 +472,7 @@ class ColumnHeaders(tk.Canvas):
478
472
  self.being_drawn_item = self.select_col(c, redraw=True)
479
473
  elif self.MT.toggle_selection_enabled:
480
474
  self.toggle_select_col(c, redraw=True)
481
- if self.extra_b1_press_func is not None:
482
- self.extra_b1_press_func(event)
475
+ try_binding(self.extra_b1_press_func, event)
483
476
 
484
477
  def b1_motion(self, event: object):
485
478
  x1, y1, x2, y2 = self.MT.get_canvas_visible_area()
@@ -570,16 +563,14 @@ class ColumnHeaders(tk.Canvas):
570
563
  else:
571
564
  self.being_drawn_item = self.select_col(self.MT.selected.column, run_binding_func=False)
572
565
  need_redraw = True
573
- if self.drag_selection_binding_func is not None:
574
- self.drag_selection_binding_func(
575
- self.MT.get_select_event(being_drawn_item=self.being_drawn_item),
576
- )
566
+ sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
567
+ try_binding(self.drag_selection_binding_func, sel_event)
568
+ self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
577
569
  if self.scroll_if_event_offscreen(event):
578
570
  need_redraw = True
579
571
  if need_redraw:
580
572
  self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=False)
581
- if self.extra_b1_motion_func is not None:
582
- self.extra_b1_motion_func(event)
573
+ try_binding(self.extra_b1_motion_func, event)
583
574
 
584
575
  def get_b1_motion_box(self, start_col, end_col):
585
576
  if end_col >= start_col:
@@ -631,10 +622,9 @@ class ColumnHeaders(tk.Canvas):
631
622
  self.MT.hide_selection_box(self.MT.selected.fill_iid)
632
623
  self.being_drawn_item = self.add_selection(box[1], run_binding_func=False)
633
624
  need_redraw = True
634
- if self.drag_selection_binding_func is not None:
635
- self.drag_selection_binding_func(
636
- self.MT.get_select_event(being_drawn_item=self.being_drawn_item),
637
- )
625
+ sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
626
+ try_binding(self.drag_selection_binding_func, sel_event)
627
+ self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
638
628
  if self.scroll_if_event_offscreen(event):
639
629
  need_redraw = True
640
630
  if need_redraw:
@@ -770,10 +760,9 @@ class ColumnHeaders(tk.Canvas):
770
760
  c_to_sel,
771
761
  item=self.MT.create_selection_box(*to_sel, set_current=False),
772
762
  )
773
- if self.drag_selection_binding_func is not None:
774
- self.drag_selection_binding_func(
775
- self.MT.get_select_event(being_drawn_item=self.being_drawn_item),
776
- )
763
+ sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
764
+ try_binding(self.drag_selection_binding_func, sel_event)
765
+ self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
777
766
  self.MT.bind("<MouseWheel>", self.MT.mousewheel)
778
767
  if self.width_resizing_enabled and self.rsz_w is not None and self.currently_resizing_width:
779
768
  self.currently_resizing_width = False
@@ -879,8 +868,7 @@ class ColumnHeaders(tk.Canvas):
879
868
  self.rsz_w = None
880
869
  self.rsz_h = None
881
870
  self.mouse_motion(event)
882
- if self.extra_b1_release_func is not None:
883
- self.extra_b1_release_func(event)
871
+ try_binding(self.extra_b1_release_func, event)
884
872
 
885
873
  def toggle_select_col(
886
874
  self,
@@ -1646,7 +1634,7 @@ class ColumnHeaders(tk.Canvas):
1646
1634
  text = event.char
1647
1635
  else:
1648
1636
  return False
1649
- if self.extra_begin_edit_cell_func is not None:
1637
+ if self.extra_begin_edit_cell_func:
1650
1638
  try:
1651
1639
  text = self.extra_begin_edit_cell_func(
1652
1640
  event_dict(
@@ -75,6 +75,7 @@ from .functions import (
75
75
  )
76
76
  from .other_classes import (
77
77
  Box_nt,
78
+ Box_st,
78
79
  Box_t,
79
80
  DotDict,
80
81
  DropdownStorage,
@@ -1908,11 +1909,11 @@ class MainTable(tk.Canvas):
1908
1909
  def page_UP(self, event=None):
1909
1910
  height = self.winfo_height()
1910
1911
  top = self.canvasy(0)
1911
- scrollto = top - height
1912
- if scrollto < 0:
1913
- scrollto = 0
1912
+ scrollto_y = top - height
1913
+ if scrollto_y < 0:
1914
+ scrollto_y = 0
1914
1915
  if self.PAR.ops.page_up_down_select_row:
1915
- r = bisect_left(self.row_positions, scrollto)
1916
+ r = bisect_left(self.row_positions, scrollto_y)
1916
1917
  if self.selected and self.selected.row == r:
1917
1918
  r -= 1
1918
1919
  if r < 0:
@@ -1925,11 +1926,11 @@ class MainTable(tk.Canvas):
1925
1926
  elif (self.single_selection_enabled or self.toggle_selection_enabled) and self.anything_selected(
1926
1927
  exclude_columns=True, exclude_rows=True
1927
1928
  ):
1928
- box = self.get_all_selection_boxes_with_types()[0][0]
1929
- self.see(r, box[1], keep_xscroll=True, check_cell_visibility=False)
1930
- self.select_cell(r, box[1])
1929
+ c = next(reversed(self.selection_boxes.values())).coords.from_c
1930
+ self.see(r, c, keep_xscroll=True, check_cell_visibility=False)
1931
+ self.select_cell(r, c)
1931
1932
  else:
1932
- args = ("moveto", scrollto / (self.row_positions[-1] + 100))
1933
+ args = ("moveto", scrollto_y / (self.row_positions[-1] + 100))
1933
1934
  self.yview(*args)
1934
1935
  self.RI.yview(*args)
1935
1936
  self.main_table_redraw_grid_and_text(redraw_row_index=True)
@@ -1952,9 +1953,9 @@ class MainTable(tk.Canvas):
1952
1953
  elif (self.single_selection_enabled or self.toggle_selection_enabled) and self.anything_selected(
1953
1954
  exclude_columns=True, exclude_rows=True
1954
1955
  ):
1955
- box = self.get_all_selection_boxes_with_types()[0][0]
1956
- self.see(r, box[1], keep_xscroll=True, check_cell_visibility=False)
1957
- self.select_cell(r, box[1])
1956
+ c = next(reversed(self.selection_boxes.values())).coords.from_c
1957
+ self.see(r, c, keep_xscroll=True, check_cell_visibility=False)
1958
+ self.select_cell(r, c)
1958
1959
  else:
1959
1960
  end = self.row_positions[-1]
1960
1961
  if scrollto > end + 100:
@@ -5583,6 +5584,9 @@ class MainTable(tk.Canvas):
5583
5584
  columns: bool = True,
5584
5585
  reverse: bool = False,
5585
5586
  ) -> Generator[int]:
5587
+ """
5588
+ Most recent selection box should be last
5589
+ """
5586
5590
  itr = reversed(self.selection_boxes.items()) if reverse else self.selection_boxes.items()
5587
5591
  return tuple(
5588
5592
  (iid, box)
@@ -5590,7 +5594,7 @@ class MainTable(tk.Canvas):
5590
5594
  if cells and box.type_ == "cells" or rows and box.type_ == "rows" or columns and box.type_ == "columns"
5591
5595
  )
5592
5596
 
5593
- def get_boxes(self) -> dict:
5597
+ def get_boxes(self) -> dict[Box_nt, Literal["cells", "rows", "columns"]]:
5594
5598
  return {box.coords: box.type_ for box in self.selection_boxes.values()}
5595
5599
 
5596
5600
  def reselect_from_get_boxes(
@@ -6216,7 +6220,7 @@ class MainTable(tk.Canvas):
6216
6220
  return tuple(box.coords for item, box in self.get_selection_items())
6217
6221
 
6218
6222
  def get_all_selection_boxes_with_types(self) -> list[tuple[tuple[int, int, int, int], str]]:
6219
- return [(box.coords, box.type_) for item, box in self.get_selection_items()]
6223
+ return [Box_st(box.coords, box.type_) for item, box in self.get_selection_items()]
6220
6224
 
6221
6225
  def all_selected(self) -> bool:
6222
6226
  return any(
@@ -6243,20 +6247,20 @@ class MainTable(tk.Canvas):
6243
6247
  )
6244
6248
  )
6245
6249
 
6246
- def col_selected(self, c: int) -> bool:
6250
+ def col_selected(self, c: int, cells: bool = False) -> bool:
6247
6251
  return isinstance(c, int) and any(
6248
6252
  box.coords.from_c <= c and box.coords.upto_c > c
6249
6253
  for item, box in self.get_selection_items(
6250
- cells=False,
6254
+ cells=cells,
6251
6255
  rows=False,
6252
6256
  )
6253
6257
  )
6254
6258
 
6255
- def row_selected(self, r: int) -> bool:
6259
+ def row_selected(self, r: int, cells: bool = False) -> bool:
6256
6260
  return isinstance(r, int) and any(
6257
6261
  box.coords.from_r <= r and box.coords.upto_r > r
6258
6262
  for item, box in self.get_selection_items(
6259
- cells=False,
6263
+ cells=cells,
6260
6264
  columns=False,
6261
6265
  )
6262
6266
  )
@@ -17,6 +17,10 @@ Box_t = namedtuple(
17
17
  "Box_t",
18
18
  "from_r from_c upto_r upto_c type_",
19
19
  )
20
+ Box_st = namedtuple(
21
+ "Box_st",
22
+ "coords type_"
23
+ )
20
24
 
21
25
  Highlight = namedtuple(
22
26
  "Highlight",
@@ -191,8 +191,7 @@ class RowIndex(tk.Canvas):
191
191
  self.toggle_select_row(r, redraw=True)
192
192
  if self.MT.rc_popup_menus_enabled:
193
193
  popup_menu = self.ri_rc_popup_menu
194
- if self.extra_rc_func is not None:
195
- self.extra_rc_func(event)
194
+ try_binding(self.extra_rc_func, event)
196
195
  if popup_menu is not None:
197
196
  self.popup_menu_loc = r
198
197
  popup_menu.tk_popup(event.x_root, event.y_root)
@@ -212,10 +211,9 @@ class RowIndex(tk.Canvas):
212
211
  self.being_drawn_item = True
213
212
  self.being_drawn_item = self.add_selection(r, set_as_current=True, run_binding_func=False)
214
213
  self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
215
- if self.ctrl_selection_binding_func is not None:
216
- self.ctrl_selection_binding_func(
217
- self.MT.get_select_event(being_drawn_item=self.being_drawn_item),
218
- )
214
+ sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
215
+ try_binding(self.ctrl_selection_binding_func, sel_event)
216
+ self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
219
217
  elif r_selected:
220
218
  self.MT.deselect(r=r)
221
219
  elif not self.MT.ctrl_select_enabled:
@@ -246,10 +244,9 @@ class RowIndex(tk.Canvas):
246
244
  set_as_current=True,
247
245
  )
248
246
  self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
249
- if self.ctrl_selection_binding_func is not None:
250
- self.ctrl_selection_binding_func(
251
- self.MT.get_select_event(being_drawn_item=self.being_drawn_item),
252
- )
247
+ sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
248
+ try_binding(self.ctrl_selection_binding_func, sel_event)
249
+ self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
253
250
  elif r_selected:
254
251
  self.dragged_row = DraggedRowColumn(
255
252
  dragged=r,
@@ -269,15 +266,14 @@ class RowIndex(tk.Canvas):
269
266
  if self.MT.selected and self.MT.selected.type_ == "rows":
270
267
  r_to_sel, c_to_sel = self.MT.selected.row, self.MT.selected.column
271
268
  self.MT.deselect("all", redraw=False)
272
- self.being_drawn_item = self.MT.create_selection_box(*self.get_shift_select_box(r, r_to_sel))
269
+ self.being_drawn_item = self.MT.create_selection_box(*self.get_shift_select_box(r, r_to_sel), "rows")
273
270
  self.MT.set_currently_selected(r_to_sel, c_to_sel, self.being_drawn_item)
274
271
  else:
275
272
  self.being_drawn_item = self.select_row(r, run_binding_func=False)
276
273
  self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
277
- if self.shift_selection_binding_func is not None:
278
- self.shift_selection_binding_func(
279
- self.MT.get_select_event(being_drawn_item=self.being_drawn_item),
280
- )
274
+ sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
275
+ try_binding(self.shift_selection_binding_func, sel_event)
276
+ self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
281
277
  elif r_selected:
282
278
  self.dragged_row = DraggedRowColumn(
283
279
  dragged=r,
@@ -365,8 +361,7 @@ class RowIndex(tk.Canvas):
365
361
  self.MT.current_cursor = "hand2"
366
362
  if not mouse_over_resize and not mouse_over_selected:
367
363
  self.MT.reset_mouse_motion_creations()
368
- if self.extra_motion_func is not None:
369
- self.extra_motion_func(event)
364
+ try_binding(self.extra_motion_func, event)
370
365
 
371
366
  def double_b1(self, event: object):
372
367
  self.mouseclick_outside_editor_or_dropdown_all_canvases(inside=True)
@@ -410,8 +405,7 @@ class RowIndex(tk.Canvas):
410
405
  self.PAR.item(iid, open_=iid not in self.tree_open_ids)
411
406
  self.rsz_h = None
412
407
  self.mouse_motion(event)
413
- if self.extra_double_b1_func is not None:
414
- self.extra_double_b1_func(event)
408
+ try_binding(self.extra_double_b1_func, event)
415
409
 
416
410
  def b1_press(self, event: object):
417
411
  self.MT.unbind("<MouseWheel>")
@@ -484,8 +478,7 @@ class RowIndex(tk.Canvas):
484
478
  self.being_drawn_item = self.select_row(r, redraw=True)
485
479
  elif self.MT.toggle_selection_enabled:
486
480
  self.toggle_select_row(r, redraw=True)
487
- if self.extra_b1_press_func is not None:
488
- self.extra_b1_press_func(event)
481
+ try_binding(self.extra_b1_press_func, event)
489
482
 
490
483
  def b1_motion(self, event: object):
491
484
  x1, y1, x2, y2 = self.MT.get_canvas_visible_area()
@@ -576,16 +569,14 @@ class RowIndex(tk.Canvas):
576
569
  else:
577
570
  self.being_drawn_item = self.select_row(self.MT.selected.row, run_binding_func=False)
578
571
  need_redraw = True
579
- if self.drag_selection_binding_func is not None:
580
- self.drag_selection_binding_func(
581
- self.MT.get_select_event(being_drawn_item=self.being_drawn_item),
582
- )
572
+ sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
573
+ try_binding(self.drag_selection_binding_func, sel_event)
574
+ self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
583
575
  if self.scroll_if_event_offscreen(event):
584
576
  need_redraw = True
585
577
  if need_redraw:
586
578
  self.MT.main_table_redraw_grid_and_text(redraw_header=False, redraw_row_index=True)
587
- if self.extra_b1_motion_func is not None:
588
- self.extra_b1_motion_func(event)
579
+ try_binding(self.extra_b1_motion_func, event)
589
580
 
590
581
  def get_b1_motion_box(self, start_row, end_row):
591
582
  if end_row >= start_row:
@@ -637,10 +628,9 @@ class RowIndex(tk.Canvas):
637
628
  self.MT.hide_selection_box(self.MT.selected.fill_iid)
638
629
  self.being_drawn_item = self.add_selection(box[0], run_binding_func=False)
639
630
  need_redraw = True
640
- if self.drag_selection_binding_func is not None:
641
- self.drag_selection_binding_func(
642
- self.MT.get_select_event(being_drawn_item=self.being_drawn_item),
643
- )
631
+ sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
632
+ try_binding(self.drag_selection_binding_func, sel_event)
633
+ self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
644
634
  if self.scroll_if_event_offscreen(event):
645
635
  need_redraw = True
646
636
  if need_redraw:
@@ -775,10 +765,9 @@ class RowIndex(tk.Canvas):
775
765
  c_to_sel,
776
766
  item=self.MT.create_selection_box(*to_sel, set_current=False),
777
767
  )
778
- if self.drag_selection_binding_func is not None:
779
- self.drag_selection_binding_func(
780
- self.MT.get_select_event(being_drawn_item=self.being_drawn_item),
781
- )
768
+ sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
769
+ try_binding(self.drag_selection_binding_func, sel_event)
770
+ self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
782
771
  self.MT.bind("<MouseWheel>", self.MT.mousewheel)
783
772
  if self.height_resizing_enabled and self.rsz_h is not None and self.currently_resizing_height:
784
773
  self.currently_resizing_height = False
@@ -886,8 +875,7 @@ class RowIndex(tk.Canvas):
886
875
  self.rsz_w = None
887
876
  self.rsz_h = None
888
877
  self.mouse_motion(event)
889
- if self.extra_b1_release_func is not None:
890
- self.extra_b1_release_func(event)
878
+ try_binding(self.extra_b1_release_func, event)
891
879
 
892
880
  def event_over_tree_arrow(
893
881
  self,
@@ -1738,7 +1726,7 @@ class RowIndex(tk.Canvas):
1738
1726
  text = event.char
1739
1727
  else:
1740
1728
  return False
1741
- if self.extra_begin_edit_cell_func is not None:
1729
+ if self.extra_begin_edit_cell_func:
1742
1730
  try:
1743
1731
  text = self.extra_begin_edit_cell_func(
1744
1732
  event_dict(
@@ -2967,14 +2967,24 @@ class Sheet(tk.Frame):
2967
2967
  def get_all_selection_boxes_with_types(self) -> list[tuple[tuple[int, int, int, int], str]]:
2968
2968
  return self.MT.get_all_selection_boxes_with_types()
2969
2969
 
2970
- def cell_selected(self, r: int, c: int) -> bool:
2971
- return self.MT.cell_selected(r, c)
2970
+ @property
2971
+ def boxes(self) -> list[tuple[tuple[int, int, int, int], str]]:
2972
+ return self.MT.get_all_selection_boxes_with_types()
2973
+
2974
+ def cell_selected(
2975
+ self,
2976
+ r: int,
2977
+ c: int,
2978
+ rows: bool = False,
2979
+ columns: bool = False,
2980
+ ) -> bool:
2981
+ return self.MT.cell_selected(r, c, inc_cols=columns, inc_rows=rows)
2972
2982
 
2973
- def row_selected(self, r: int) -> bool:
2974
- return self.MT.row_selected(r)
2983
+ def row_selected(self, r: int, cells: bool = False) -> bool:
2984
+ return self.MT.row_selected(r, cells=cells)
2975
2985
 
2976
- def column_selected(self, c: int) -> bool:
2977
- return self.MT.col_selected(c)
2986
+ def column_selected(self, c: int, cells: bool = False) -> bool:
2987
+ return self.MT.col_selected(c, cells=cells)
2978
2988
 
2979
2989
  def anything_selected(
2980
2990
  self,
@@ -3603,6 +3613,7 @@ class Sheet(tk.Frame):
3603
3613
  return c if self.MT.all_columns_displayed else self.MT.displayed_columns[c]
3604
3614
 
3605
3615
  data_c = displayed_column_to_data
3616
+ dcol = displayed_column_to_data
3606
3617
 
3607
3618
  def display_columns(
3608
3619
  self,
@@ -3710,6 +3721,7 @@ class Sheet(tk.Frame):
3710
3721
  return r if self.MT.all_rows_displayed else self.MT.displayed_rows[r]
3711
3722
 
3712
3723
  data_r = displayed_row_to_data
3724
+ drow = displayed_row_to_data
3713
3725
 
3714
3726
  def display_rows(
3715
3727
  self,
@@ -4104,6 +4116,25 @@ class Sheet(tk.Frame):
4104
4116
  )
4105
4117
  return self
4106
4118
 
4119
+ def event_widget_is_sheet(
4120
+ self,
4121
+ event: object,
4122
+ table: bool = True,
4123
+ index: bool = True,
4124
+ header: bool = True,
4125
+ top_left: bool = True,
4126
+ ) -> bool:
4127
+ return (
4128
+ table
4129
+ and event.widget == self.MT
4130
+ or index
4131
+ and event.widget == self.RI
4132
+ or header
4133
+ and event.widget == self.CH
4134
+ or top_left
4135
+ and event.widget == self.TL
4136
+ )
4137
+
4107
4138
  def get_cell_options(
4108
4139
  self,
4109
4140
  key: None | str = None,
@@ -4786,12 +4817,14 @@ class Sheet(tk.Frame):
4786
4817
  self.display_item(item)
4787
4818
  self.see(row=bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]), keep_xscroll=True)
4788
4819
 
4789
- def selection(self) -> list[str]:
4820
+ def selection(self, cells: bool = False) -> list[str]:
4790
4821
  """
4791
4822
  Get currently selected item ids
4792
- - Only includes selected rows
4793
4823
  """
4794
- return [self.MT._row_index[self.displayed_row_to_data(rn)].iid for rn in self.get_selected_rows()]
4824
+ return [
4825
+ self.MT._row_index[self.displayed_row_to_data(rn)].iid
4826
+ for rn in self.get_selected_rows(get_cells_as_rows=cells)
4827
+ ]
4795
4828
 
4796
4829
  def selection_set(self, *items) -> Sheet:
4797
4830
  self.deselect()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tksheet
3
- Version: 7.1.3
3
+ Version: 7.1.4
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