jpuglia's picture
Update GUI title and button text for clarity in Protein Location Predictor
2491d7e
"""
Protein Location Predictor GUI
This module provides a Tkinter-based GUI for loading FASTA files
and running protein location prediction tools.
"""
import tkinter as tk
from tkinter import Menu, filedialog, messagebox
import torch
from src.my_utils import predict_with_prost, predict_with_esm
FASTA_FILE_PATH = None # Global or instance variable
def load_fasta_file():
"""
Opens a file dialog for the user to select a FASTA file and
stores the selected file path in a global variable.
If a file is selected, displays an information message with the file path.
If no file is selected, displays a warning message.
Uses:
- filedialog.askopenfilename for file selection.
- messagebox.showinfo and messagebox.showwarning for user feedback.
Global Variables:
FASTA_FILE_PATH (str): Path to the selected FASTA file.
"""
global FASTA_FILE_PATH # pylint: disable=global-statement
FASTA_FILE_PATH = filedialog.askopenfilename(
filetypes=[("FASTA files", "*.fasta *.fa")],
title="Select a FASTA file"
)
if FASTA_FILE_PATH:
messagebox.showinfo("File Loaded", f"Loaded file:\n{FASTA_FILE_PATH}")
else:
messagebox.showwarning("No file", "No file was selected.")
def run_prost():
"""
Runs the protein location prediction process.
Checks if a FASTA file path is provided. If not, displays an error message to the user.
If a FASTA file is loaded, proceeds to run the prediction using the PROST model.
Raises:
Shows a message box error if no FASTA file is loaded.
"""
if not FASTA_FILE_PATH:
messagebox.showerror("Error", "Please load a FASTA file first.")
return
predict_with_prost(FASTA_FILE_PATH)
torch.cuda.empty_cache()
def run_esm300():
"""
Runs the protein location prediction process.
Checks if a FASTA file path is provided. If not, displays an error message to the user.
If a FASTA file is loaded, proceeds to run the prediction using the PROST model.
Raises:
Shows a message box error if no FASTA file is loaded.
"""
if not FASTA_FILE_PATH:
messagebox.showerror("Error", "Please load a FASTA file first.")
return
predict_with_esm(fasta_path = FASTA_FILE_PATH,
model = 'esmc_300m')
torch.cuda.empty_cache()
def run_esm600():
"""
Runs the protein location prediction process.
Checks if a FASTA file path is provided. If not, displays an error message to the user.
If a FASTA file is loaded, proceeds to run the prediction using the PROST model.
Raises:
Shows a message box error if no FASTA file is loaded.
"""
if not FASTA_FILE_PATH:
messagebox.showerror("Error", "Please load a FASTA file first.")
return
predict_with_esm(fasta_path = FASTA_FILE_PATH,
model = 'esmc_600m')
torch.cuda.empty_cache()
def menu():
"""
Displays the main GUI menu for the Protein Tools application.
This function creates a Tkinter window with a menu bar containing 'File' and 'Help' menus,
and buttons for running protein prediction tools and exiting the application.
Menus:
- File: Options to load a FASTA file or close the application.
- Help: Options for welcome information and about dialog.
Buttons:
- Predict with Prost: Runs the Prost prediction tool.
- Predict with ESM C: Placeholder for ESM prediction functionality (not yet implemented).
- Exit: Closes the application.
"""
# root window
root = tk.Tk()
root.geometry('320x200')
root.title('Protein Location Predictor')
# create a menubar
menubar = Menu(root)
root.config(menu=menubar)
# create the file_menu
file_menu = Menu(menubar, tearoff=0)
file_menu.add_command(label='Load FASTA', command=load_fasta_file)
file_menu.add_command(label='Close', command=root.quit)
file_menu.add_separator()
menubar.add_cascade(label="File", menu=file_menu, underline=0)
# help menu
help_menu = Menu(menubar, tearoff=0)
help_menu.add_command(label='Welcome')
help_menu.add_command(label='About...')
menubar.add_cascade(label="Help", menu=help_menu, underline=0)
btn_prost = tk.Button(root, text="Predict with Prost T5",
command=run_prost) #Predict with Prost
btn_prost.pack(pady=5)
btn_esm300 = tk.Button(root, text="Predict with ESM C 300m",
command = run_esm300) #Predict with ESM C 300m
btn_esm300.pack(pady=5)
btn_esm300 = tk.Button(root, text="Predict with ESM C 600m",
command = run_esm600) #Predict with ESM C 600m
btn_esm300.pack(pady=5)
btn_exit = tk.Button(root, text="Exit", command=root.quit)
btn_exit.pack(pady=5)
root.mainloop()
if __name__ == "__main__":
menu()
# End-of-file (EOF)