tksheet 7.1.10__tar.gz → 7.1.12__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.10/tksheet.egg-info → tksheet-7.1.12}/PKG-INFO +1 -1
  2. {tksheet-7.1.10 → tksheet-7.1.12}/pyproject.toml +1 -1
  3. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/__init__.py +1 -1
  4. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/column_headers.py +14 -13
  5. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/functions.py +0 -2
  6. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/main_table.py +53 -37
  7. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/row_index.py +2 -0
  8. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/sheet.py +13 -6
  9. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/themes.py +12 -10
  10. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/vars.py +52 -2
  11. {tksheet-7.1.10 → tksheet-7.1.12/tksheet.egg-info}/PKG-INFO +1 -1
  12. {tksheet-7.1.10 → tksheet-7.1.12}/LICENSE.txt +0 -0
  13. {tksheet-7.1.10 → tksheet-7.1.12}/README.md +0 -0
  14. {tksheet-7.1.10 → tksheet-7.1.12}/setup.cfg +0 -0
  15. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/colors.py +0 -0
  16. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/formatters.py +0 -0
  17. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/other_classes.py +0 -0
  18. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/sheet_options.py +0 -0
  19. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/text_editor.py +0 -0
  20. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/top_left_rectangle.py +0 -0
  21. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet/types.py +0 -0
  22. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet.egg-info/SOURCES.txt +0 -0
  23. {tksheet-7.1.10 → tksheet-7.1.12}/tksheet.egg-info/dependency_links.txt +0 -0
  24. {tksheet-7.1.10 → tksheet-7.1.12}/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.10
3
+ Version: 7.1.12
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.10"
9
+ version = "7.1.12"
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.10"
7
+ __version__ = "7.1.12"
8
8
 
9
9
  from .colors import (
10
10
  color_map,
@@ -4,6 +4,7 @@ import tkinter as tk
4
4
  from collections import defaultdict
5
5
  from collections.abc import (
6
6
  Callable,
7
+ Sequence,
7
8
  )
8
9
  from functools import (
9
10
  partial,
@@ -673,11 +674,11 @@ class ColumnHeaders(tk.Canvas):
673
674
 
674
675
  def show_drag_and_drop_indicators(
675
676
  self,
676
- xpos,
677
- y1,
678
- y2,
679
- cols,
680
- ):
677
+ xpos: float,
678
+ y1: float,
679
+ y2: float,
680
+ cols: Sequence[int],
681
+ ) -> None:
681
682
  self.hide_resize_and_ctrl_lines()
682
683
  self.create_resize_line(
683
684
  xpos,
@@ -698,13 +699,13 @@ class ColumnHeaders(tk.Canvas):
698
699
  delete_on_timer=False,
699
700
  )
700
701
 
701
- def hide_resize_and_ctrl_lines(self, ctrl_lines=True):
702
+ def hide_resize_and_ctrl_lines(self, ctrl_lines: bool = True) -> None:
702
703
  self.delete_resize_lines()
703
704
  self.MT.delete_resize_lines()
704
705
  if ctrl_lines:
705
706
  self.MT.delete_ctrl_outlines()
706
707
 
707
- def scroll_if_event_offscreen(self, event: object):
708
+ def scroll_if_event_offscreen(self, event: object) -> bool:
708
709
  xcheck = self.xview()
709
710
  need_redraw = False
710
711
  if event.x > self.winfo_width() and len(xcheck) > 1 and xcheck[1] < 1:
@@ -727,14 +728,14 @@ class ColumnHeaders(tk.Canvas):
727
728
  need_redraw = True
728
729
  return need_redraw
729
730
 
730
- def fix_xview(self):
731
+ def fix_xview(self) -> None:
731
732
  xcheck = self.xview()
732
733
  if xcheck and xcheck[0] < 0:
733
734
  self.MT.set_xviews("moveto", 0)
734
735
  elif len(xcheck) > 1 and xcheck[1] > 1:
735
736
  self.MT.set_xviews("moveto", 1)
736
737
 
737
- def event_over_dropdown(self, c, datacn, event: object, canvasx):
738
+ def event_over_dropdown(self, c: int, datacn: int, event: object, canvasx: float) -> bool:
738
739
  if (
739
740
  event.y < self.MT.header_txt_height + 5
740
741
  and self.get_cell_kwargs(datacn, key="dropdown")
@@ -744,7 +745,7 @@ class ColumnHeaders(tk.Canvas):
744
745
  return True
745
746
  return False
746
747
 
747
- def event_over_checkbox(self, c, datacn, event: object, canvasx):
748
+ def event_over_checkbox(self, c: int, datacn: int, event: object, canvasx: float) -> bool:
748
749
  if (
749
750
  event.y < self.MT.header_txt_height + 5
750
751
  and self.get_cell_kwargs(datacn, key="checkbox")
@@ -753,7 +754,7 @@ class ColumnHeaders(tk.Canvas):
753
754
  return True
754
755
  return False
755
756
 
756
- def b1_release(self, event: object):
757
+ def b1_release(self, event: object) -> None:
757
758
  if self.being_drawn_item is not None:
758
759
  to_sel = self.MT.coords_and_type(self.being_drawn_item)
759
760
  r_to_sel, c_to_sel = self.MT.selected.row, self.MT.selected.column
@@ -909,8 +910,7 @@ class ColumnHeaders(tk.Canvas):
909
910
 
910
911
  def select_col(self, c, redraw=False, run_binding_func=True):
911
912
  self.MT.deselect("all", redraw=False)
912
- box = (0, c, len(self.MT.row_positions) - 1, c + 1, "columns")
913
- fill_iid = self.MT.create_selection_box(*box)
913
+ fill_iid = self.MT.create_selection_box(0, c, len(self.MT.row_positions) - 1, c + 1, "columns")
914
914
  if redraw:
915
915
  self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
916
916
  if run_binding_func:
@@ -1953,6 +1953,7 @@ class ColumnHeaders(tk.Canvas):
1953
1953
  self.dropdown.window.reset(**reset_kwargs)
1954
1954
  self.itemconfig(self.dropdown.canvas_id, state="normal")
1955
1955
  self.coords(self.dropdown.canvas_id, self.MT.col_positions[c], ypos)
1956
+ self.dropdown.window.tkraise()
1956
1957
  else:
1957
1958
  self.dropdown.window = self.PAR.dropdown_class(
1958
1959
  self.winfo_toplevel(),
@@ -204,8 +204,6 @@ def get_dropdown_kwargs(
204
204
  def get_dropdown_dict(**kwargs) -> dict:
205
205
  return {
206
206
  "values": kwargs["values"],
207
- "window": "no dropdown open",
208
- "canvas_id": "no dropdown open",
209
207
  "select_function": kwargs["selection_function"],
210
208
  "modified_function": kwargs["modified_function"],
211
209
  "search_function": kwargs["search_function"],
@@ -91,6 +91,10 @@ from .text_editor import (
91
91
  )
92
92
  from .vars import (
93
93
  USER_OS,
94
+ bind_add_columns,
95
+ bind_add_rows,
96
+ bind_del_columns,
97
+ bind_del_rows,
94
98
  ctrl_key,
95
99
  rc_binding,
96
100
  symbols_set,
@@ -551,7 +555,10 @@ class MainTable(tk.Canvas):
551
555
  for r1, c1, r2, c2 in boxes:
552
556
  self.show_ctrl_outline(canvas="table", start_cell=(c1, r1), end_cell=(c2, r2))
553
557
  self.clipboard_clear()
554
- self.clipboard_append(s.getvalue())
558
+ if len(event_data["cells"]["table"]) == 1:
559
+ self.clipboard_append(next(iter(event_data["cells"]["table"].values())))
560
+ else:
561
+ self.clipboard_append(s.getvalue())
555
562
  self.update_idletasks()
556
563
  try_binding(self.extra_end_ctrl_c_func, event_data, "end_ctrl_c")
557
564
 
@@ -615,7 +622,10 @@ class MainTable(tk.Canvas):
615
622
  if event_data["cells"]["table"]:
616
623
  self.undo_stack.append(ev_stack_dict(event_data))
617
624
  self.clipboard_clear()
618
- self.clipboard_append(s.getvalue())
625
+ if len(event_data["cells"]["table"]) == 1:
626
+ self.clipboard_append(next(iter(event_data["cells"]["table"].values())))
627
+ else:
628
+ self.clipboard_append(s.getvalue())
619
629
  self.update_idletasks()
620
630
  self.refresh()
621
631
  for r1, c1, r2, c2 in boxes:
@@ -657,9 +667,11 @@ class MainTable(tk.Canvas):
657
667
  dialect = csv.Sniffer().sniff(data, delimiters=self.PAR.ops.from_clipboard_delimiters)
658
668
  except Exception:
659
669
  dialect = csv.excel_tab
660
- data = list(csv.reader(io.StringIO(data), dialect=dialect, skipinitialspace=True))
661
- if not data:
662
- return
670
+ if dialect.delimiter in data:
671
+ if not (data := list(csv.reader(io.StringIO(data), dialect=dialect, skipinitialspace=True))):
672
+ return
673
+ else:
674
+ data = [[data]]
663
675
  new_data_numcols = max(map(len, data))
664
676
  new_data_numrows = len(data)
665
677
  for rn, r in enumerate(data):
@@ -2536,19 +2548,19 @@ class MainTable(tk.Canvas):
2536
2548
  self.undo_enabled = True
2537
2549
  self._tksheet_bind("undo_bindings", self.undo)
2538
2550
  self._tksheet_bind("redo_bindings", self.redo)
2539
- if binding in ("all", "rc_delete_column"):
2551
+ if binding in bind_del_columns:
2540
2552
  self.rc_delete_column_enabled = True
2541
2553
  self.rc_popup_menus_enabled = True
2542
2554
  self.rc_select_enabled = True
2543
- if binding in ("all", "rc_delete_row"):
2555
+ if binding in bind_del_rows:
2544
2556
  self.rc_delete_row_enabled = True
2545
2557
  self.rc_popup_menus_enabled = True
2546
2558
  self.rc_select_enabled = True
2547
- if binding in ("all", "rc_insert_column"):
2559
+ if binding in bind_add_columns:
2548
2560
  self.rc_insert_column_enabled = True
2549
2561
  self.rc_popup_menus_enabled = True
2550
2562
  self.rc_select_enabled = True
2551
- if binding in ("all", "rc_insert_row"):
2563
+ if binding in bind_add_rows:
2552
2564
  self.rc_insert_row_enabled = True
2553
2565
  self.rc_popup_menus_enabled = True
2554
2566
  self.rc_select_enabled = True
@@ -2607,25 +2619,16 @@ class MainTable(tk.Canvas):
2607
2619
  self.RI.row_selection_enabled = False
2608
2620
  if binding in ("all", "row_drag_and_drop", "move_rows"):
2609
2621
  self.RI.drag_and_drop_enabled = False
2610
- if binding in ("all", "rc_delete_column"):
2622
+ if binding in bind_del_columns:
2611
2623
  self.rc_delete_column_enabled = False
2612
- self.rc_popup_menus_enabled = False
2613
- self.rc_select_enabled = False
2614
- if binding in ("all", "rc_delete_row"):
2624
+ if binding in bind_del_rows:
2615
2625
  self.rc_delete_row_enabled = False
2616
- self.rc_popup_menus_enabled = False
2617
- self.rc_select_enabled = False
2618
- if binding in ("all", "rc_insert_column"):
2626
+ if binding in bind_add_columns:
2619
2627
  self.rc_insert_column_enabled = False
2620
- self.rc_popup_menus_enabled = False
2621
- self.rc_select_enabled = False
2622
- if binding in ("all", "rc_insert_row"):
2628
+ if binding in bind_add_rows:
2623
2629
  self.rc_insert_row_enabled = False
2624
- self.rc_popup_menus_enabled = False
2625
- self.rc_select_enabled = False
2626
2630
  if binding in ("all", "right_click_popup_menu", "rc_popup_menu"):
2627
2631
  self.rc_popup_menus_enabled = False
2628
- self.rc_select_enabled = False
2629
2632
  if binding in ("all", "right_click_select", "rc_select"):
2630
2633
  self.rc_select_enabled = False
2631
2634
  if binding in ("all", "edit_cell", "edit_bindings", "edit"):
@@ -4180,6 +4183,7 @@ class MainTable(tk.Canvas):
4180
4183
  create_ops: bool = True,
4181
4184
  create_selections: bool = True,
4182
4185
  add_row_positions: bool = True,
4186
+ push_ops: bool = True,
4183
4187
  ) -> EventDataDict:
4184
4188
  self.saved_column_widths = {}
4185
4189
  saved_displayed_columns = list(self.displayed_columns)
@@ -4227,10 +4231,11 @@ class MainTable(tk.Canvas):
4227
4231
  )
4228
4232
  if isinstance(self._headers, list):
4229
4233
  self._headers = insert_items(self._headers, header, self.CH.fix_header)
4230
- self.adjust_options_post_add_columns(
4231
- cols=tuple(reversed(columns)),
4232
- create_ops=create_ops,
4233
- )
4234
+ if push_ops:
4235
+ self.adjust_options_post_add_columns(
4236
+ cols=tuple(reversed(columns)),
4237
+ create_ops=create_ops,
4238
+ )
4234
4239
  if create_selections:
4235
4240
  self.deselect("all")
4236
4241
  for boxst, boxend in consecutive_ranges(tuple(reversed(column_widths))):
@@ -4311,6 +4316,7 @@ class MainTable(tk.Canvas):
4311
4316
  create_ops: bool = True,
4312
4317
  create_selections: bool = True,
4313
4318
  add_col_positions: bool = True,
4319
+ push_ops: bool = True,
4314
4320
  ) -> EventDataDict:
4315
4321
  self.saved_row_heights = {}
4316
4322
  saved_displayed_rows = list(self.displayed_rows)
@@ -4356,10 +4362,11 @@ class MainTable(tk.Canvas):
4356
4362
  (self.PAR.ops.default_column_width for i in range(len(self.col_positions) - 1, maxcn + 1)),
4357
4363
  )
4358
4364
  )
4359
- self.adjust_options_post_add_rows(
4360
- rows=tuple(reversed(rows)),
4361
- create_ops=create_ops,
4362
- )
4365
+ if push_ops:
4366
+ self.adjust_options_post_add_rows(
4367
+ rows=tuple(reversed(rows)),
4368
+ create_ops=create_ops,
4369
+ )
4363
4370
  if create_selections:
4364
4371
  self.deselect("all")
4365
4372
  for boxst, boxend in consecutive_ranges(tuple(reversed(row_heights))):
@@ -5657,7 +5664,7 @@ class MainTable(tk.Canvas):
5657
5664
  r = r1
5658
5665
  if c is None:
5659
5666
  c = c1
5660
- if r1 <= r and c1 <= c and r2 > r and c2 > c:
5667
+ if r1 <= r and c1 <= c and r2 >= r and c2 >= c:
5661
5668
  self.create_currently_selected_box(
5662
5669
  r,
5663
5670
  c,
@@ -5673,7 +5680,7 @@ class MainTable(tk.Canvas):
5673
5680
  c = box[1]
5674
5681
  for item, selection_box in self.get_selection_items(reverse=True):
5675
5682
  r1, c1, r2, c2 = selection_box.coords
5676
- if box == (r1, c1, r2, c2) and r1 <= r and c1 <= c and r2 > r and c2 > c:
5683
+ if box == (r1, c1, r2, c2) and r1 <= r and c1 <= c and r2 >= r and c2 >= c:
5677
5684
  self.create_currently_selected_box(
5678
5685
  r,
5679
5686
  c,
@@ -5686,7 +5693,7 @@ class MainTable(tk.Canvas):
5686
5693
  if r is not None and c is not None:
5687
5694
  for item, selection_box in self.get_selection_items(reverse=True):
5688
5695
  r1, c1, r2, c2 = selection_box.coords
5689
- if r1 <= r and c1 <= c and r2 > r and c2 > c:
5696
+ if r1 <= r and c1 <= c and r2 >= r and c2 >= c:
5690
5697
  self.create_currently_selected_box(
5691
5698
  r,
5692
5699
  c,
@@ -6057,9 +6064,16 @@ class MainTable(tk.Canvas):
6057
6064
  return
6058
6065
  for item, box in self.get_selection_items():
6059
6066
  r1, c1, r2, c2 = box.coords
6060
- if r1 >= len(self.row_positions) - 1 or c1 >= len(self.col_positions) - 1:
6061
- self.hide_selection_box(item)
6062
- continue
6067
+ if r1 >= len(self.row_positions) - 1:
6068
+ if len(self.row_positions) > 1:
6069
+ r1 = len(self.row_positions) - 2
6070
+ else:
6071
+ r1 = len(self.row_positions) - 1
6072
+ if c1 >= len(self.col_positions) - 1:
6073
+ if len(self.col_positions) > 1:
6074
+ c1 = len(self.col_positions) - 2
6075
+ else:
6076
+ c1 = len(self.col_positions) - 1
6063
6077
  if r2 > len(self.row_positions) - 1:
6064
6078
  r2 = len(self.row_positions) - 1
6065
6079
  if c2 > len(self.col_positions) - 1:
@@ -6737,6 +6751,7 @@ class MainTable(tk.Canvas):
6737
6751
  win_w = self.col_positions[c + 1] - self.col_positions[c] + 1
6738
6752
  if anchor == "nw":
6739
6753
  if kwargs["state"] == "normal":
6754
+ self.text_editor.window.update_idletasks()
6740
6755
  ypos = self.row_positions[r] + self.text_editor.window.winfo_height() - 1
6741
6756
  else:
6742
6757
  ypos = self.row_positions[r + 1]
@@ -6755,8 +6770,9 @@ class MainTable(tk.Canvas):
6755
6770
  }
6756
6771
  if self.dropdown.window:
6757
6772
  self.dropdown.window.reset(**reset_kwargs)
6758
- self.itemconfig(self.dropdown.canvas_id, state="normal", anchor=anchor)
6759
6773
  self.coords(self.dropdown.canvas_id, self.col_positions[c], ypos)
6774
+ self.itemconfig(self.dropdown.canvas_id, state="normal", anchor=anchor)
6775
+ self.dropdown.window.tkraise()
6760
6776
  else:
6761
6777
  self.dropdown.window = self.PAR.dropdown_class(
6762
6778
  self.winfo_toplevel(),
@@ -2029,6 +2029,7 @@ class RowIndex(tk.Canvas):
2029
2029
  win_w = self.current_width + 1
2030
2030
  if anchor == "nw":
2031
2031
  if kwargs["state"] == "normal":
2032
+ self.text_editor.window.update_idletasks()
2032
2033
  ypos = self.MT.row_positions[r] + self.text_editor.window.winfo_height() - 1
2033
2034
  else:
2034
2035
  ypos = self.MT.row_positions[r + 1]
@@ -2049,6 +2050,7 @@ class RowIndex(tk.Canvas):
2049
2050
  self.dropdown.window.reset(**reset_kwargs)
2050
2051
  self.itemconfig(self.dropdown.canvas_id, state="normal", anchor=anchor)
2051
2052
  self.coords(self.dropdown.canvas_id, 0, ypos)
2053
+ self.dropdown.window.tkraise()
2052
2054
  else:
2053
2055
  self.dropdown.window = self.PAR.dropdown_class(
2054
2056
  self.winfo_toplevel(),
@@ -1939,6 +1939,7 @@ class Sheet(tk.Frame):
1939
1939
  emit_event: bool = False,
1940
1940
  create_selections: bool = True,
1941
1941
  add_column_widths: bool = True,
1942
+ push_ops: bool = True,
1942
1943
  redraw: bool = True,
1943
1944
  ) -> EventDataDict:
1944
1945
  total_cols = None
@@ -2005,6 +2006,7 @@ class Sheet(tk.Frame):
2005
2006
  selected=self.MT.selected,
2006
2007
  ),
2007
2008
  create_selections=create_selections,
2009
+ push_ops=push_ops,
2008
2010
  )
2009
2011
  if undo:
2010
2012
  self.MT.undo_stack.append(ev_stack_dict(event_data))
@@ -2024,6 +2026,7 @@ class Sheet(tk.Frame):
2024
2026
  emit_event: bool = False,
2025
2027
  create_selections: bool = True,
2026
2028
  add_row_heights: bool = True,
2029
+ push_ops: bool = True,
2027
2030
  redraw: bool = True,
2028
2031
  ) -> EventDataDict:
2029
2032
  old_total = self.MT.equalize_data_row_lengths()
@@ -2098,6 +2101,7 @@ class Sheet(tk.Frame):
2098
2101
  selected=self.MT.selected,
2099
2102
  ),
2100
2103
  create_selections=create_selections,
2104
+ push_ops=push_ops,
2101
2105
  )
2102
2106
  if undo:
2103
2107
  self.MT.undo_stack.append(ev_stack_dict(event_data))
@@ -2571,7 +2575,7 @@ class Sheet(tk.Frame):
2571
2575
  self.MT.open_dropdown_window(r, c)
2572
2576
  return self
2573
2577
 
2574
- def close_dropdown(self, r: int, c: int) -> Sheet:
2578
+ def close_dropdown(self, r: int | None = None, c: int | None = None) -> Sheet:
2575
2579
  self.MT.close_dropdown_window(r, c)
2576
2580
  return self
2577
2581
 
@@ -2579,7 +2583,7 @@ class Sheet(tk.Frame):
2579
2583
  self.CH.open_dropdown_window(c)
2580
2584
  return self
2581
2585
 
2582
- def close_header_dropdown(self, c: int) -> Sheet:
2586
+ def close_header_dropdown(self, c: int | None = None) -> Sheet:
2583
2587
  self.CH.close_dropdown_window(c)
2584
2588
  return self
2585
2589
 
@@ -2587,7 +2591,7 @@ class Sheet(tk.Frame):
2587
2591
  self.RI.open_dropdown_window(r)
2588
2592
  return self
2589
2593
 
2590
- def close_index_dropdown(self, r: int) -> Sheet:
2594
+ def close_index_dropdown(self, r: int | None = None) -> Sheet:
2591
2595
  self.RI.close_dropdown_window(r)
2592
2596
  return self
2593
2597
 
@@ -4470,6 +4474,7 @@ class Sheet(tk.Frame):
4470
4474
  iid_column: int,
4471
4475
  parent_column: int,
4472
4476
  text_column: None | int = None,
4477
+ push_ops: bool = False,
4473
4478
  ) -> Sheet:
4474
4479
  if text_column is None:
4475
4480
  text_column = iid_column
@@ -4518,6 +4523,7 @@ class Sheet(tk.Frame):
4518
4523
  row_index=True,
4519
4524
  create_selections=False,
4520
4525
  fill=False,
4526
+ push_ops=push_ops,
4521
4527
  )
4522
4528
  self.RI.tree_rns = {n.iid: i for i, n in enumerate(self.MT._row_index)}
4523
4529
  self.hide_rows(
@@ -6231,8 +6237,8 @@ class Sheet(tk.Frame):
6231
6237
  kwargs = self.RI.get_cell_kwargs(r_, key="dropdown")
6232
6238
  if kwargs:
6233
6239
  kwargs["values"] = values
6234
- if self.RI.current_dropdown_window is not None:
6235
- self.RI.current_dropdown_window.values(values)
6240
+ if self.RI.dropdown.open:
6241
+ self.RI.dropdown.window.values(values)
6236
6242
  if set_value is not None:
6237
6243
  self.MT.row_index(newindex=set_value, index=r_)
6238
6244
  # here
@@ -6454,7 +6460,7 @@ class Dropdown(Sheet):
6454
6460
  width: int | None = None,
6455
6461
  height: int | None = None,
6456
6462
  font: None | tuple[str, int, str] = None,
6457
- outline_thickness: int = 1,
6463
+ outline_thickness: int = 2,
6458
6464
  values: list[object] = [],
6459
6465
  close_dropdown_window: Callable | None = None,
6460
6466
  search_function: Callable = dropdown_search_function,
@@ -6512,6 +6518,7 @@ class Dropdown(Sheet):
6512
6518
  align: str,
6513
6519
  values: list[object] | None = None,
6514
6520
  ) -> None:
6521
+ self.deselect(redraw=False)
6515
6522
  self.r = r
6516
6523
  self.c = c
6517
6524
  self.row = -1
@@ -1,6 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
- theme_light_blue: dict[str, str] = {
3
+ from .other_classes import DotDict
4
+
5
+ theme_light_blue: dict[str, str] = DotDict({
4
6
  "popup_menu_fg": "#000000",
5
7
  "popup_menu_bg": "#FFFFFF",
6
8
  "popup_menu_highlight_bg": "#DCDEE0",
@@ -70,9 +72,9 @@ theme_light_blue: dict[str, str] = {
70
72
  "horizontal_scroll_not_active_fg": "#DADCE0",
71
73
  "vertical_scroll_pressed_fg": "#bdc1c6",
72
74
  "horizontal_scroll_pressed_fg": "#bdc1c6",
73
- }
75
+ })
74
76
 
75
- theme_light_green: dict[str, str] = {
77
+ theme_light_green: dict[str, str] = DotDict({
76
78
  "popup_menu_fg": "#000000",
77
79
  "popup_menu_bg": "#FFFFFF",
78
80
  "popup_menu_highlight_bg": "#DCDEE0",
@@ -142,9 +144,9 @@ theme_light_green: dict[str, str] = {
142
144
  "horizontal_scroll_not_active_fg": "#c1c1c1",
143
145
  "vertical_scroll_pressed_fg": "#707070",
144
146
  "horizontal_scroll_pressed_fg": "#707070",
145
- }
147
+ })
146
148
 
147
- theme_dark: dict[str, str] = {
149
+ theme_dark: dict[str, str] = DotDict({
148
150
  "popup_menu_fg": "white",
149
151
  "popup_menu_bg": "gray15",
150
152
  "popup_menu_highlight_bg": "gray40",
@@ -214,9 +216,9 @@ theme_dark: dict[str, str] = {
214
216
  "horizontal_scroll_not_active_fg": "#3b3b3d",
215
217
  "vertical_scroll_pressed_fg": "#a0a0a0",
216
218
  "horizontal_scroll_pressed_fg": "#a0a0a0",
217
- }
219
+ })
218
220
 
219
- theme_black: dict[str, str] = {
221
+ theme_black: dict[str, str] = DotDict({
220
222
  "popup_menu_fg": "white",
221
223
  "popup_menu_bg": "gray15",
222
224
  "popup_menu_highlight_bg": "gray40",
@@ -286,9 +288,9 @@ theme_black: dict[str, str] = {
286
288
  "horizontal_scroll_not_active_fg": "#3b3a39",
287
289
  "vertical_scroll_pressed_fg": "#a0a0a0",
288
290
  "horizontal_scroll_pressed_fg": "#a0a0a0",
289
- }
291
+ })
290
292
 
291
- theme_dark_blue: dict[str, str] = theme_black.copy()
293
+ theme_dark_blue: dict[str, str] = DotDict(theme_black.copy())
292
294
  theme_dark_blue["header_fg"] = "#6ACAD8"
293
295
  theme_dark_blue["header_selected_cells_fg"] = "#6ACAD8"
294
296
  theme_dark_blue["index_fg"] = "#6ACAD8"
@@ -303,7 +305,7 @@ theme_dark_blue["index_selected_rows_bg"] = "#6ACAD8"
303
305
  theme_dark_blue["table_selected_rows_border_fg"] = "#6ACAD8"
304
306
  theme_dark_blue["table_selected_columns_border_fg"] = "#6ACAD8"
305
307
 
306
- theme_dark_green: dict[str, str] = theme_black.copy()
308
+ theme_dark_green: dict[str, str] = DotDict(theme_black.copy())
307
309
  theme_dark_green["header_fg"] = "#66FFBF"
308
310
  theme_dark_green["header_selected_cells_fg"] = "#66FFBF"
309
311
  theme_dark_green["index_fg"] = "#66FFBF"
@@ -9,23 +9,28 @@ symbols_set: set[str] = set("""!#$%&'()*+,-./:;"@[]^_`{|}~>?= \\""")
9
9
  nonelike: set[object] = {None, "none", ""}
10
10
  truthy: set[object] = {True, "true", "t", "yes", "y", "on", "1", 1, 1.0}
11
11
  falsy: set[object] = {False, "false", "f", "no", "n", "off", "0", 0, 0.0}
12
+
12
13
  val_modifying_options: set[str, str, str] = {"checkbox", "format", "dropdown"}
13
- named_span_types = (
14
+
15
+ named_span_types: set[str] = {
14
16
  "format",
15
17
  "highlight",
16
18
  "dropdown",
17
19
  "checkbox",
18
20
  "readonly",
19
21
  "align",
20
- )
22
+ }
23
+
21
24
  emitted_events: set[str] = {
22
25
  "<<SheetModified>>",
23
26
  "<<SheetRedrawn>>",
24
27
  "<<SheetSelect>>",
25
28
  }
29
+
26
30
  backwards_compatibility_keys: dict[str, str] = {
27
31
  "font": "table_font",
28
32
  }
33
+
29
34
  text_editor_to_unbind: tuple[str] = (
30
35
  "<Alt-Return>",
31
36
  "<Alt-KP_Enter>",
@@ -36,6 +41,7 @@ text_editor_to_unbind: tuple[str] = (
36
41
  "<FocusOut>",
37
42
  "<Escape>",
38
43
  )
44
+
39
45
  scrollbar_options_keys: set[str] = {
40
46
  "vertical_scroll_background",
41
47
  "horizontal_scroll_background",
@@ -70,3 +76,47 @@ scrollbar_options_keys: set[str] = {
70
76
  "vertical_scroll_pressed_fg",
71
77
  "horizontal_scroll_pressed_fg",
72
78
  }
79
+
80
+ bind_add_columns: set[str] = {
81
+ "all",
82
+ "rc_insert_column",
83
+ "insert_column",
84
+ "add_column",
85
+ "insert_columns",
86
+ "add_columns",
87
+ "insert column",
88
+ "add column",
89
+ }
90
+
91
+ bind_del_columns: set[str] = {
92
+ "all",
93
+ "rc_delete_column",
94
+ "delete_column",
95
+ "del_column",
96
+ "delete_columns",
97
+ "del_columns",
98
+ "delete columns",
99
+ "del columns",
100
+ }
101
+
102
+ bind_add_rows: set[str] = {
103
+ "all",
104
+ "rc_insert_row",
105
+ "insert_row",
106
+ "add_row",
107
+ "insert_rows",
108
+ "add_rows",
109
+ "insert row",
110
+ "add row",
111
+ }
112
+
113
+ bind_del_rows: set[str] = {
114
+ "all",
115
+ "rc_delete_row",
116
+ "delete_row",
117
+ "del_row",
118
+ "delete_rows",
119
+ "del_rows",
120
+ "delete rows",
121
+ "del rows",
122
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tksheet
3
- Version: 7.1.10
3
+ Version: 7.1.12
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