From d6882a4fc1091bcd834ad13ade7bd394a746d264 Mon Sep 17 00:00:00 2001 From: dudered00 <88799553+dudered00@users.noreply.github.com> Date: Mon, 3 Feb 2025 11:11:35 -0600 Subject: [PATCH] This is a major overhaul to the save function, how new experiments save, and overall QOL improvements --- .../create_experiment/new_experiment_ui.py | 3 +-- .../create_experiment/summary_ui.py | 22 ++++++++++++++---- .../experiment/experiment_menu_ui.py | 3 ++- main.py | 17 ++++++++++++++ requirements.txt | Bin 117 -> 1570 bytes shared/file_utils.py | 22 +++++++++++++++++- 6 files changed, 58 insertions(+), 9 deletions(-) diff --git a/experiment_pages/create_experiment/new_experiment_ui.py b/experiment_pages/create_experiment/new_experiment_ui.py index 32a92366..8eac1a7a 100644 --- a/experiment_pages/create_experiment/new_experiment_ui.py +++ b/experiment_pages/create_experiment/new_experiment_ui.py @@ -63,8 +63,7 @@ def __init__(self, parent: CTk, menu_page: CTkFrame = None): self.species = CTkEntry(self.main_frame, width=140) self.measure_items = CTkEntry(self.main_frame, width=140) - self.measure_items.insert(0, 'Weight') - self.measure_items.configure(state='disabled') + self.measure_items.configure(state='normal') self.animal_num = CTkEntry(self.main_frame, width=110) self.group_num = CTkEntry(self.main_frame, width=110) diff --git a/experiment_pages/create_experiment/summary_ui.py b/experiment_pages/create_experiment/summary_ui.py index e6023e06..359186f0 100644 --- a/experiment_pages/create_experiment/summary_ui.py +++ b/experiment_pages/create_experiment/summary_ui.py @@ -26,7 +26,7 @@ def create_experiment(self): self.experiment.save_to_database(directory) if self.experiment.get_password(): password = self.experiment.get_password() - file = directory + '/' + self.experiment.get_name() + '.pmouser' + file = os.path.normpath(os.path.join(directory, self.experiment.get_name() + '.pmouser')) manager = PasswordManager(password) decrypted_data = manager.decrypt_file(file) temp_folder_name = "Mouser" @@ -40,14 +40,26 @@ def create_experiment(self): with open(temp_file_path, "wb") as temp_file: temp_file.write(decrypted_data) temp_file.seek(0) - root= self.winfo_toplevel() #pylint: disable= redefined-outer-name + root = self.winfo_toplevel() #pylint: disable= redefined-outer-name + # Set the global variables for file paths + import sys + module = sys.modules['__main__'] + setattr(module, 'CURRENT_FILE_PATH', file) + setattr(module, 'TEMP_FILE_PATH', temp_file.name) page = ExperimentMenuUI(root, temp_file.name) + raise_frame(page) else: - file = directory + '/' + self.experiment.get_name() + '.mouser' - root= self.winfo_toplevel() + file = os.path.normpath(os.path.join(directory, self.experiment.get_name() + '.mouser')) + print("FULL FILE NAME + DIRECTORY: " + file) + root = self.winfo_toplevel() + # Set the global variables for file paths + import sys + module = sys.modules['__main__'] + setattr(module, 'CURRENT_FILE_PATH', file) + setattr(module, 'TEMP_FILE_PATH', file) page = ExperimentMenuUI(root, file) - raise_frame(page) #pylint: disable=undefined-variable + raise_frame(page) #pylint: disable=undefined-variable class SummaryUI(MouserPage):# pylint: disable=undefined-variable '''Summary User Interface.''' diff --git a/experiment_pages/experiment/experiment_menu_ui.py b/experiment_pages/experiment/experiment_menu_ui.py index 60d493fb..57dd93f8 100644 --- a/experiment_pages/experiment/experiment_menu_ui.py +++ b/experiment_pages/experiment/experiment_menu_ui.py @@ -15,6 +15,7 @@ class ExperimentMenuUI(MouserPage): #pylint: disable= undefined-variable def __init__(self, parent: CTk, name: str, prev_page: ChangeableFrame = None, controller: SerialPortController = None): #pylint: disable= undefined-variable #Get name of file from file path + self.file_path = name # Store the full file path experiment_name = os.path.basename(name) experiment_name = os.path.splitext(experiment_name)[0] self.experiment = ExperimentDatabase(name) @@ -99,7 +100,7 @@ def disconnect_database(self): self.data_page.close_connection() self.cage_page.close_connection() self.rfid_page.close_connection() - + def delete_experiment(self, page: CTkFrame, name: str): '''Delete Experiment.''' diff --git a/main.py b/main.py index a8f18191..4f4b110a 100644 --- a/main.py +++ b/main.py @@ -122,6 +122,23 @@ def open_serial_port_setting(): SerialPortSetting("serial_port_preference.csv", rfid_serial_port_controller) # pylint: disable=unused-variable def save_file(): '''Command for the 'save file' option in menu bar.''' + global CURRENT_FILE_PATH, TEMP_FILE_PATH + + if CURRENT_FILE_PATH is None: + # If no file path is set (new experiment), prompt for save location + file_path = asksaveasfilename( + defaultextension=".mouser", + filetypes=[("Database files", ".mouser .pmouser")] + ) + if file_path: # Only proceed if user didn't cancel + CURRENT_FILE_PATH = file_path + else: + return + + # If TEMP_FILE_PATH is None, use CURRENT_FILE_PATH + if TEMP_FILE_PATH is None: + TEMP_FILE_PATH = CURRENT_FILE_PATH + print("Current", CURRENT_FILE_PATH) print("Temp", TEMP_FILE_PATH) diff --git a/requirements.txt b/requirements.txt index 213317fd134796cefb626726cd2de9dd3d0b476d..8f949210a8833ad89d7863053b112503b8f7e5e5 100644 GIT binary patch literal 1570 zcma)7O>f#j5S??R{uCmh5Sl{|Nv^F_DV2Jx3>aczFv2Djetg^a;kBWs%3?vDw=?g( znO*+;o<|n*$fJzUc*b!bqjpPk&_^9*kNDddu-w>xa^Se8Q6m|67flFdPE&H;%i{%sQ*hia-X%VkBF1m z7V8H5$un>BO@SkJ++xpAS$0wLu@6+a6pszQbLCiIrBh~=d|IIvYp`a8Y_%{GRGH#Q zDDrK!$O%(Gz zD%Th6W(L-ML(N^S=xEx>9&xAhR?sj&UHea$`aV&$QG0p6!Mc{#wd#!JoRt!> zQ`g-?PfEYPfHEpPY3E1`tbzQgKEr&oJ4fZAQ>^bCx*0|NwJI`2y z`QZr|$T?2P5%1^~6|o8@fP419QM)^OyZ8U+@p|7+orjC`Ejx$kV9&jYOUq;kHtd(X z?Hj28>lGMZT2z`?pQYD$k+%L!^A0qBI@VyPZ@B*C&)OPkZfbbpTZ+7{Z&*5)-&D7= y?l3#U8*HJT@TB@aN>jy~+DfR9u?8P|eyj8c-t(-d3G4fJ5`**)!1oiex5B?O1LTAN literal 117 zcmXYpF%rWd3