spacr 0.2.67__tar.gz → 0.2.68__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 (120) hide show
  1. {spacr-0.2.67/spacr.egg-info → spacr-0.2.68}/PKG-INFO +4 -1
  2. {spacr-0.2.67 → spacr-0.2.68}/setup.py +4 -1
  3. {spacr-0.2.67 → spacr-0.2.68}/spacr/gui.py +35 -20
  4. {spacr-0.2.67 → spacr-0.2.68}/spacr/gui_utils.py +28 -17
  5. {spacr-0.2.67 → spacr-0.2.68/spacr.egg-info}/PKG-INFO +4 -1
  6. {spacr-0.2.67 → spacr-0.2.68}/spacr.egg-info/requires.txt +3 -0
  7. {spacr-0.2.67 → spacr-0.2.68}/LICENSE +0 -0
  8. {spacr-0.2.67 → spacr-0.2.68}/MANIFEST.in +0 -0
  9. {spacr-0.2.67 → spacr-0.2.68}/README.rst +0 -0
  10. {spacr-0.2.67 → spacr-0.2.68}/setup.cfg +0 -0
  11. {spacr-0.2.67 → spacr-0.2.68}/spacr/__init__.py +0 -0
  12. {spacr-0.2.67 → spacr-0.2.68}/spacr/__main__.py +0 -0
  13. {spacr-0.2.67 → spacr-0.2.68}/spacr/app_annotate.py +0 -0
  14. {spacr-0.2.67 → spacr-0.2.68}/spacr/app_classify.py +0 -0
  15. {spacr-0.2.67 → spacr-0.2.68}/spacr/app_make_masks.py +0 -0
  16. {spacr-0.2.67 → spacr-0.2.68}/spacr/app_mask.py +0 -0
  17. {spacr-0.2.67 → spacr-0.2.68}/spacr/app_measure.py +0 -0
  18. {spacr-0.2.67 → spacr-0.2.68}/spacr/app_sequencing.py +0 -0
  19. {spacr-0.2.67 → spacr-0.2.68}/spacr/app_umap.py +0 -0
  20. {spacr-0.2.67 → spacr-0.2.68}/spacr/core.py +0 -0
  21. {spacr-0.2.67 → spacr-0.2.68}/spacr/deep_spacr.py +0 -0
  22. {spacr-0.2.67 → spacr-0.2.68}/spacr/gui_core.py +0 -0
  23. {spacr-0.2.67 → spacr-0.2.68}/spacr/gui_elements.py +0 -0
  24. {spacr-0.2.67 → spacr-0.2.68}/spacr/io.py +0 -0
  25. {spacr-0.2.67 → spacr-0.2.68}/spacr/logger.py +0 -0
  26. {spacr-0.2.67 → spacr-0.2.68}/spacr/measure.py +0 -0
  27. {spacr-0.2.67 → spacr-0.2.68}/spacr/plot.py +0 -0
  28. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/OFL.txt +0 -0
  29. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/OpenSans-Italic-VariableFont_wdth,wght.ttf +0 -0
  30. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/OpenSans-VariableFont_wdth,wght.ttf +0 -0
  31. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/README.txt +0 -0
  32. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans-Bold.ttf +0 -0
  33. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans-BoldItalic.ttf +0 -0
  34. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans-ExtraBold.ttf +0 -0
  35. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans-ExtraBoldItalic.ttf +0 -0
  36. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans-Italic.ttf +0 -0
  37. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans-Light.ttf +0 -0
  38. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans-LightItalic.ttf +0 -0
  39. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans-Medium.ttf +0 -0
  40. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans-MediumItalic.ttf +0 -0
  41. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans-Regular.ttf +0 -0
  42. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans-SemiBold.ttf +0 -0
  43. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans-SemiBoldItalic.ttf +0 -0
  44. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Bold.ttf +0 -0
  45. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_Condensed-BoldItalic.ttf +0 -0
  46. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBold.ttf +0 -0
  47. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf +0 -0
  48. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Italic.ttf +0 -0
  49. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Light.ttf +0 -0
  50. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_Condensed-LightItalic.ttf +0 -0
  51. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Medium.ttf +0 -0
  52. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_Condensed-MediumItalic.ttf +0 -0
  53. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Regular.ttf +0 -0
  54. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBold.ttf +0 -0
  55. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBoldItalic.ttf +0 -0
  56. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Bold.ttf +0 -0
  57. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-BoldItalic.ttf +0 -0
  58. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBold.ttf +0 -0
  59. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf +0 -0
  60. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Italic.ttf +0 -0
  61. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Light.ttf +0 -0
  62. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-LightItalic.ttf +0 -0
  63. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Medium.ttf +0 -0
  64. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-MediumItalic.ttf +0 -0
  65. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Regular.ttf +0 -0
  66. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBold.ttf +0 -0
  67. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf +0 -0
  68. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/abort.png +0 -0
  69. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/annotate.png +0 -0
  70. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/cellpose_all.png +0 -0
  71. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/cellpose_masks.png +0 -0
  72. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/classify.png +0 -0
  73. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/default.png +0 -0
  74. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/download.png +0 -0
  75. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/logo.pdf +0 -0
  76. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/logo_spacr.png +0 -0
  77. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/logo_spacr_1.png +0 -0
  78. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/make_masks.png +0 -0
  79. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/map_barcodes.png +0 -0
  80. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/mask.png +0 -0
  81. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/measure.png +0 -0
  82. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/ml_analyze.png +0 -0
  83. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/recruitment.png +0 -0
  84. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/regression.png +0 -0
  85. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/run.png +0 -0
  86. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/sequencing.png +0 -0
  87. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/settings.png +0 -0
  88. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/spacr_logo_rotation.gif +0 -0
  89. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/train_cellpose.png +0 -0
  90. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/icons/umap.png +0 -0
  91. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/models/cp/toxo_plaque_cyto_e25000_X1120_Y1120.CP_model +0 -0
  92. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/models/cp/toxo_plaque_cyto_e25000_X1120_Y1120.CP_model_settings.csv +0 -0
  93. {spacr-0.2.67 → spacr-0.2.68}/spacr/resources/models/cp/toxo_pv_lumen.CP_model +0 -0
  94. {spacr-0.2.67 → spacr-0.2.68}/spacr/sequencing.py +0 -0
  95. {spacr-0.2.67 → spacr-0.2.68}/spacr/settings.py +0 -0
  96. {spacr-0.2.67 → spacr-0.2.68}/spacr/sim.py +0 -0
  97. {spacr-0.2.67 → spacr-0.2.68}/spacr/sim_app.py +0 -0
  98. {spacr-0.2.67 → spacr-0.2.68}/spacr/timelapse.py +0 -0
  99. {spacr-0.2.67 → spacr-0.2.68}/spacr/utils.py +0 -0
  100. {spacr-0.2.67 → spacr-0.2.68}/spacr/version.py +0 -0
  101. {spacr-0.2.67 → spacr-0.2.68}/spacr.egg-info/SOURCES.txt +0 -0
  102. {spacr-0.2.67 → spacr-0.2.68}/spacr.egg-info/dependency_links.txt +0 -0
  103. {spacr-0.2.67 → spacr-0.2.68}/spacr.egg-info/entry_points.txt +0 -0
  104. {spacr-0.2.67 → spacr-0.2.68}/spacr.egg-info/top_level.txt +0 -0
  105. {spacr-0.2.67 → spacr-0.2.68}/tests/test_annotate_app.py +0 -0
  106. {spacr-0.2.67 → spacr-0.2.68}/tests/test_core.py +0 -0
  107. {spacr-0.2.67 → spacr-0.2.68}/tests/test_gui_classify_app.py +0 -0
  108. {spacr-0.2.67 → spacr-0.2.68}/tests/test_gui_mask_app.py +0 -0
  109. {spacr-0.2.67 → spacr-0.2.68}/tests/test_gui_measure_app.py +0 -0
  110. {spacr-0.2.67 → spacr-0.2.68}/tests/test_gui_sim_app.py +0 -0
  111. {spacr-0.2.67 → spacr-0.2.68}/tests/test_gui_utils.py +0 -0
  112. {spacr-0.2.67 → spacr-0.2.68}/tests/test_io.py +0 -0
  113. {spacr-0.2.67 → spacr-0.2.68}/tests/test_mask_app.py +0 -0
  114. {spacr-0.2.67 → spacr-0.2.68}/tests/test_measure.py +0 -0
  115. {spacr-0.2.67 → spacr-0.2.68}/tests/test_plot.py +0 -0
  116. {spacr-0.2.67 → spacr-0.2.68}/tests/test_sim.py +0 -0
  117. {spacr-0.2.67 → spacr-0.2.68}/tests/test_timelapse.py +0 -0
  118. {spacr-0.2.67 → spacr-0.2.68}/tests/test_train.py +0 -0
  119. {spacr-0.2.67 → spacr-0.2.68}/tests/test_umap.py +0 -0
  120. {spacr-0.2.67 → spacr-0.2.68}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spacr
3
- Version: 0.2.67
3
+ Version: 0.2.68
4
4
  Summary: Spatial phenotype analysis of crisp screens (SpaCr)
5
5
  Home-page: https://github.com/EinarOlafsson/spacr
6
6
  Author: Einar Birnir Olafsson
@@ -47,6 +47,9 @@ Requires-Dist: gpustat<2.0,>=1.1.1
47
47
  Requires-Dist: pyautogui<1.0,>=0.9.54
48
48
  Requires-Dist: tables<4.0,>=3.8.0
49
49
  Requires-Dist: rapidfuzz<4.0,>=3.9
50
+ Requires-Dist: importlib-metadata<4.0,>=3.6
51
+ Requires-Dist: keyring<16.0,>=15.1
52
+ Requires-Dist: screeninfo<1.0,>=0.8.1
50
53
  Requires-Dist: huggingface-hub<0.25,>=0.24.0
51
54
  Provides-Extra: dev
52
55
  Requires-Dist: pytest<3.11,>=3.9; extra == "dev"
@@ -44,12 +44,15 @@ dependencies = [
44
44
  'pyautogui>=0.9.54,<1.0',
45
45
  'tables>=3.8.0,<4.0',
46
46
  'rapidfuzz>=3.9, <4.0',
47
+ 'importlib-metadata>=3.6, <4.0',
48
+ 'keyring>=15.1, <16.0',
49
+ 'screeninfo>=0.8.1,<1.0',
47
50
  'huggingface-hub>=0.24.0,<0.25'
48
51
  ]
49
52
 
50
53
  setup(
51
54
  name="spacr",
52
- version="0.2.67",
55
+ version="0.2.68",
53
56
  author="Einar Birnir Olafsson",
54
57
  author_email="olafsson@med.umich.com",
55
58
  description="Spatial phenotype analysis of crisp screens (SpaCr)",
@@ -3,6 +3,7 @@ from tkinter import ttk
3
3
  from multiprocessing import set_start_method
4
4
  from .gui_elements import spacrButton, create_menu_bar, set_dark_style
5
5
  from .gui_core import initiate_root
6
+ from screeninfo import get_monitors
6
7
 
7
8
  class MainApp(tk.Tk):
8
9
  def __init__(self, default_app=None):
@@ -12,12 +13,23 @@ class MainApp(tk.Tk):
12
13
  self.geometry("100x100")
13
14
  self.update_idletasks()
14
15
 
15
- # Expand the window to fullscreen
16
- self.attributes('-fullscreen', True)
16
+ # Get the current window position
17
17
  self.update_idletasks()
18
-
19
- width = self.winfo_screenwidth()
20
- height = self.winfo_screenheight()
18
+ x = self.winfo_x()
19
+ y = self.winfo_y()
20
+
21
+ # Find the monitor where the window is located
22
+ for monitor in get_monitors():
23
+ if monitor.x <= x < monitor.x + monitor.width and monitor.y <= y < monitor.y + monitor.height:
24
+ width = monitor.width
25
+ height = monitor.height
26
+ break
27
+ else:
28
+ monitor = get_monitors()[0]
29
+ width = monitor.width
30
+ height = monitor.height
31
+
32
+ # Set the window size to the dimensions of the monitor where it is located
21
33
  self.geometry(f"{width}x{height}")
22
34
  self.title("SpaCr GUI Collection")
23
35
  self.configure(bg='#333333') # Set window background to dark gray
@@ -36,7 +48,6 @@ class MainApp(tk.Tk):
36
48
  }
37
49
 
38
50
  self.additional_gui_apps = {
39
- #"Sequencing": (lambda frame: initiate_root(self, 'sequencing'), "Analyze sequencing data."),
40
51
  "Umap": (lambda frame: initiate_root(self, 'umap'), "Generate UMAP embeddings with datapoints represented as images."),
41
52
  "Train Cellpose": (lambda frame: initiate_root(self, 'train_cellpose'), "Train custom Cellpose models."),
42
53
  "ML Analyze": (lambda frame: initiate_root(self, 'ml_analyze'), "Machine learning analysis of data."),
@@ -58,32 +69,36 @@ class MainApp(tk.Tk):
58
69
  def create_widgets(self):
59
70
  create_menu_bar(self)
60
71
 
61
- self.canvas = tk.Canvas(self, highlightthickness=0)
62
- self.canvas.grid(row=0, column=0, sticky="nsew")
72
+ # Use a grid layout for centering
63
73
  self.grid_rowconfigure(0, weight=1)
64
74
  self.grid_columnconfigure(0, weight=1)
65
75
 
66
- self.content_frame = tk.Frame(self.canvas)
76
+ self.content_frame = tk.Frame(self)
67
77
  self.content_frame.grid(row=0, column=0, sticky="nsew")
78
+
79
+ # Center the content frame within the window
80
+ self.content_frame.grid_rowconfigure(0, weight=1)
81
+ self.content_frame.grid_columnconfigure(0, weight=1)
68
82
 
69
- self.canvas.create_window((self.winfo_screenwidth() // 2, self.winfo_screenheight() // 2), window=self.content_frame, anchor="center")
70
-
71
- set_dark_style(ttk.Style(), containers=[self.canvas, self.content_frame])
83
+ self.inner_frame = tk.Frame(self.content_frame)
84
+ self.inner_frame.grid(row=0, column=0)
85
+
86
+ set_dark_style(ttk.Style(), containers=[self.content_frame, self.inner_frame])
72
87
 
73
88
  self.create_startup_screen()
74
89
 
75
90
  def create_startup_screen(self):
76
- self.clear_frame(self.content_frame)
91
+ self.clear_frame(self.inner_frame)
77
92
 
78
- main_buttons_frame = tk.Frame(self.content_frame)
93
+ main_buttons_frame = tk.Frame(self.inner_frame)
79
94
  main_buttons_frame.pack(pady=10)
80
95
  set_dark_style(ttk.Style(), containers=[main_buttons_frame])
81
96
 
82
- additional_buttons_frame = tk.Frame(self.content_frame)
97
+ additional_buttons_frame = tk.Frame(self.inner_frame)
83
98
  additional_buttons_frame.pack(pady=10)
84
99
  set_dark_style(ttk.Style(), containers=[additional_buttons_frame])
85
100
 
86
- description_frame = tk.Frame(self.content_frame, height=70)
101
+ description_frame = tk.Frame(self.inner_frame, height=70)
87
102
  description_frame.pack(fill=tk.X, pady=10)
88
103
  description_frame.pack_propagate(False)
89
104
  set_dark_style(ttk.Style(), containers=[description_frame])
@@ -93,7 +108,7 @@ class MainApp(tk.Tk):
93
108
 
94
109
  logo_button = spacrButton(main_buttons_frame, text="SpaCr", command=lambda: self.load_app("logo_spacr", initiate_root), icon_name="logo_spacr", size=100, show_text=False)
95
110
  logo_button.grid(row=0, column=0, padx=5, pady=5)
96
- self.main_buttons[logo_button] = "SpaCr provides a flexible toolset to extract single-cell images and measurements from high-content cell painting experiments, train deep-learning models to classify cellular/subcellular phenotypes, simulate, and analyze pooled CRISPR-Cas9 imaging screens.."
111
+ self.main_buttons[logo_button] = "SpaCr provides a flexible toolset to extract single-cell images and measurements from high-content cell painting experiments, train deep-learning models to classify cellular/subcellular phenotypes, simulate, and analyze pooled CRISPR-Cas9 imaging screens."
97
112
 
98
113
  for i, (app_name, app_data) in enumerate(self.main_gui_apps.items()):
99
114
  app_func, app_desc = app_data
@@ -127,9 +142,9 @@ class MainApp(tk.Tk):
127
142
  self.description_label.update_idletasks()
128
143
 
129
144
  def load_app(self, app_name, app_func):
130
- self.clear_frame(self.canvas)
145
+ self.clear_frame(self.inner_frame)
131
146
 
132
- app_frame = tk.Frame(self.canvas)
147
+ app_frame = tk.Frame(self.inner_frame)
133
148
  app_frame.pack(fill=tk.BOTH, expand=True)
134
149
  set_dark_style(ttk.Style(), containers=[app_frame])
135
150
  app_func(app_frame)
@@ -144,4 +159,4 @@ def gui_app():
144
159
 
145
160
  if __name__ == "__main__":
146
161
  set_start_method('spawn', force=True)
147
- gui_app()
162
+ gui_app()
@@ -574,32 +574,43 @@ def setup_frame(parent_frame):
574
574
  size_dict = set_element_size()
575
575
  style_out = set_dark_style(style)
576
576
 
577
- settings_container = tk.PanedWindow(parent_frame, orient=tk.VERTICAL, width=size_dict['settings_width'], bg=style_out['bg_color'])
578
- vertical_container = tk.PanedWindow(parent_frame, orient=tk.VERTICAL, width=size_dict['panel_width'], bg=style_out['bg_color'])
579
- horizontal_container = tk.PanedWindow(parent_frame, orient=tk.HORIZONTAL, height=size_dict['panel_height'], width=size_dict['panel_width'], bg=style_out['bg_color'])
577
+ # Configure the main layout using PanedWindow
578
+ main_paned = tk.PanedWindow(parent_frame, orient=tk.HORIZONTAL, bg=style_out['bg_color'], bd=0, relief='flat')
579
+ main_paned.grid(row=0, column=0, sticky="nsew")
580
580
 
581
+ # Allow the main_paned to expand and fill the window
581
582
  parent_frame.grid_rowconfigure(0, weight=1)
582
- parent_frame.grid_rowconfigure(1, weight=0)
583
- parent_frame.grid_columnconfigure(0, weight=0)
584
- parent_frame.grid_columnconfigure(1, weight=1)
583
+ parent_frame.grid_columnconfigure(0, weight=1)
585
584
 
586
- settings_container.grid(row=0, column=0, rowspan=2, sticky="nsew")
587
- vertical_container.grid(row=0, column=1, sticky="nsew")
588
- horizontal_container.grid(row=1, column=1, sticky="ew")
585
+ # Create the settings container on the left
586
+ settings_container = tk.PanedWindow(main_paned, orient=tk.VERTICAL, width=size_dict['settings_width'], bg=style_out['bg_color'], bd=0, relief='flat')
587
+ main_paned.add(settings_container, minsize=100) # Allow resizing with a minimum size
589
588
 
590
- # Ensure settings_container maintains its width
591
- settings_container.grid_propagate(False)
592
- settings_container.update_idletasks()
589
+ # Create a right container frame to hold vertical and horizontal containers
590
+ right_frame = tk.Frame(main_paned, bg=style_out['bg_color'], bd=0, highlightthickness=0, relief='flat')
591
+ main_paned.add(right_frame, stretch="always")
593
592
 
594
- tk.Label(settings_container, text="Settings Container", bg=style_out['bg_color']).grid(row=0, column=0, sticky="ew")
593
+ # Configure the right_frame grid layout
594
+ right_frame.grid_rowconfigure(0, weight=1) # Vertical container expands
595
+ right_frame.grid_rowconfigure(1, weight=0) # Horizontal container at bottom
596
+ right_frame.grid_columnconfigure(0, weight=1)
595
597
 
596
- set_dark_style(style, parent_frame, [settings_container, vertical_container, horizontal_container])
597
-
598
- #size = style_out['font_size'] - 2
599
- #set_default_font(parent_frame, font_name=style_out['font_family'], size=size)
598
+ # Inside right_frame, add vertical_container at the top
599
+ vertical_container = tk.PanedWindow(right_frame, orient=tk.VERTICAL, bg=style_out['bg_color'], bd=0, relief='flat')
600
+ vertical_container.grid(row=0, column=0, sticky="nsew")
601
+
602
+ # Add horizontal_container aligned with the bottom of settings_container
603
+ horizontal_container = tk.PanedWindow(right_frame, orient=tk.HORIZONTAL, height=size_dict['panel_height'], bg=style_out['bg_color'], bd=0, relief='flat')
604
+ horizontal_container.grid(row=1, column=0, sticky="ew")
605
+
606
+ # Example content for settings_container
607
+ tk.Label(settings_container, text="Settings Container", bg=style_out['bg_color']).pack(fill=tk.BOTH, expand=True)
608
+
609
+ set_dark_style(style, parent_frame, [settings_container, vertical_container, horizontal_container, main_paned])
600
610
 
601
611
  return parent_frame, vertical_container, horizontal_container, settings_container
602
612
 
613
+
603
614
  def download_hug_dataset(q, vars_dict):
604
615
  dataset_repo_id = "einarolafsson/toxo_mito"
605
616
  settings_repo_id = "einarolafsson/spacr_settings"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spacr
3
- Version: 0.2.67
3
+ Version: 0.2.68
4
4
  Summary: Spatial phenotype analysis of crisp screens (SpaCr)
5
5
  Home-page: https://github.com/EinarOlafsson/spacr
6
6
  Author: Einar Birnir Olafsson
@@ -47,6 +47,9 @@ Requires-Dist: gpustat<2.0,>=1.1.1
47
47
  Requires-Dist: pyautogui<1.0,>=0.9.54
48
48
  Requires-Dist: tables<4.0,>=3.8.0
49
49
  Requires-Dist: rapidfuzz<4.0,>=3.9
50
+ Requires-Dist: importlib-metadata<4.0,>=3.6
51
+ Requires-Dist: keyring<16.0,>=15.1
52
+ Requires-Dist: screeninfo<1.0,>=0.8.1
50
53
  Requires-Dist: huggingface-hub<0.25,>=0.24.0
51
54
  Provides-Extra: dev
52
55
  Requires-Dist: pytest<3.11,>=3.9; extra == "dev"
@@ -36,6 +36,9 @@ gpustat<2.0,>=1.1.1
36
36
  pyautogui<1.0,>=0.9.54
37
37
  tables<4.0,>=3.8.0
38
38
  rapidfuzz<4.0,>=3.9
39
+ importlib-metadata<4.0,>=3.6
40
+ keyring<16.0,>=15.1
41
+ screeninfo<1.0,>=0.8.1
39
42
  huggingface-hub<0.25,>=0.24.0
40
43
 
41
44
  [dev]
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
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
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
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