Source code for kalmus.tkinter_windows.LoadStackWindow

""" LoadStackWindow Class """

import tkinter
from kalmus.tkinter_windows.gui_utils import update_graph, resource_path
import copy


[docs]class LoadStackWindow(): """ LoadStackWindow Class GUI window for user to load the barcode from the memory into the main window of the kalmus """ def __init__(self, barcode_stack, barcode_1, barcode_2, axes, canvas): """ Initialize :param barcode_stack: The dictionary that stores all the barcode on memory :param barcode_1: The barcode 1 :param barcode_2: The barcode 2 :param axes: The plotted figure axes in the main window :param canvas: The plotted figure canvas in the main window """ self.barcode_stack = barcode_stack self.barcode_1 = barcode_1 self.axes = axes self.canvas = canvas self.barcode_2 = barcode_2 # Initialize the window self.window = tkinter.Tk() self.window.iconbitmap(resource_path("kalmus_icon.ico")) self.window.wm_title("Barcodes on Memory Stack") # Set up the list box that shows all the barcode on memory using their keys in the dictionary self.listbox = tkinter.Listbox(self.window, selectmode=tkinter.SINGLE, width=65, height=20) self.listbox.grid(row=0, column=0) # List all the barcodes with their keys for barcode_names in self.barcode_stack.keys(): self.listbox.insert(tkinter.END, barcode_names) # Button to load the barcode from the memory self.button_load = tkinter.Button(master=self.window, text="Load Selected Barcode", command=self.load_stack) self.button_load.grid(row=3, column=0, sticky=tkinter.W) # Option variable that stores the position which the new barcode from json will replace with self.barcode_option = tkinter.StringVar(self.window) self.barcode_option.set("Barcode 1") # Radio buttons for the replaced barcode selection radio_barcode_1 = tkinter.Radiobutton(self.window, text="Barcode 1", variable=self.barcode_option, value="Barcode 1", anchor='w') radio_barcode_1.grid(row=1, column=0, sticky=tkinter.W) radio_barcode_1.select() radio_barcode_2 = tkinter.Radiobutton(self.window, text="Barcode 2", variable=self.barcode_option, value="Barcode 2", anchor='w') radio_barcode_2.grid(row=2, column=0, sticky=tkinter.W)
[docs] def load_stack(self): """ Load the barcode from the memory and use it to replace one of the displayed barcodes in the main window """ # Get the selection of the barcode on memory barcode_key = str(self.listbox.get(self.listbox.curselection())) # Get which barcode in the main window to replace which_barcode = self.barcode_option.get() # Replace with the barcode in the main window if which_barcode == "Barcode 1": self.barcode_1.__dict__ = copy.deepcopy(self.barcode_stack[barcode_key].__dict__.copy()) self.barcode_1.__class__ = self.barcode_stack[barcode_key].__class__ elif which_barcode == "Barcode 2": self.barcode_2.__dict__ = copy.deepcopy(self.barcode_stack[barcode_key].__dict__.copy()) self.barcode_2.__class__ = self.barcode_stack[barcode_key].__class__ # Clear the axes self.axes[0][0].cla() self.axes[1][0].cla() self.axes[0][1].cla() self.axes[1][1].cla() # Always plot the barcode with longer width below # if self.barcode_1.get_barcode().shape[1] > self.barcode_2.get_barcode().shape[1]: # temp = copy.deepcopy(self.barcode_1) # # self.barcode_1.__dict__ = self.barcode_2.__dict__.copy() # self.barcode_2.__dict__ = temp.__dict__.copy() # Update the graph/plotted figure in the main window update_graph(barcode_1=self.barcode_1, barcode_2=self.barcode_2, axes=self.axes) # Redraw the canvas self.canvas.draw() # Quit the window self.window.destroy()