spacr 0.1.81__py3-none-any.whl → 0.1.85__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
spacr/gui.py CHANGED
@@ -11,11 +11,12 @@ class MainApp(tk.Tk):
11
11
  super().__init__()
12
12
  width = self.winfo_screenwidth()
13
13
  height = self.winfo_screenheight()
14
- self.geometry(f"{width}x{height}")
14
+ self.geometry(f"{width}x{height}")
15
15
  self.title("SpaCr GUI Collection")
16
- self.configure(bg="black")
16
+
17
+ # Initialize style and apply dark style to the main window
17
18
  style = ttk.Style()
18
- set_dark_style(style)
19
+ self.color_settings = set_dark_style(style, parent_frame=self)
19
20
 
20
21
  self.main_gui_apps = {
21
22
  "Mask": (lambda frame: initiate_root(frame, 'mask'), "Generate cellpose masks for cells, nuclei and pathogen images."),
@@ -50,15 +51,18 @@ class MainApp(tk.Tk):
50
51
  create_menu_bar(self)
51
52
 
52
53
  # Create a canvas to hold the selected app and other elements
53
- self.canvas = tk.Canvas(self, bg="black", highlightthickness=0)
54
+ self.canvas = tk.Canvas(self, highlightthickness=0)
54
55
  self.canvas.grid(row=0, column=0, sticky="nsew")
55
56
  self.grid_rowconfigure(0, weight=1)
56
57
  self.grid_columnconfigure(0, weight=1)
57
58
 
58
59
  # Create a frame inside the canvas to hold the main content
59
- self.content_frame = tk.Frame(self.canvas, bg="black")
60
+ self.content_frame = tk.Frame(self.canvas)
60
61
  self.content_frame.pack(fill=tk.BOTH, expand=True)
61
62
 
63
+ # Apply dark style to canvas and content_frame
64
+ set_dark_style(ttk.Style(), containers=[self.canvas, self.content_frame])
65
+
62
66
  # Create startup screen with buttons for each main GUI app and drop-down for additional apps
63
67
  self.create_startup_screen()
64
68
 
@@ -66,19 +70,25 @@ class MainApp(tk.Tk):
66
70
  self.clear_frame(self.content_frame)
67
71
 
68
72
  # Create a frame for the logo and description
69
- logo_frame = tk.Frame(self.content_frame, bg="black")
73
+ logo_frame = tk.Frame(self.content_frame)
70
74
  logo_frame.pack(pady=20, expand=True)
75
+ set_dark_style(ttk.Style(), containers=[logo_frame])
71
76
 
72
77
  # Load the logo image
73
78
  if not self.load_logo(logo_frame):
74
- tk.Label(logo_frame, text="Logo not found", bg="black", fg="white", font=('Helvetica', 24)).pack(padx=10, pady=10)
79
+ logo_not_found = tk.Label(logo_frame, text="Logo not found", font=('Helvetica', 24))
80
+ logo_not_found.pack(padx=10, pady=10)
81
+ set_dark_style(ttk.Style(), widgets=[logo_not_found])
75
82
 
76
83
  # Add SpaCr text below the logo with padding for sharper text
77
- tk.Label(logo_frame, text="SpaCr", bg="black", fg="#008080", font=('Helvetica', 24)).pack(padx=10, pady=10)
84
+ spacr_label = tk.Label(logo_frame, text="SpaCr", fg=self.color_settings['active_color'], font=('Helvetica', 24))
85
+ spacr_label.pack(padx=10, pady=10)
86
+ set_dark_style(ttk.Style(), widgets=[spacr_label])
78
87
 
79
88
  # Create a frame for the buttons and descriptions
80
- buttons_frame = tk.Frame(self.content_frame, bg="black")
89
+ buttons_frame = tk.Frame(self.content_frame)
81
90
  buttons_frame.pack(pady=10, expand=True, padx=10)
91
+ set_dark_style(ttk.Style(), containers=[buttons_frame])
82
92
 
83
93
  for i, (app_name, app_data) in enumerate(self.main_gui_apps.items()):
84
94
  app_func, app_desc = app_data
@@ -87,17 +97,24 @@ class MainApp(tk.Tk):
87
97
  button = spacrButton(buttons_frame, text=app_name, command=lambda app_name=app_name, app_func=app_func: self.load_app(app_name, app_func), font=('Helvetica', 12))
88
98
  button.grid(row=i, column=0, pady=10, padx=10, sticky="w")
89
99
 
90
- description_label = tk.Label(buttons_frame, text=app_desc, bg="black", fg="white", wraplength=800, justify="left", font=('Helvetica', 12))
100
+ description_label = tk.Label(buttons_frame, text=app_desc, wraplength=800, justify="left", font=('Helvetica', 12))
91
101
  description_label.grid(row=i, column=1, pady=10, padx=10, sticky="w")
102
+ set_dark_style(ttk.Style(), widgets=[description_label])
92
103
 
93
104
  # Add drop-down menu for additional apps
94
- dropdown_frame = tk.Frame(buttons_frame, bg="black")
105
+ dropdown_frame = tk.Frame(buttons_frame)
95
106
  dropdown_frame.grid(row=len(self.main_gui_apps), column=0, columnspan=2, pady=20)
107
+ set_dark_style(ttk.Style(), containers=[dropdown_frame])
108
+
109
+ additional_apps_label = tk.Label(dropdown_frame, text="Additional Apps", font=('Helvetica', 12))
110
+ additional_apps_label.pack(side=tk.LEFT, padx=5)
111
+ set_dark_style(ttk.Style(), widgets=[additional_apps_label])
96
112
 
97
- tk.Label(dropdown_frame, text="Additional Apps", bg="black", fg="white", font=('Helvetica', 12)).pack(side=tk.LEFT, padx=5)
98
113
  self.additional_apps_var = tk.StringVar(value="Select an app")
99
114
  dropdown = ttk.Combobox(dropdown_frame, textvariable=self.additional_apps_var, values=list(self.additional_gui_apps.keys()))
100
115
  dropdown.pack(side=tk.LEFT, padx=5)
116
+ set_dark_style(ttk.Style(), widgets=[dropdown])
117
+
101
118
  load_button = spacrButton(dropdown_frame, text="Load", command=self.load_additional_app, font=('Helvetica', 12))
102
119
  load_button.pack(side=tk.LEFT, padx=5)
103
120
 
@@ -141,9 +158,10 @@ class MainApp(tk.Tk):
141
158
  new_height = int(screen_height // 4)
142
159
  logo_image = logo_image.resize((new_height, new_height), Image.Resampling.LANCZOS)
143
160
  logo_photo = ImageTk.PhotoImage(logo_image)
144
- logo_label = tk.Label(frame, image=logo_photo, bg="black")
161
+ logo_label = tk.Label(frame, image=logo_photo)
145
162
  logo_label.image = logo_photo # Keep a reference to avoid garbage collection
146
163
  logo_label.pack()
164
+ set_dark_style(ttk.Style(), widgets=[logo_label])
147
165
  return True
148
166
  except Exception as e:
149
167
  print(f"An error occurred while processing the logo image: {e}")
@@ -154,8 +172,9 @@ class MainApp(tk.Tk):
154
172
  self.clear_frame(self.content_frame)
155
173
 
156
174
  # Initialize the selected app
157
- app_frame = tk.Frame(self.content_frame, bg="black")
175
+ app_frame = tk.Frame(self.content_frame)
158
176
  app_frame.pack(fill=tk.BOTH, expand=True)
177
+ set_dark_style(ttk.Style(), containers=[app_frame])
159
178
  app_func(app_frame)
160
179
 
161
180
  def load_additional_app(self):
spacr/gui_core.py CHANGED
@@ -17,7 +17,7 @@ except AttributeError:
17
17
  pass
18
18
 
19
19
  from .settings import set_default_train_test_model, get_measure_crop_settings, set_default_settings_preprocess_generate_masks, get_analyze_reads_default_settings, set_default_umap_image_settings
20
- from .gui_elements import create_menu_bar, spacrButton, spacrLabel, spacrFrame, spacrDropdownMenu ,set_dark_style, set_default_font
20
+ from .gui_elements import spacrButton, spacrLabel, spacrFrame, spacrDropdownMenu ,set_dark_style, set_default_font
21
21
 
22
22
  # Define global variables
23
23
  q = None
@@ -271,17 +271,16 @@ def convert_settings_dict_for_gui(settings):
271
271
 
272
272
  def setup_settings_panel(vertical_container, settings_type='mask', window_dimensions=[500, 1000]):
273
273
  global vars_dict, scrollable_frame
274
- from .settings import descriptions, get_identify_masks_finetune_default_settings, set_default_analyze_screen, set_default_settings_preprocess_generate_masks, get_measure_crop_settings, set_default_train_test_model, get_analyze_reads_default_settings, set_default_umap_image_settings, generate_fields, get_perform_regression_default_settings, get_train_cellpose_default_settings, get_map_barcodes_default_settings, get_analyze_recruitment_default_settings, get_check_cellpose_models_default_settings
274
+ from .settings import get_identify_masks_finetune_default_settings, set_default_analyze_screen, set_default_settings_preprocess_generate_masks, get_measure_crop_settings, set_default_train_test_model, get_analyze_reads_default_settings, set_default_umap_image_settings, generate_fields, get_perform_regression_default_settings, get_train_cellpose_default_settings, get_map_barcodes_default_settings, get_analyze_recruitment_default_settings, get_check_cellpose_models_default_settings
275
275
 
276
- width = (window_dimensions[0])//6
276
+ width = (window_dimensions[0]) // 6
277
277
  height = window_dimensions[1]
278
278
 
279
- # Settings Frame
280
- settings_frame = tk.Frame(vertical_container, bg='black', height=height, width=width)
279
+ settings_frame = tk.Frame(vertical_container)
281
280
  vertical_container.add(settings_frame, stretch="always")
282
- settings_label = spacrLabel(settings_frame, text="Settings", background="black", foreground="white", anchor='center', justify='center', align="center")
281
+ settings_label = spacrLabel(settings_frame, text="Settings", anchor='center', justify='center', align="center")
283
282
  settings_label.grid(row=0, column=0, pady=10, padx=10)
284
- scrollable_frame = spacrFrame(settings_frame, bg='black', width=width)
283
+ scrollable_frame = spacrFrame(settings_frame)
285
284
  scrollable_frame.grid(row=1, column=0, sticky="nsew")
286
285
  settings_frame.grid_rowconfigure(1, weight=1)
287
286
  settings_frame.grid_columnconfigure(0, weight=1)
@@ -310,24 +309,18 @@ def setup_settings_panel(vertical_container, settings_type='mask', window_dimens
310
309
  settings = get_perform_regression_default_settings(settings={})
311
310
  elif settings_type == 'recruitment':
312
311
  settings = get_analyze_recruitment_default_settings(settings={})
313
- #elif settings_type == 'simulation':
314
- # settings = set_default_
315
- #elif settings_type == 'cellpose_dataset':
316
- # settings = set_default_
317
- #elif settings_type == 'plaques':
318
- # settings = set_default_
319
- #elif settings_type == 'cellpose_compare':
320
- # settings = set_default_
321
- #elif settings_type == 'vision_scores':
322
- # settings = set_default_
323
- #elif settings_type == 'vision_dataset':
324
- # settings = set_default_
325
312
  else:
326
313
  raise ValueError(f"Invalid settings type: {settings_type}")
327
314
 
328
-
329
315
  variables = convert_settings_dict_for_gui(settings)
330
316
  vars_dict = generate_fields(variables, scrollable_frame)
317
+
318
+ containers = [settings_frame]
319
+ widgets = [settings_label, scrollable_frame]
320
+
321
+ style = ttk.Style(vertical_container)
322
+ _ = set_dark_style(style, containers=containers, widgets=widgets)
323
+
331
324
  print("Settings panel setup complete")
332
325
  return scrollable_frame, vars_dict
333
326
 
@@ -335,45 +328,57 @@ def setup_plot_section(vertical_container):
335
328
  global canvas, canvas_widget
336
329
  plot_frame = tk.PanedWindow(vertical_container, orient=tk.VERTICAL)
337
330
  vertical_container.add(plot_frame, stretch="always")
338
- figure = Figure(figsize=(30, 4), dpi=100, facecolor='black')
331
+ figure = Figure(figsize=(30, 4), dpi=100)
339
332
  plot = figure.add_subplot(111)
340
333
  plot.plot([], []) # This creates an empty plot.
341
334
  plot.axis('off')
342
335
  canvas = FigureCanvasTkAgg(figure, master=plot_frame)
343
- canvas.get_tk_widget().configure(cursor='arrow', background='black', highlightthickness=0)
336
+ canvas.get_tk_widget().configure(cursor='arrow', highlightthickness=0)
344
337
  canvas_widget = canvas.get_tk_widget()
345
338
  plot_frame.add(canvas_widget, stretch="always")
346
339
  canvas.draw()
347
340
  canvas.figure = figure
341
+ # Set the figure and axes background to black
342
+ figure.patch.set_facecolor('black')
343
+ plot.set_facecolor('black')
344
+ containers = [plot_frame]
345
+ widgets = [canvas_widget]
346
+ style = ttk.Style(vertical_container)
347
+ _ = set_dark_style(style, containers=containers, widgets=widgets)
348
348
  return canvas, canvas_widget
349
349
 
350
350
  def setup_console(vertical_container):
351
351
  global console_output
352
- print("Setting up console frame")
353
- console_frame = tk.Frame(vertical_container, bg='black')
352
+ console_frame = tk.Frame(vertical_container)
354
353
  vertical_container.add(console_frame, stretch="always")
355
- console_label = spacrLabel(console_frame, text="Console", background="black", foreground="white", anchor='center', justify='center', align="center")
354
+ console_label = spacrLabel(console_frame, text="Console", anchor='center', justify='center', align="center")
356
355
  console_label.grid(row=0, column=0, pady=10, padx=10)
357
- console_output = scrolledtext.ScrolledText(console_frame, height=10, bg='black', fg='white', insertbackground='white')
356
+ console_output = scrolledtext.ScrolledText(console_frame, height=10)
358
357
  console_output.grid(row=1, column=0, sticky="nsew")
359
358
  console_frame.grid_rowconfigure(1, weight=1)
360
359
  console_frame.grid_columnconfigure(0, weight=1)
361
- print("Console setup complete")
360
+ containers = [console_frame]
361
+ widgets = [console_label, console_output]
362
+ style = ttk.Style(vertical_container)
363
+ _ = set_dark_style(style, containers=containers, widgets=widgets)
362
364
  return console_output
363
365
 
364
366
  def setup_progress_frame(vertical_container):
365
367
  global progress_output
366
- progress_frame = tk.Frame(vertical_container, bg='black')
368
+ progress_frame = tk.Frame(vertical_container)
367
369
  vertical_container.add(progress_frame, stretch="always")
368
- label_frame = tk.Frame(progress_frame, bg='black')
370
+ label_frame = tk.Frame(progress_frame)
369
371
  label_frame.grid(row=0, column=0, sticky="ew", pady=(5, 0), padx=10)
370
- progress_label = spacrLabel(label_frame, text="Processing: 0%", background="black", foreground="white", font=('Helvetica', 12), anchor='w', justify='left', align="left")
372
+ progress_label = spacrLabel(label_frame, text="Processing: 0%", font=('Helvetica', 12), anchor='w', justify='left', align="left")
371
373
  progress_label.grid(row=0, column=0, sticky="w")
372
- progress_output = scrolledtext.ScrolledText(progress_frame, height=10, bg='black', fg='white', insertbackground='white')
374
+ progress_output = scrolledtext.ScrolledText(progress_frame, height=10)
373
375
  progress_output.grid(row=1, column=0, sticky="nsew")
374
376
  progress_frame.grid_rowconfigure(1, weight=1)
375
377
  progress_frame.grid_columnconfigure(0, weight=1)
376
- print("Progress frame setup complete")
378
+ containers = [progress_frame, label_frame]
379
+ widgets = [progress_label, progress_output]
380
+ style = ttk.Style(vertical_container)
381
+ _ = set_dark_style(style, containers=containers, widgets=widgets)
377
382
  return progress_output
378
383
 
379
384
  def download_hug_dataset():
@@ -459,60 +464,70 @@ def download_dataset(repo_id, subfolder, local_dir=None, retries=5, delay=5):
459
464
 
460
465
  raise Exception("Failed to download files after multiple attempts.")
461
466
 
462
- def setup_button_section(horizontal_container, settings_type='mask', window_dimensions=[500, 1000], run=True, abort=True, download=True, import_btn=True):
467
+ def setup_button_section(horizontal_container, settings_type='mask', window_dimensions=[500, 1000], run=True, abort=True, download=True, import_btn=True):
463
468
  global button_frame, button_scrollable_frame, run_button, abort_button, download_dataset_button, import_button, q, fig_queue, vars_dict
464
469
  from .settings import descriptions
465
470
 
466
- width = (window_dimensions[0])//8
471
+ width = (window_dimensions[0]) // 8
467
472
  height = window_dimensions[1]
468
473
 
469
- button_frame = tk.Frame(horizontal_container, bg='black', height=height, width=width)
474
+ button_frame = tk.Frame(horizontal_container)
470
475
  horizontal_container.add(button_frame, stretch="always", sticky="nsew")
471
476
  button_frame.grid_rowconfigure(0, weight=0)
472
477
  button_frame.grid_rowconfigure(1, weight=1)
473
478
  button_frame.grid_columnconfigure(0, weight=1)
474
479
 
475
- categories_label = spacrLabel(button_frame, text="Categories", background="black", foreground="white", font=('Helvetica', 12), anchor='center', justify='center', align="center")
480
+ categories_label = spacrLabel(button_frame, text="Categories", anchor='center', justify='center', align="center")
476
481
  categories_label.grid(row=0, column=0, pady=10, padx=10)
477
- button_scrollable_frame = spacrFrame(button_frame, bg='black')
482
+ button_scrollable_frame = spacrFrame(button_frame)
478
483
  button_scrollable_frame.grid(row=1, column=0, sticky="nsew")
479
484
 
485
+ widgets = [categories_label, button_scrollable_frame.scrollable_frame]
486
+
480
487
  btn_col = 0
481
488
  btn_row = 1
482
-
489
+
483
490
  if run:
484
- run_button = spacrButton(button_scrollable_frame.scrollable_frame, text="Run", command=lambda: start_process(q, fig_queue, settings_type), font=('Helvetica', 12))
491
+ run_button = spacrButton(button_scrollable_frame.scrollable_frame, text="Run", command=lambda: start_process(q, fig_queue, settings_type))
485
492
  run_button.grid(row=btn_row, column=btn_col, pady=5, padx=5, sticky='ew')
493
+ widgets.append(run_button)
486
494
  btn_row += 1
487
495
 
488
496
  if abort and settings_type in ['mask', 'measure', 'classify', 'sequencing', 'umap']:
489
- abort_button = spacrButton(button_scrollable_frame.scrollable_frame, text="Abort", command=initiate_abort, font=('Helvetica', 12))
497
+ abort_button = spacrButton(button_scrollable_frame.scrollable_frame, text="Abort", command=initiate_abort)
490
498
  abort_button.grid(row=btn_row, column=btn_col, pady=5, padx=5, sticky='ew')
499
+ widgets.append(abort_button)
491
500
  btn_row += 1
492
501
 
493
502
  if download and settings_type in ['mask']:
494
- download_dataset_button = spacrButton(button_scrollable_frame.scrollable_frame, text="Download", command=download_hug_dataset, font=('Helvetica', 12))
503
+ download_dataset_button = spacrButton(button_scrollable_frame.scrollable_frame, text="Download", command=download_hug_dataset)
495
504
  download_dataset_button.grid(row=btn_row, column=btn_col, pady=5, padx=5, sticky='ew')
505
+ widgets.append(download_dataset_button)
496
506
  btn_row += 1
497
507
 
498
508
  if import_btn:
499
- import_button = spacrButton(button_scrollable_frame.scrollable_frame, text="Import", command=lambda: import_settings(settings_type), font=('Helvetica', 12))
509
+ import_button = spacrButton(button_scrollable_frame.scrollable_frame, text="Import", command=lambda: import_settings(settings_type))
500
510
  import_button.grid(row=btn_row, column=btn_col, pady=5, padx=5, sticky='ew')
511
+ widgets.append(import_button)
501
512
 
502
- # Call toggle_settings after vars_dict is initialized
503
513
  if vars_dict is not None:
504
514
  toggle_settings(button_scrollable_frame)
505
515
 
506
- # Description frame
507
- description_frame = tk.Frame(horizontal_container, bg='black', height=height, width=width)
516
+ description_frame = tk.Frame(horizontal_container)
508
517
  horizontal_container.add(description_frame, stretch="always", sticky="nsew")
509
- description_frame.grid_columnconfigure(0, weight=1) # Make the column stretch
510
- description_label = tk.Label(description_frame, text="Module Description", bg='black', fg='white', anchor='nw', justify='left', wraplength=width-50)
511
- description_label.grid(row=0, column=0, pady=50, padx=20, sticky='nsew') # Use sticky='nsew' to stretch the label
518
+ description_frame.grid_columnconfigure(0, weight=1)
519
+ description_label = tk.Label(description_frame, text="Module Description", anchor='nw', justify='left', wraplength=width - 50)
520
+ description_label.grid(row=0, column=0, pady=50, padx=20, sticky='nsew')
512
521
  description_text = descriptions.get(settings_type, "No description available for this module.")
513
522
  description_label.config(text=description_text)
514
523
 
515
- return button_scrollable_frame
524
+ containers = [button_frame, description_frame]
525
+ widgets.extend([description_label])
526
+
527
+ style = ttk.Style(horizontal_container)
528
+ _ = set_dark_style(style, containers=containers, widgets=widgets)
529
+
530
+ return button_frame, button_scrollable_frame, description_frame, description_label
516
531
 
517
532
  def hide_all_settings(vars_dict, categories):
518
533
  """
@@ -561,7 +576,6 @@ def toggle_settings(button_scrollable_frame):
561
576
  def on_category_select(selected_category):
562
577
  if selected_category == "Select Category":
563
578
  return
564
- #print(f"Selected category: {selected_category}")
565
579
  if selected_category in categories:
566
580
  toggle_category(categories[selected_category])
567
581
  if selected_category in active_categories:
@@ -569,7 +583,7 @@ def toggle_settings(button_scrollable_frame):
569
583
  else:
570
584
  active_categories.add(selected_category)
571
585
  category_dropdown.update_styles(active_categories)
572
- category_var.set("Select Category") # Reset dropdown text to "Select Category"
586
+ category_var.set("Select Category")
573
587
 
574
588
  category_var = tk.StringVar()
575
589
  non_empty_categories = [category for category, settings in categories.items() if any(setting in vars_dict for setting in settings)]
@@ -627,24 +641,29 @@ def set_globals(q_var, console_output_var, parent_frame_var, vars_dict_var, canv
627
641
  progress_label = progress_label_var
628
642
  fig_queue = fig_queue_var
629
643
 
644
+ def create_containers(parent_frame):
645
+ vertical_container = tk.PanedWindow(parent_frame, orient=tk.VERTICAL)
646
+ horizontal_container = tk.PanedWindow(vertical_container, orient=tk.HORIZONTAL)
647
+ settings_frame = tk.Frame(horizontal_container)
648
+ return vertical_container, horizontal_container, settings_frame
649
+
630
650
  def setup_frame(parent_frame):
631
651
  style = ttk.Style(parent_frame)
632
- set_dark_style(style)
652
+ vertical_container, horizontal_container, settings_frame = create_containers(parent_frame)
653
+ containers = [vertical_container, horizontal_container, settings_frame]
654
+
655
+ set_dark_style(style, parent_frame, containers)
633
656
  set_default_font(parent_frame, font_name="Helvetica", size=8)
634
- parent_frame.configure(bg='black')
635
- parent_frame.grid_rowconfigure(0, weight=1)
636
- parent_frame.grid_columnconfigure(0, weight=1)
637
- vertical_container = tk.PanedWindow(parent_frame, orient=tk.VERTICAL, bg='black')
657
+
638
658
  vertical_container.grid(row=0, column=0, sticky=tk.NSEW)
639
- horizontal_container = tk.PanedWindow(vertical_container, orient=tk.HORIZONTAL, bg='black')
640
659
  vertical_container.add(horizontal_container, stretch="always")
641
660
  horizontal_container.grid_columnconfigure(0, weight=1)
642
661
  horizontal_container.grid_columnconfigure(1, weight=1)
643
- settings_frame = tk.Frame(horizontal_container, bg='black')
644
662
  settings_frame.grid_rowconfigure(0, weight=0)
645
663
  settings_frame.grid_rowconfigure(1, weight=1)
646
664
  settings_frame.grid_columnconfigure(0, weight=1)
647
665
  horizontal_container.add(settings_frame, stretch="always", sticky="nsew")
666
+
648
667
  return parent_frame, vertical_container, horizontal_container
649
668
 
650
669
  def initiate_root(parent, settings_type='mask'):
spacr/gui_elements.py CHANGED
@@ -14,23 +14,97 @@ from collections import deque
14
14
  from skimage.draw import polygon, line
15
15
  from skimage.transform import resize
16
16
  from scipy.ndimage import binary_fill_holes, label
17
+ from tkinter import ttk, scrolledtext
18
+
19
+ def set_dark_style(style, parent_frame=None, containers=None, widgets=None, font_family="Arial", font_size=12, bg_color='black', fg_color='white', active_color='teal', inactive_color='gray'):
20
+
21
+ if active_color == 'teal':
22
+ active_color = '#008080'
23
+ if inactive_color == 'gray':
24
+ inactive_color = '#555555'
25
+ if bg_color == 'black':
26
+ bg_color = '#000000'
27
+ if fg_color == 'white':
28
+ fg_color = '#ffffff'
29
+
30
+ font_style = tkFont.Font(family=font_family, size=font_size)
31
+ style.configure('TEntry', padding='5 5 5 5', borderwidth=1, relief='solid', fieldbackground=bg_color, foreground=fg_color, font=font_style)
32
+ style.configure('TCombobox', fieldbackground=bg_color, background=bg_color, foreground=fg_color, selectbackground=bg_color, selectforeground=fg_color, font=font_style)
33
+ style.map('TCombobox', fieldbackground=[('readonly', bg_color)], foreground=[('readonly', fg_color)], selectbackground=[('readonly', bg_color)], selectforeground=[('readonly', fg_color)])
34
+ style.configure('Custom.TButton', background=bg_color, foreground=fg_color, bordercolor=fg_color, focusthickness=3, focuscolor=fg_color, font=(font_family, font_size))
35
+ style.map('Custom.TButton', background=[('active', active_color), ('!active', bg_color)], foreground=[('active', fg_color), ('!active', fg_color)], bordercolor=[('active', fg_color), ('!active', fg_color)])
36
+ style.configure('Custom.TLabel', padding='5 5 5 5', borderwidth=1, relief='flat', background=bg_color, foreground=fg_color, font=font_style)
37
+ style.configure('Spacr.TCheckbutton', background=bg_color, foreground=fg_color, indicatoron=False, relief='flat', font="15")
38
+ style.map('Spacr.TCheckbutton', background=[('selected', bg_color), ('active', bg_color)], foreground=[('selected', fg_color), ('active', fg_color)])
39
+ style.configure('TLabel', background=bg_color, foreground=fg_color, font=font_style)
40
+ style.configure('TFrame', background=bg_color)
41
+ style.configure('TPanedwindow', background=bg_color)
42
+ style.configure('TNotebook', background=bg_color, tabmargins=[2, 5, 2, 0])
43
+ style.configure('TNotebook.Tab', background=bg_color, foreground=fg_color, padding=[5, 5], font=font_style)
44
+ style.map('TNotebook.Tab', background=[('selected', active_color), ('active', active_color)], foreground=[('selected', fg_color), ('active', fg_color)])
45
+ style.configure('TButton', background=bg_color, foreground=fg_color, padding='5 5 5 5', font=font_style)
46
+ style.map('TButton', background=[('active', active_color), ('disabled', inactive_color)])
47
+ style.configure('Vertical.TScrollbar', background=bg_color, troughcolor=bg_color, bordercolor=bg_color)
48
+ style.configure('Horizontal.TScrollbar', background=bg_color, troughcolor=bg_color, bordercolor=bg_color)
49
+ style.configure('Custom.TLabelFrame', font=(font_family, font_size, 'bold'), background=bg_color, foreground='white', relief='solid', borderwidth=1)
50
+ style.configure('Custom.TLabelFrame.Label', background=bg_color, foreground='white', font=(font_family, font_size, 'bold'))
51
+
52
+ if parent_frame:
53
+ parent_frame.configure(bg=bg_color)
54
+ parent_frame.grid_rowconfigure(0, weight=1)
55
+ parent_frame.grid_columnconfigure(0, weight=1)
56
+
57
+ if containers:
58
+ for container in containers:
59
+ if isinstance(container, ttk.Frame):
60
+ container_style = ttk.Style()
61
+ container_style.configure(f'{container.winfo_class()}.TFrame', background=bg_color)
62
+ container.configure(style=f'{container.winfo_class()}.TFrame')
63
+ else:
64
+ container.configure(bg=bg_color)
65
+
66
+ if widgets:
67
+ for widget in widgets:
68
+ if isinstance(widget, (tk.Label, tk.Button, tk.Frame, ttk.LabelFrame, tk.Canvas)):
69
+ widget.configure(bg=bg_color)
70
+ if isinstance(widget, (tk.Label, tk.Button)):
71
+ widget.configure(fg=fg_color, font=(font_family, font_size))
72
+ if isinstance(widget, scrolledtext.ScrolledText):
73
+ widget.configure(bg=bg_color, fg=fg_color, insertbackground=fg_color)
74
+ if isinstance(widget, tk.OptionMenu):
75
+ widget.configure(bg=bg_color, fg=fg_color, font=(font_family, font_size))
76
+ menu = widget['menu']
77
+ menu.configure(bg=bg_color, fg=fg_color, font=(font_family, font_size))
78
+
79
+ return {'font_family':font_family, 'font_size':font_size, 'bg_color':bg_color, 'fg_color':fg_color, 'active_color':active_color, 'inactive_color':inactive_color}
80
+
81
+ def set_default_font(root, font_name="Arial", size=12):
82
+ default_font = (font_name, size)
83
+ root.option_add("*Font", default_font)
84
+ root.option_add("*TButton.Font", default_font)
85
+ root.option_add("*TLabel.Font", default_font)
86
+ root.option_add("*TEntry.Font", default_font)
17
87
 
18
88
  class spacrDropdownMenu(tk.OptionMenu):
19
89
  def __init__(self, parent, variable, options, command=None, **kwargs):
20
90
  self.variable = variable
21
91
  self.variable.set("Select Category")
22
92
  super().__init__(parent, self.variable, *options, command=command, **kwargs)
23
- self.config(bg='black', fg='white', font=('Helvetica', 12), indicatoron=0)
93
+ self.update_styles()
94
+
95
+ def update_styles(self, active_categories=None):
96
+ style = ttk.Style()
97
+ style_out = set_dark_style(style, widgets=[self])
24
98
  self.menu = self['menu']
25
- self.menu.config(bg='black', fg='white', font=('Helvetica', 12))
99
+ style_out = set_dark_style(style, widgets=[self.menu])
26
100
 
27
- def update_styles(self, active_categories):
28
- menu = self['menu']
29
- for idx, option in enumerate(self['menu'].entrycget(idx, "label") for idx in range(self['menu'].index("end")+1)):
30
- if option in active_categories:
31
- menu.entryconfig(idx, background='teal', foreground='white')
32
- else:
33
- menu.entryconfig(idx, background='black', foreground='white')
101
+ if active_categories is not None:
102
+ for idx in range(self.menu.index("end") + 1):
103
+ option = self.menu.entrycget(idx, "label")
104
+ if option in active_categories:
105
+ self.menu.entryconfig(idx, background=style_out['active_color'], foreground=style_out['fg_color'])
106
+ else:
107
+ self.menu.entryconfig(idx, background=style_out['bg_color'], foreground=style_out['fg_color'])
34
108
 
35
109
  class spacrCheckbutton(ttk.Checkbutton):
36
110
  def __init__(self, parent, text="", variable=None, command=None, *args, **kwargs):
@@ -39,6 +113,9 @@ class spacrCheckbutton(ttk.Checkbutton):
39
113
  self.variable = variable if variable else tk.BooleanVar()
40
114
  self.command = command
41
115
  self.configure(text=self.text, variable=self.variable, command=self.command, style='Spacr.TCheckbutton')
116
+ style = ttk.Style()
117
+ _ = set_dark_style(style, widgets=[self])
118
+
42
119
 
43
120
  class spacrFrame(ttk.Frame):
44
121
  def __init__(self, container, width=None, *args, bg='black', **kwargs):
@@ -65,25 +142,25 @@ class spacrFrame(ttk.Frame):
65
142
  self.grid_columnconfigure(0, weight=1)
66
143
  self.grid_columnconfigure(1, weight=0)
67
144
 
68
- for child in self.scrollable_frame.winfo_children():
69
- child.configure(bg='black')
145
+ style = ttk.Style()
146
+ _ = set_dark_style(style, containers=[self], widgets=[canvas, scrollbar, self.scrollable_frame])
70
147
 
71
148
  class spacrLabel(tk.Frame):
72
149
  def __init__(self, parent, text="", font=None, style=None, align="right", **kwargs):
73
- label_kwargs = {k: v for k, v in kwargs.items() if k in ['foreground', 'background', 'font', 'anchor', 'justify', 'wraplength']}
74
- for key in label_kwargs.keys():
75
- kwargs.pop(key)
76
- super().__init__(parent, **kwargs)
150
+ valid_kwargs = {k: v for k, v in kwargs.items() if k not in ['foreground', 'background', 'font', 'anchor', 'justify', 'wraplength']}
151
+ super().__init__(parent, **valid_kwargs)
152
+
77
153
  self.text = text
78
- self.kwargs = label_kwargs
79
154
  self.align = align
80
155
  screen_height = self.winfo_screenheight()
81
156
  label_height = screen_height // 50
82
157
  label_width = label_height * 10
83
- self.canvas = tk.Canvas(self, width=label_width, height=label_height, highlightthickness=0, bg=self.kwargs.get("background", "black"))
158
+ style_out = set_dark_style(ttk.Style())
159
+
160
+ self.canvas = tk.Canvas(self, width=label_width, height=label_height, highlightthickness=0, bg=style_out['bg_color'])
84
161
  self.canvas.grid(row=0, column=0, sticky="ew")
85
162
 
86
- self.font_style = font if font else tkFont.Font(family=self.kwargs.get("font_family", "Helvetica"), size=self.kwargs.get("font_size", 12), weight=tkFont.NORMAL)
163
+ self.font_style = font if font else tkFont.Font(family=style_out['font_family'], size=style_out['font_size'], weight=tkFont.NORMAL)
87
164
  self.style = style
88
165
 
89
166
  if self.align == "center":
@@ -95,13 +172,15 @@ class spacrLabel(tk.Frame):
95
172
 
96
173
  if self.style:
97
174
  ttk_style = ttk.Style()
98
- ttk_style.configure(self.style, **label_kwargs)
99
- self.label_text = ttk.Label(self.canvas, text=self.text, style=self.style, anchor=text_anchor, justify=text_anchor)
175
+ ttk_style.configure(self.style, font=self.font_style, background=style_out['bg_color'], foreground=style_out['fg_color'])
176
+ self.label_text = ttk.Label(self.canvas, text=self.text, style=self.style, anchor=text_anchor)
100
177
  self.label_text.pack(fill=tk.BOTH, expand=True)
101
178
  else:
102
179
  self.label_text = self.canvas.create_text(label_width // 2 if self.align == "center" else label_width - 5,
103
- label_height // 2, text=self.text, fill=self.kwargs.get("foreground", "white"),
180
+ label_height // 2, text=self.text, fill=style_out['fg_color'],
104
181
  font=self.font_style, anchor=anchor_value, justify=tk.RIGHT)
182
+
183
+ _ = set_dark_style(ttk.Style(), containers=[self], widgets=[self.canvas])
105
184
 
106
185
  def set_text(self, text):
107
186
  if self.style:
@@ -112,22 +191,23 @@ class spacrLabel(tk.Frame):
112
191
  class spacrButton(tk.Frame):
113
192
  def __init__(self, parent, text="", command=None, font=None, *args, **kwargs):
114
193
  super().__init__(parent, *args, **kwargs)
194
+
115
195
  self.text = text
116
196
  self.command = command
117
- #screen_height = self.winfo_screenheight()
118
- button_height = 50 #screen_height // 50
119
- button_width = 140 #button_height * 3
120
-
121
- #print(button_height, button_width)
197
+ button_height = 50
198
+ button_width = 140
199
+ style_out = set_dark_style(ttk.Style())
122
200
 
123
- # Increase the canvas size to accommodate the button and the rim
124
- self.canvas = tk.Canvas(self, width=button_width + 4, height=button_height + 4, highlightthickness=0, bg="black")
201
+ # Create the canvas first
202
+ self.canvas = tk.Canvas(self, width=button_width + 4, height=button_height + 4, highlightthickness=0, bg=style_out['bg_color'])
125
203
  self.canvas.grid(row=0, column=0)
126
204
 
127
- self.button_bg = self.create_rounded_rectangle(2, 2, button_width + 2, button_height + 2, radius=20, fill="#000000", outline="#ffffff")
205
+ # Apply dark style and get color settings
206
+ color_settings = set_dark_style(ttk.Style(), containers=[self], widgets=[self.canvas])
128
207
 
129
- self.font_style = font if font else tkFont.Font(family="Helvetica", size=12, weight=tkFont.NORMAL)
130
- self.button_text = self.canvas.create_text((button_width + 4) // 2, (button_height + 4) // 2, text=self.text, fill="white", font=self.font_style)
208
+ self.button_bg = self.create_rounded_rectangle(2, 2, button_width + 2, button_height + 2, radius=20, fill=color_settings['bg_color'], outline=color_settings['fg_color'])
209
+ self.font_style = font if font else tkFont.Font(family=color_settings['font_family'], size=color_settings['font_size'], weight=tkFont.NORMAL)
210
+ self.button_text = self.canvas.create_text((button_width + 4) // 2, (button_height + 4) // 2, text=self.text, fill=color_settings['fg_color'], font=self.font_style)
131
211
 
132
212
  self.bind("<Enter>", self.on_enter)
133
213
  self.bind("<Leave>", self.on_leave)
@@ -136,11 +216,15 @@ class spacrButton(tk.Frame):
136
216
  self.canvas.bind("<Leave>", self.on_leave)
137
217
  self.canvas.bind("<Button-1>", self.on_click)
138
218
 
219
+ self.bg_color = color_settings['bg_color']
220
+ self.active_color = color_settings['active_color']
221
+ self.fg_color = color_settings['fg_color']
222
+
139
223
  def on_enter(self, event=None):
140
- self.canvas.itemconfig(self.button_bg, fill="#008080") # Teal color
224
+ self.canvas.itemconfig(self.button_bg, fill=self.active_color)
141
225
 
142
226
  def on_leave(self, event=None):
143
- self.canvas.itemconfig(self.button_bg, fill="#000000") # Black color
227
+ self.canvas.itemconfig(self.button_bg, fill=self.bg_color)
144
228
 
145
229
  def on_click(self, event=None):
146
230
  if self.command:
@@ -177,17 +261,20 @@ class spacrSwitch(ttk.Frame):
177
261
  self.text = text
178
262
  self.variable = variable if variable else tk.BooleanVar()
179
263
  self.command = command
180
- self.canvas = tk.Canvas(self, width=40, height=20, highlightthickness=0, bd=0, bg="black")
264
+ self.canvas = tk.Canvas(self, width=40, height=20, highlightthickness=0, bd=0)
181
265
  self.canvas.grid(row=0, column=1, padx=(10, 0))
182
266
  self.switch_bg = self.create_rounded_rectangle(2, 2, 38, 18, radius=9, outline="", fill="#fff")
183
- self.switch = self.canvas.create_oval(4, 4, 16, 16, outline="", fill="#800080") # Purple initially
184
- self.label = spacrLabel(self, text=self.text, background="black", foreground="white")
267
+ self.switch = self.canvas.create_oval(4, 4, 16, 16, outline="", fill="#800080")
268
+ self.label = spacrLabel(self, text=self.text)
185
269
  self.label.grid(row=0, column=0, padx=(0, 10))
186
270
  self.bind("<Button-1>", self.toggle)
187
271
  self.canvas.bind("<Button-1>", self.toggle)
188
272
  self.label.bind("<Button-1>", self.toggle)
189
273
  self.update_switch()
190
274
 
275
+ style = ttk.Style()
276
+ _ = set_dark_style(style, containers=[self], widgets=[self.canvas, self.label])
277
+
191
278
  def toggle(self, event=None):
192
279
  self.variable.set(not self.variable.get())
193
280
  self.animate_switch()
@@ -196,19 +283,19 @@ class spacrSwitch(ttk.Frame):
196
283
 
197
284
  def update_switch(self):
198
285
  if self.variable.get():
199
- self.canvas.itemconfig(self.switch, fill="#008080") # Teal
200
- self.canvas.coords(self.switch, 24, 4, 36, 16) # Move switch to the right
286
+ self.canvas.itemconfig(self.switch, fill="#008080")
287
+ self.canvas.coords(self.switch, 24, 4, 36, 16)
201
288
  else:
202
- self.canvas.itemconfig(self.switch, fill="#800080") # Purple
203
- self.canvas.coords(self.switch, 4, 4, 16, 16) # Move switch to the left
289
+ self.canvas.itemconfig(self.switch, fill="#800080")
290
+ self.canvas.coords(self.switch, 4, 4, 16, 16)
204
291
 
205
292
  def animate_switch(self):
206
293
  if self.variable.get():
207
294
  start_x, end_x = 4, 24
208
- final_color = "#008080" # Teal
295
+ final_color = "#008080"
209
296
  else:
210
297
  start_x, end_x = 24, 4
211
- final_color = "#800080" # Purple
298
+ final_color = "#800080"
212
299
 
213
300
  self.animate_movement(start_x, end_x, final_color)
214
301
 
@@ -217,7 +304,7 @@ class spacrSwitch(ttk.Frame):
217
304
  for i in range(start_x, end_x, step):
218
305
  self.canvas.coords(self.switch, i, 4, i + 12, 16)
219
306
  self.canvas.update()
220
- self.after(10) # Small delay for smooth animation
307
+ self.after(10)
221
308
  self.canvas.itemconfig(self.switch, fill=final_color)
222
309
 
223
310
  def get(self):
@@ -227,7 +314,7 @@ class spacrSwitch(ttk.Frame):
227
314
  self.variable.set(value)
228
315
  self.update_switch()
229
316
 
230
- def create_rounded_rectangle(self, x1, y1, x2, y2, radius=9, **kwargs): # Smaller radius for smaller switch
317
+ def create_rounded_rectangle(self, x1, y1, x2, y2, radius=9, **kwargs):
231
318
  points = [x1 + radius, y1,
232
319
  x1 + radius, y1,
233
320
  x2 - radius, y1,
@@ -265,17 +352,18 @@ class spacrToolTip:
265
352
  self.tooltip_window = tk.Toplevel(self.widget)
266
353
  self.tooltip_window.wm_overrideredirect(True)
267
354
  self.tooltip_window.wm_geometry(f"+{x}+{y}")
268
- self.tooltip_window.configure(bg='black')
269
- label = tk.Label(self.tooltip_window, text=self.text, background="#333333", foreground="white", relief='flat', borderwidth=0)
355
+ label = tk.Label(self.tooltip_window, text=self.text, relief='flat', borderwidth=0)
270
356
  label.grid(row=0, column=0, padx=5, pady=5)
271
357
 
358
+ style = ttk.Style()
359
+ _ = set_dark_style(style, containers=[self.tooltip_window], widgets=[label])
360
+
272
361
  def hide_tooltip(self, event):
273
362
  if self.tooltip_window:
274
363
  self.tooltip_window.destroy()
275
364
  self.tooltip_window = None
276
365
 
277
366
  class modify_masks:
278
-
279
367
  def __init__(self, root, folder_path, scale_factor):
280
368
  self.root = root
281
369
  self.folder_path = folder_path
@@ -1465,35 +1553,4 @@ def create_menu_bar(root):
1465
1553
  app_menu.add_separator()
1466
1554
  app_menu.add_command(label="Exit", command=root.quit)
1467
1555
  # Configure the menu for the root window
1468
- root.config(menu=menu_bar)
1469
-
1470
-
1471
- def set_dark_style(style):
1472
- font_style = tkFont.Font(family="Helvetica", size=24)
1473
- style.configure('TEntry', padding='5 5 5 5', borderwidth=1, relief='solid', fieldbackground='black', foreground='#ffffff', font=font_style)
1474
- style.configure('TCombobox', fieldbackground='black', background='black', foreground='#ffffff', selectbackground='black', selectforeground='#ffffff', font=font_style)
1475
- style.map('TCombobox', fieldbackground=[('readonly', 'black')], foreground=[('readonly', '#ffffff')], selectbackground=[('readonly', 'black')], selectforeground=[('readonly', '#ffffff')])
1476
- style.configure('Custom.TButton', background='black', foreground='white', bordercolor='white', focusthickness=3, focuscolor='white', font=('Helvetica', 12))
1477
- style.map('Custom.TButton', background=[('active', 'teal'), ('!active', 'black')], foreground=[('active', 'white'), ('!active', 'white')], bordercolor=[('active', 'white'), ('!active', 'white')])
1478
- style.configure('Custom.TLabel', padding='5 5 5 5', borderwidth=1, relief='flat', background='black', foreground='#ffffff', font=font_style)
1479
- style.configure('Spacr.TCheckbutton', background='black', foreground='#ffffff', indicatoron=False, relief='flat', font="15")
1480
- style.map('Spacr.TCheckbutton', background=[('selected', 'black'), ('active', 'black')], foreground=[('selected', '#ffffff'), ('active', '#ffffff')])
1481
- style.configure('TLabel', background='black', foreground='#ffffff', font=font_style)
1482
- style.configure('TFrame', background='black')
1483
- style.configure('TPanedwindow', background='black')
1484
- style.configure('TNotebook', background='black', tabmargins=[2, 5, 2, 0])
1485
- style.configure('TNotebook.Tab', background='black', foreground='#ffffff', padding=[5, 5], font=font_style)
1486
- style.map('TNotebook.Tab', background=[('selected', '#555555'), ('active', '#555555')], foreground=[('selected', '#ffffff'), ('active', '#ffffff')])
1487
- style.configure('TButton', background='black', foreground='#ffffff', padding='5 5 5 5', font=font_style)
1488
- style.map('TButton', background=[('active', '#555555'), ('disabled', '#333333')])
1489
- style.configure('Vertical.TScrollbar', background='black', troughcolor='black', bordercolor='black')
1490
- style.configure('Horizontal.TScrollbar', background='black', troughcolor='black', bordercolor='black')
1491
- style.configure('Custom.TLabelFrame', font=('Helvetica', 10, 'bold'), background='black', foreground='white', relief='solid', borderwidth=1)
1492
- style.configure('Custom.TLabelFrame.Label', background='black', foreground='white', font=('Helvetica', 10, 'bold'))
1493
-
1494
- def set_default_font(root, font_name="Helvetica", size=12):
1495
- default_font = (font_name, size)
1496
- root.option_add("*Font", default_font)
1497
- root.option_add("*TButton.Font", default_font)
1498
- root.option_add("*TLabel.Font", default_font)
1499
- root.option_add("*TEntry.Font", default_font)
1556
+ root.config(menu=menu_bar)
spacr/test_gui.py ADDED
File without changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spacr
3
- Version: 0.1.81
3
+ Version: 0.1.85
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
@@ -19,12 +19,12 @@ spacr/deep_spacr.py,sha256=ASBsN4JpHp_3S-91JUsB34IWTjTGPYI7jKV2qZnUR5M,37005
19
19
  spacr/foldseek.py,sha256=YIP1d4Ci6CeA9jSyiv-HTDbNmAmcSM9Y_DaOs7wYzLY,33546
20
20
  spacr/get_alfafold_structures.py,sha256=ehx_MQgb12k3hFecP6cYVlm5TLO8iWjgevy8ESyS3cw,3544
21
21
  spacr/graph_learning.py,sha256=1tR-ZxvXE3dBz1Saw7BeVFcrsUFu9OlUZeZVifih9eo,13070
22
- spacr/gui.py,sha256=OPIMDVVYyAKO3zJIrWkP_YIc9-SwQsVR2S7ynXu1wkQ,8901
22
+ spacr/gui.py,sha256=1zzB3IKhGh7YYfU4p3vuABFLEn3AI2nLbWJ-CnH7LCk,9734
23
23
  spacr/gui_2.py,sha256=ZAI5quQYbhQJ40vK0NCqU_UMSPLkpfeQpomBWUSM0fc,6946
24
24
  spacr/gui_annotate.py,sha256=ugBksLGOHdtOLlEuRyyc59TrkYKu3rDf8JxEgiBSVao,6536
25
25
  spacr/gui_classify_app.py,sha256=Zi15ryc1ocYitRF4kyxlC27XxGyzfSPdvj2d6ZrSh7E,8446
26
- spacr/gui_core.py,sha256=PmElJrKHtEGYKpGTGgryxxvUvOHMh-wUmhvuHnyI13w,31833
27
- spacr/gui_elements.py,sha256=b0GJCHyrgJFeqB_IdjkXqMbXeC1reiLyiQ6-MTf_UuQ,73305
26
+ spacr/gui_core.py,sha256=H_d_WVlGdMigAKlvG4xytFy1j8k7_EJDyR__OdSjBws,31846
27
+ spacr/gui_elements.py,sha256=RzHRN_oXoiOWC8t8mYPH9D2eHT0xx7iyebQxJ4dNOjI,75760
28
28
  spacr/gui_make_masks_app.py,sha256=tl4M4Q2WQgrrwjRBJVevxJxpNowqzPhWkdCOm2UfRbw,45053
29
29
  spacr/gui_make_masks_app_v2.py,sha256=X3izTBXdCZDlkVe-fbG-jmCQtcAbmK0OIivjyWaLhug,30576
30
30
  spacr/gui_mask_app.py,sha256=mhTl_XzXLFl8Tx3WYEMpdYB_qw9u5JJa0EdkvlcIzAE,10706
@@ -46,15 +46,16 @@ spacr/sequencing.py,sha256=fHZRnoMSxmhMdadkei3lUeBdckqFyptWdQyWsDW3aaU,83304
46
46
  spacr/settings.py,sha256=VkRJHdzDtfGn_F8sJ5rfK80blZhpy21djxLfQcnlhGA,65665
47
47
  spacr/sim.py,sha256=FveaVgBi3eypO2oVB5Dx-v0CC1Ny7UPfXkJiiRRodAk,71212
48
48
  spacr/sim_app.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ spacr/test_gui.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
50
  spacr/timelapse.py,sha256=KMYCgHzf9LTZe-lWl5mvH2EjbKRE6OhpwdY13wEumGc,39504
50
51
  spacr/utils.py,sha256=OQ8sSBH6VWx2xP_vh4ILJT71B46DFFhsq-Y6WxYdGhI,186891
51
52
  spacr/version.py,sha256=axH5tnGwtgSnJHb5IDhiu4Zjk5GhLyAEDRe-rnaoFOA,409
52
53
  spacr/models/cp/toxo_plaque_cyto_e25000_X1120_Y1120.CP_model,sha256=z8BbHWZPRnE9D_BHO0fBREE85c1vkltDs-incs2ytXQ,26566572
53
54
  spacr/models/cp/toxo_plaque_cyto_e25000_X1120_Y1120.CP_model_settings.csv,sha256=fBAGuL_B8ERVdVizO3BHozTDSbZUh1yFzsYK3wkQN68,420
54
55
  spacr/models/cp/toxo_pv_lumen.CP_model,sha256=2y_CindYhmTvVwBH39SNILF3rI3x9SsRn6qrMxHy3l0,26562451
55
- spacr-0.1.81.dist-info/LICENSE,sha256=SR-2MeGc6SCM1UORJYyarSWY_A-JaOMFDj7ReSs9tRM,1083
56
- spacr-0.1.81.dist-info/METADATA,sha256=E8m8oiUydIogb-0PipHqaIe-wden3HvcAcxSqkpqH9g,5050
57
- spacr-0.1.81.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
58
- spacr-0.1.81.dist-info/entry_points.txt,sha256=BMC0ql9aNNpv8lUZ8sgDLQMsqaVnX5L535gEhKUP5ho,296
59
- spacr-0.1.81.dist-info/top_level.txt,sha256=GJPU8FgwRXGzKeut6JopsSRY2R8T3i9lDgya42tLInY,6
60
- spacr-0.1.81.dist-info/RECORD,,
56
+ spacr-0.1.85.dist-info/LICENSE,sha256=SR-2MeGc6SCM1UORJYyarSWY_A-JaOMFDj7ReSs9tRM,1083
57
+ spacr-0.1.85.dist-info/METADATA,sha256=uAffhBMl-ibkrdDHadHFtwmw2MrN1cOHxIoLbe_Rpso,5050
58
+ spacr-0.1.85.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
59
+ spacr-0.1.85.dist-info/entry_points.txt,sha256=BMC0ql9aNNpv8lUZ8sgDLQMsqaVnX5L535gEhKUP5ho,296
60
+ spacr-0.1.85.dist-info/top_level.txt,sha256=GJPU8FgwRXGzKeut6JopsSRY2R8T3i9lDgya42tLInY,6
61
+ spacr-0.1.85.dist-info/RECORD,,
File without changes