Source code for imzml_writer.ms_convert_gui

import tkinter as tk
from tkinter import ttk, filedialog
import os
import threading
import sys
import docker


from imzml_writer.utils import get_file_type

##Colors and FONTS
TEAL = "#2da7ad"
BEIGE = "#dbc076"
GREEN = "#22d10f"
FONT = ("HELVETICA", 18, 'bold')

[docs] def main(tgt_dir:str=None): """**Experimental** - Provides a Mac GUI for MSConvert as a wrapper around the msconvert Docker image. :param tgt_dir: (optional) Initial directory for the GUI to open in.""" def get_path(): """No arguments, prompts the user via dialog box for the directory containing the data to be processed. Will call populate_list() method to show files in the UI listbox""" global FILE_TYPE directory = filedialog.askdirectory(initialdir=os.getcwd()) if directory: CD_entry.delete(0,tk.END) CD_entry.insert(0,directory) populate_list(directory) #FILE_TYPE = get_file_types(directory) def populate_list(dir:str): """takes an argument dir and populates the UI listbox based on its contents dir: pathname for active directory as a string""" file_list.delete(0,tk.END) files = os.listdir(dir) files.sort() ticker = 0 for file in files: if not file.startswith("."): file_list.insert(ticker,file) ticker+=1 def call_msconvert(): sl = "/" path = CD_entry.get() if "win" in sys.platform and sys.platform != "darwin": print("This GUI is for Mac/Linux, please use the MSConvert GUI from Proteowizard for PCs") else: DOCKER_IMAGE = "chambm/pwiz-skyline-i-agree-to-the-vendor-licenses" client = docker.from_env() client.images.pull(DOCKER_IMAGE) working_directory = path file_type = get_file_type(path) vol = {working_directory: {'bind': fr"{sl}{DOCKER_IMAGE}{sl}data", 'mode': 'rw'}} comm = fr"wine msconvert {sl}{DOCKER_IMAGE}{sl}data{sl}*.{file_type} --zlib=off --mzML --64 --outdir {sl}{DOCKER_IMAGE}{sl}data --filter '"'peakPicking true 1-'"' --simAsSpectra --srmAsSpectra" print(comm) comm = fr"wine msconvert {sl}{DOCKER_IMAGE}{sl}data{sl}*.{file_type} --mzML --64 --outdir {sl}{DOCKER_IMAGE}{sl}data --filter '"'peakPicking true 1-'"'" if zlib.get(): comm = comm + " --zlib=off" if SIM_as_spectra.get(): comm = comm + " --simAsSpectra" if SRM_as_spectra.get(): comm = comm + " --srmAsSpectra" env_vars = {"WINEDEBUG": "-all"} print(comm) client.containers.run( image=DOCKER_IMAGE, environment=env_vars, volumes = vol, command=comm, working_dir=working_directory, auto_remove=True, detach=True ) window_msconvert = tk.Tk() window_msconvert.title("MAC - msConvert GUI") window_msconvert.config(padx=5,pady=5,bg=TEAL) style = ttk.Style() style.theme_use('clam') ##Choose Directory Button CD_button = tk.Button(window_msconvert,text="Select Folder",bg=TEAL,highlightbackground=TEAL,command=get_path) CD_button.grid(row=0,column=0) CD_entry = tk.Entry(window_msconvert,text="Enter Directory Here",highlightbackground=TEAL,background=BEIGE,fg="black",justify='center') CD_entry.grid(row=0,column=1) ##Processing buttons convert_mzML = tk.Button(window_msconvert,text="Convert to mzML",bg=TEAL,highlightbackground=TEAL,command=call_msconvert) convert_mzML.grid(row=3,column=4,columnspan=3) #Listbox for files in target folder file_list = tk.Listbox(window_msconvert,bg=BEIGE,fg="black",height=10,highlightcolor=TEAL,width=35,justify='left') file_list.grid(row=0,column=4,rowspan=3,columnspan=3) zlib = tk.BooleanVar(window_msconvert) zlib_check = tk.Checkbutton(window_msconvert,text="zlib compression?",bg=TEAL,font=FONT,var=zlib) zlib_check.grid(row=1,column=0,columnspan=2) SIM_as_spectra = tk.BooleanVar(window_msconvert) SIM_check = tk.Checkbutton(window_msconvert,text="SIM as spectra?",bg=TEAL,font=FONT,var=SIM_as_spectra) SIM_check.grid(row=2,column=0,columnspan=2) SRM_as_spectra = tk.BooleanVar(window_msconvert) SRM_check = tk.Checkbutton(window_msconvert,text="SRM as spectra?",bg=TEAL,font=FONT,var=SRM_as_spectra) SRM_check.grid(row=3,column=0,columnspan=2) window_msconvert.mainloop()
if __name__ == "__main__": try: main(sys.argv[1]) except: main()