Debug following code: import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import pickle

class MRIProtocolsApp(tk.Tk):
    def init(self):
        super().init()
        self.title(‘MRI Protocols’)
        self.protocol_data_file = ‘protocols.pkl’

        self.init_gui()
        self.load_protocols()

    def init_gui(self):
        self.sequence_types = [‘T1’, ‘T2’, ‘PD’, ‘DWI’,
                            ‘SWI’, ‘T2 FLAIR’, ‘Other’]
        self.orientations = [‘Transverse’, ‘Sagittal’, ‘Coronal’, ‘Other’]

        self.main_frame = ttk.Frame(self)
        self.main_frame.grid(column=0, row=0, sticky=(tk.W, tk.N, tk.E, tk.S))
        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=1)

        # Protocol list frame
        self.protocol_list_frame = ttk.Frame(self.main_frame)
        self.protocol_list_frame.grid(column=0, row=0, padx=10, pady=10)

        ttk.Label(self.protocol_list_frame, text=‘Saved Protocols:’).grid(column=0, row=0)
        self.protocol_list = tk.Listbox(self.protocol_list_frame)
        self.protocol_list.grid(column=0, row=1, sticky=(tk.W, tk.N, tk.E, tk.S))
        self.protocol_list.bind(‘<<ListboxSelect>>’, self.update_protocol_view)

        # Add protocol button
        ttk.Button(self.protocol_list_frame, text=‘Add Protocol’, command=self.new_protocol_window).grid(column=0, row=2, pady=10)

        # Sequence protocol view frame
        self.protocol_view_frame = ttk.Frame(self.main_frame)
        self.protocol_view_frame.grid(column=1, row=0, padx=10, pady=10, sticky=(tk.W, tk.E, tk.N, tk.S))

        ttk.Label(self.protocol_view_frame, text=‘Protocol Name:’).grid(column=0, row=0, sticky=(tk.W))
        self.protocol_name_var = tk.StringVar()
        self.protocol_name_entry = ttk.Entry(self.protocol_view_frame, textvariable=self.protocol_name_var)
        self.protocol_name_entry.grid(column=1, row=0, sticky=(tk.W, tk.E))

        ttk.Label(self.protocol_view_frame, text=‘Sequences:’).grid(column=0, row=1, sticky=(tk.W))
        self.sequence_tree = ttk.Treeview(self.protocol_view_frame, height=8, columns=3)
        self.sequence_tree.grid(column=1, row=1, sticky=(tk.W, tk.E, tk.N, tk.S))
        self.sequence_tree.column(“#0”, width=0, stretch=tk.NO)
        self.sequence_tree.column(1, width=150, minwidth=100)
        self.sequence_tree.column(2, width=150, minwidth=100)
        self.sequence_tree.column(3, width=150, minwidth=100)
        self.sequence_tree.heading(1, text=‘Sequence Type’)
        self.sequence_tree.heading(2, text=‘Orientation’)
        self.sequence_tree.heading(3, text=‘Annotation’)

        # Save button
        ttk.Button(self.protocol_view_frame, text=‘Save Protocol’, command=self.save_protocol).grid(column=1, row=2, pady=10, sticky=(tk.E))

    def update_protocol_view(self, event=None):
        if self.protocol_list.curselection():
            selected_protocol_index = self.protocol_list.curselection()[0]
            protocol = self.protocols[selected_protocol_index]

            self.protocol_name_var.set(protocol[‘name’])

            self.sequence_tree.delete(*self.sequence_tree.get_children())
            for i, sequence_data in enumerate(protocol[‘sequences’]):
                self.sequence_tree.insert(‘’, ‘end’, text=str(i + 1),
                                          values=(sequence_data[‘type’], sequence_data[‘orientation’], sequence_data[‘annotation’]))

    def load_protocols(self):
        try:
            with open(self.protocol_data_file, ‘rb’) as file:
                self.protocols = pickle.load(file)
        except FileNotFoundError:
            self.protocols = []

        for protocol in self.protocols:
            self.protocol_list.insert(tk.END, protocol[‘name’])

    def save_protocols(self):
        with open(self.protocol_data_file, ‘wb’) as file:
            pickle.dump(self.protocols, file)

    def new_protocol_window(self):
        self.new_protocol_win = tk.Toplevel(self)
        self.new_protocol_win.title(‘New Protocol’)

        ttk.Label(self.new_protocol_win, text=‘Protocol Name:’).grid(column=0, row=0, padx=10, pady=(10, 0))
        new_name_var = tk.StringVar()
        ttk.Entry(self.new_protocol_win, textvariable=new_name_var).grid(column=1, row=0, padx=10, pady=(10, 0))

        ttk.Button(self.new_protocol_win, text=‘Add’, command=lambda: self.create_new_protocol(new_name_var.get())).grid(column=1, row=1, pady=10)

    def create_new_protocol(self, name):
        if not name.strip():
            messagebox.showerror(“Error”, “Protocol name cannot be empty.”)
            return

        new_protocol = {“name”: name, “sequences”: []}
        self.protocols.append(new_protocol)
        self.protocol_list.insert(tk.END, new_protocol[‘name’])

        self.new_protocol_win.destroy()

    def save_protocol(self):
        selected_protocol_index = self.protocol_list.curselection()[0]
        protocol = self.protocols[selected_protocol_index]

        protocol[‘name’] = self.protocol_name_var.get().strip()

        protocol[‘sequences’] = []
        for sequence in self.sequence_tree.get_children():
            sequence_data = self.sequence_tree.item(sequence)[‘values’]
            protocol[‘sequences’].append({
                ‘type’: sequence_data[0],
                ‘orientation’: sequence_data[1],
                ‘annotation’: sequence_data[2]
            })

        self.protocol_list.delete(selected_protocol_index)
        self.protocol_list.insert(selected_protocol_index, protocol[‘name’])

        self.save_protocols()

if name == ‘main’:
    app = MRIProtocolsApp()
    app.mainloop()