Пример #1
0
class QRReturnMainWindow(Frame):

    def __init__(self, master):
        Frame.__init__(self, master)
        self.serial_num_internal = StringVar()
        self.master = master
        self.results = StringVar()
        self.__initUi()

    #===========================================================================
    # Initialize and reset GUI
    #===========================================================================
    def __initUi(self):
        self.master.title('Shine Production')
        self.pack(fill=BOTH, expand=1)

        Style().configure("TFrame", background="#333")

        #Status of Test frame
        self.status_frame = LabelFrame(self, text='Status', relief=RIDGE, width=800, height=500)
        self.status_frame.place(x=20, y=20)
        
        #QR SERIAL # Frame
        self.path_frame = LabelFrame(self, text='QR Serial Code', relief=RIDGE, height=60, width=235)
        self.path_frame.place(x=400, y=550)
        entry = Entry(self.path_frame, bd=5, textvariable=self.serial_num_internal)
        entry.place(x=50, y=5)

        #TEST RESULTS LABEL
        w = Label(self.status_frame, textvariable=self.results)
        w.place(x=50, y=50)

        #START Button
        self.start_button = Button(self, text="Start", command=self.start, height=4, width=20)
        self.start_button.place(x=100, y=550)

        # Initialize the DUT
        initDUT()

    def start(self):
        self.start_button.config(state=DISABLED)
        self.start_button.update()
        self.results.set("")
        self.__setStatusLabel(2)
        uiText = ""
        self.results.set(uiText)

        self.serial_num_internal.set("S123Z12345")
        serial_num_internal = "S123Z12345"
        # self.serial_num.set("FL11111111")
        # serial_num = "FL11111111"  
        print "Serial number (internal): %s" % serial_num_internal

        # Initialize the Agilent 34461
        instr = A34461(AGILENT_BASE_ADDRESS, AGILENT_SUB_ADDRESS)
        instr.setModeToCurrent()

        results = executeReturnTestSequence(self.serial_num_internal.get(), instr)

        # self.parseResults(results)
        self.__setStatusLabel(results)
        
        self.serial_num_internal.set("")
        self.start_button.config(state=ACTIVE)
        self.start_button.update()

    def parseResults(self, results):
        uiText = ''
        success = 1
        print results
        if results == -1:
            success = 3
            uiText += "Something wrong with connection to source meter."
        else:
            if results[SCAN_FAIL] == 1:
                success = 0
                uiText += "Couldn't find Shine \n"

            if results[CHECK_FW_FAIL] == 1:
                success = 0
                uiText += "Invalid firmware version. \n"
                
            if results[ACCEL_STREAM_FAIL] == 1:
                success = 0
                uiText += "Acceleromete data not correct. \n"

            if results[SN_DEFAULT_FAIL] == 1:
                success = 0
                uiText += "This serial # is 9876543210.\n"

            if results[SN_MISMATCH_FAIL] == 1:
                success = 0
                uiText += "Serial # scanned does not match internal (bt) serial #. \n"

            if results[TIMEOUT_FAIL] == 1:
                success = 0
                uiText += "Bluetooth connection timeout. \n"

            if results[AVG_CURRENT_FAIL] == 1:
                success = 0
                uiText += "Average operating current falls outside accepted range for this firmware. \n"

            if results[SN_DUPLICATE_FAIL] == 1:
                success = 0
                uiText += "This Shine is a duplicate serial number. \n"

            if results[RECENTLY_SYNCED_FAIL] == 1:
                success = 0
                uiText += "A Shine with this SN was synced in the past month. \n"

            if results[BATTERY_PLOT_FAIL] == 1:
                success = 0
                uiText += "Human determined battery plots failed."

            if success:
                uiText = "This Shine is in good condition!\n"

        self.results.set(uiText)
        self.__setStatusLabel(success)

    def __setStatusLabel(self, success):
        if success == 1:
            self.status_frame.config(text='SUCCESS', bg=STATUS_OK_COLOR)
        elif success == 2:
            self.status_frame.config(text='Status', bg='yellow')
        elif success == 3:
            self.status_frame.config(text='Something Wrong', bg='blue')
        else:
            self.status_frame.config(text='FAIL', bg=STATUS_ERROR_COLOR)
        self.update()
Пример #2
0
class view(Tk):
    def mkStringVar(self, s):
        R = StringVar()
        R.set(s)
        return R

    def mkLabel(self, f, T, r, c, rs=1, cs=1):
        if isinstance(T, type(StringVar())):
            R = Label(f, textvariable=T, relief=GROOVE, borderwidth=2)
        else:
            R = Label(f, text=T, relief=GROOVE, borderwidth=2)
        R.grid(row=r, column=c, rowspan=rs, columnspan=cs, sticky="wens")
        return R

    def mkLabelList(self, f, SV, r):
        R = []
        for i in range(len(SV)):
            R.append(self.mkLabel(f, SV[i], r, i + 1))
        return R

    def mkButton(self, f, t, r, c, rs=1, cs=1):
        R = Button(f, text=t)
        R.grid(row=r, column=c, rowspan=rs, columnspan=cs, sticky="wens")
        return R

# ===== HALT et cetera =========================================================

    def mkHaltArea(self, f):
        self.HALTframe = Frame(f)
        self.HALTframe.config(relief=GROOVE)
        self.HALTframe.config(borderwidth=2)

        self.HALTbutton = Button(self.HALTframe, text="HALT", width=10)
        self.READMEbutton = Button(self.HALTframe, text="README", width=10)

        self.HALTbutton.config(borderwidth=2, relief=GROOVE, fg="red")
        self.HALTbutton.config(command=self.quit)
        self.READMEbutton.config(borderwidth=2, relief=GROOVE, fg="red")

        self.HALTbutton.pack(side=LEFT, fill=BOTH)
        self.READMEbutton.pack(side=RIGHT, fill=BOTH)

        self.HALTframe.grid(row=0,
                            column=9,
                            rowspan=1,
                            columnspan=4,
                            sticky="wens")

# ==============================================================================

    def mkProgramControl(self, f):
        self.PROGRAMCONTROLframe = Frame(f)
        self.PROGRAMCONTROLframe.config(relief=GROOVE)
        self.PROGRAMCONTROLframe.config(borderwidth=2)

        self.runButton = Button(self.PROGRAMCONTROLframe, text="RUN", width=10)
        self.runButton.grid(row=0, column=0, sticky="wens", padx=29, pady=7)

        self.stepButton = Button(self.PROGRAMCONTROLframe,
                                 text="STEP",
                                 width=10)
        self.stepButton.grid(row=1, column=0, sticky="wens", padx=29, pady=5)

        self.noStepButton = Button(self.PROGRAMCONTROLframe,
                                   text="NOSTEP",
                                   width=10)
        self.noStepButton.grid(row=2, column=0, sticky="wens", padx=29, pady=7)

        self.PROGRAMCONTROLframe.grid(row=17,
                                      column=11,
                                      rowspan=6,
                                      columnspan=2,
                                      sticky="wens")

# ==============================================================================

    def getPGMfileName(self):
        options = {'filetypes': [('pgm files', '.pgm')]}
        f = askopenfilename(**options)
        g = f.split('/')
        self.filenameVar.set(g[len(g) - 1])
        return f

    def mkProgramLoad(self, f):
        self.PROGRAMLOADframe = Frame(f)
        self.PROGRAMLOADframe.config(relief=GROOVE)
        self.PROGRAMLOADframe.config(borderwidth=2)

        self.loadPGMbutton = Button(self.PROGRAMLOADframe, text="Load PGM")
        self.loadPGMbutton.config(width=14)
        self.loadPGMbutton.pack(side=LEFT, fill=BOTH, padx=20, pady=5)

        self.filenameVar = StringVar()
        self.filenameVar.set("*****.pgm")

        self.fileNameLabel = Label(self.PROGRAMLOADframe,
                                   textvariable=self.filenameVar)
        self.fileNameLabel.config(relief=GROOVE, borderwidth=2, width=17)
        self.fileNameLabel.pack(side=RIGHT, fill=BOTH, padx=20, pady=5)

        self.PROGRAMLOADframe.grid(row=15,
                                   column=9,
                                   rowspan=2,
                                   columnspan=4,
                                   sticky="wens")

# ==============================================================================

    def mkMemory(self, f):
        self.MEMORYframe = Frame(f)
        self.MEMORYframe.config(relief=GROOVE)
        self.MEMORYframe.config(borderwidth=2)

        E = Frame(self.MEMORYframe)

        self.CLEAR = self.mkButton(E, "ClearMem", 0, 0)
        self.RANDOM = self.mkButton(E, "RandomMem", 0, 1)
        self.READ = self.mkButton(E, "ReadMem", 1, 0)
        self.WRITE = self.mkButton(E, "WriteMem", 1, 1)
        self.BUSTOMEM = self.mkButton(E, "BusToMem", 2, 0, 1, 2)

        F = Frame(self.MEMORYframe)

        for i in Range8:
            L = Label(F, textvariable=self.MEMORY[i])
            L.config(relief=GROOVE,
                     borderwidth=2,
                     bg="black",
                     fg="yellow",
                     height=1)
            L.grid(row=0, column=i, sticky="wens", ipadx=5)

        E.pack(side=TOP)
        F.pack(side=BOTTOM)

        self.MEMORYframe.grid(row=18,
                              column=9,
                              rowspan=5,
                              columnspan=2,
                              sticky="wens")

# ==============================================================================

    def mkDataBus(self, f):
        self.DBframe = Frame(f)
        self.DBframe.config(relief=GROOVE)
        self.DBframe.config(borderwidth=2, bg="red")
        self.DBframe.grid(row=0, column=0, rowspan=1, \
                          columnspan=9, sticky="wens")

        self.databusLabel = Label(self.DBframe, text="Data\nBus", width=10)
        self.databusLabel.pack(side=LEFT)

        self.DATABUSbuttons = []
        for i in Range8:
            b = Button(self.DBframe, textvariable=self.DATABUS[i])
            b.pack(side=LEFT, fill=BOTH)
            self.DATABUSbuttons.append(b)

    def mkAddressBus(self, f):
        self.ABframe = Frame(f)
        self.ABframe.config(relief=GROOVE)
        self.ABframe.config(borderwidth=2, bg="red")
        self.ABframe.grid(row=26,
                          column=0,
                          rowspan=1,
                          columnspan=13,
                          sticky="wens")

        self.AddressBusLabel = Label(self.ABframe,
                                     text="Address\nBus",
                                     width=12)
        self.AddressBusLabel.pack(side=LEFT)

        self.ADDRESSBUSbuttons = []
        for i in Range16:
            b = Button(self.ABframe, textvariable=self.ADDRESSBUS[i])
            b.pack(side=LEFT, fill=BOTH, ipadx=2)
            self.ADDRESSBUSbuttons.append(b)

# ==============================================================================

    def mkALU(self, f):
        self.ALUframe = Frame(f)
        self.ALUframe.config(relief=GROOVE)
        self.ALUframe.config(borderwidth=2)

        self.mkFunctionChoice(self.ALUframe)
        self.mkStates(self.ALUframe)

        self.ALUframe.grid(row=23,
                           column=9,
                           rowspan=3,
                           columnspan=4,
                           sticky="wens")

    def mkFunctionChoice(self, f):
        self.FUNCTIONframe = Frame(f)
        self.FUNCTIONframe.config(relief=GROOVE)
        self.FUNCTIONframe.config(borderwidth=2)

        self.F0label = Label(self.FUNCTIONframe,
                             text="F0",
                             borderwidth=2,
                             relief=GROOVE)
        self.F0label.grid(row=0, column=0, sticky="wens", padx=5)

        self.F1label = Label(self.FUNCTIONframe,
                             text="F1",
                             borderwidth=2,
                             relief=GROOVE)
        self.F1label.grid(row=0, column=1, sticky="wens", padx=8)

        self.F2label = Label(self.FUNCTIONframe,
                             text="F2",
                             borderwidth=2,
                             relief=GROOVE)
        self.F2label.grid(row=0, column=2, sticky="wens", padx=5)

        self.FUNCTIONbuttons = []

        self.F0button = Button(self.FUNCTIONframe)
        self.F0button.config(textvariable=self.FUNCTION[0],
                             borderwidth=2,
                             relief=GROOVE)
        self.F1button = Button(self.FUNCTIONframe)
        self.F1button.config(textvariable=self.FUNCTION[1],
                             borderwidth=2,
                             relief=GROOVE)
        self.F2button = Button(self.FUNCTIONframe)
        self.F2button.config(textvariable=self.FUNCTION[2],
                             borderwidth=2,
                             relief=GROOVE)

        self.FUNCTIONbuttons.append(self.F0button)
        self.FUNCTIONbuttons.append(self.F1button)
        self.FUNCTIONbuttons.append(self.F2button)

        for i in Range3:
            self.FUNCTIONbuttons[i].grid(row=1,
                                         column=i,
                                         sticky="wens",
                                         padx=5)

        self.FUNCTIONframe.pack(side=LEFT, padx=8, pady=3)

    def mkStates(self, f):
        self.STATESframe = Frame(f)
        self.STATESframe.config(relief=GROOVE)
        self.STATESframe.config(borderwidth=2)

        self.CARRYtag = Label(self.STATESframe,
                              text=" carry ",
                              borderwidth=2,
                              relief=GROOVE)
        self.CARRYtag.grid(row=0, column=0, padx=5, pady=2, sticky="wens")

        self.ZEROtag = Label(self.STATESframe,
                             text="  zero ",
                             borderwidth=2,
                             relief=GROOVE)
        self.ZEROtag.grid(row=0, column=1, padx=5, pady=1, sticky="wens")

        self.SIGNtag = Label(self.STATESframe,
                             text="  sign ",
                             borderwidth=2,
                             relief=GROOVE)
        self.SIGNtag.grid(row=0, column=2, padx=5, pady=2, sticky="wens")

        self.CARRY = self.mkStringVar("0")
        self.ZERO = self.mkStringVar("0")
        self.SIGN = self.mkStringVar("0")

        self.CARRYlabel = Label(self.STATESframe,
                                textvariable=self.CARRY,
                                borderwidth=2,
                                relief=GROOVE)
        self.CARRYlabel.grid(row=1, column=0, padx=5, pady=2, sticky="wens")

        self.ZEROlabel = Label(self.STATESframe,
                               textvariable=self.ZERO,
                               borderwidth=2,
                               relief=GROOVE)
        self.ZEROlabel.grid(row=1, column=1, padx=5, pady=1, sticky="wens")

        self.SIGNlabel = Label(self.STATESframe,
                               textvariable=self.SIGN,
                               borderwidth=2,
                               relief=GROOVE)
        self.SIGNlabel.grid(row=1, column=2, padx=5, pady=2, sticky="wens")

        self.STATESframe.pack(side=RIGHT, padx=8, pady=3)

# ==============================================================================

    def mkTagLabels(self, f):
        self.ALabel = self.mkLabel(f, "A", 1, 0)
        self.BLabel = self.mkLabel(f, "B", 2, 0)
        self.BLabel.config(bg="black", fg="yellow")
        self.CLabel = self.mkLabel(f, "C", 3, 0)
        self.CLabel.config(bg="black", fg="yellow")
        self.DLabel = self.mkLabel(f, "D", 4, 0)
        self.M1Label = self.mkLabel(f, "M1", 5, 0)
        self.M2Label = self.mkLabel(f, "M2", 6, 0)
        self.XLabel = self.mkLabel(f, "X", 7, 0)
        self.YLabel = self.mkLabel(f, "Y", 8, 0)
        self.J1Label = self.mkLabel(f, "J1", 9, 0)
        self.J2Label = self.mkLabel(f, "J2", 10, 0)
        self.PC1Label = self.mkLabel(f, "PC1", 11, 0)
        self.PC2Label = self.mkLabel(f, "PC2", 12, 0)
        self.Inc1Label = self.mkLabel(f, "Inc1", 13, 0)
        self.Inc2Label = self.mkLabel(f, "Inc2", 14, 0)
        self.IncUnit1Label = self.mkLabel(f, "IncUnit1", 15, 0)
        self.IncUnit2Label = self.mkLabel(f, "IncUnit2", 16, 0)
        self.InstLabel = self.mkLabel(f, "Inst", 17, 0)
        self.addLabel = self.mkLabel(f, "ADD", 18, 0)
        self.incLabel = self.mkLabel(f, "INC", 19, 0)
        self.andLabel = self.mkLabel(f, "AND", 20, 0)
        self.orLabel = self.mkLabel(f, "OR", 21, 0)
        self.xorLabel = self.mkLabel(f, "XOR", 22, 0)
        self.notLabel = self.mkLabel(f, "NOT", 23, 0)
        self.shlLabel = self.mkLabel(f, "SHL", 24, 0)
        self.clrLabel = self.mkLabel(f, "CLR", 25, 0)

        self.functionTagLabelDictionary = { (0,0,0) : self.addLabel, \
                                 (0,0,1) : self.incLabel, \
                                 (0,1,0) : self.andLabel, \
                                 (0,1,1) : self.orLabel, \
                                 (1,0,0) : self.xorLabel, \
                                 (1,0,1) : self.notLabel, \
                                 (1,1,0) : self.shlLabel, \
                                 (1,1,1) : self.clrLabel \
                                 }

        for i in self.functionTagLabelDictionary.values():
            i.config(bg="black", fg="yellow")

# ==============================================================================

    def mkRegisterStringVars(self):
        self.FUNCTION = [self.mkStringVar("0") for unused_i in Range3]
        self.DATABUS = [self.mkStringVar("0") for unused_i in Range8]
        self.Inst = [self.mkStringVar("0") for unused_i in Range8]
        self.A = [self.mkStringVar("0") for unused_i in Range8]
        self.B = [self.mkStringVar("0") for unused_i in Range8]
        self.C = [self.mkStringVar("0") for unused_i in Range8]
        self.D = [self.mkStringVar("0") for unused_i in Range8]
        self.M1 = [self.mkStringVar("0") for unused_i in Range8]
        self.M2 = [self.mkStringVar("0") for unused_i in Range8]
        self.X = [self.mkStringVar("0") for unused_i in Range8]
        self.Y = [self.mkStringVar("0") for unused_i in Range8]
        self.J1 = [self.mkStringVar("0") for unused_i in Range8]
        self.J2 = [self.mkStringVar("0") for unused_i in Range8]
        self.PC1 = [self.mkStringVar("0") for unused_i in Range8]
        self.PC2 = [self.mkStringVar("0") for unused_i in Range8]
        self.Inc1 = [self.mkStringVar("0") for unused_i in Range8]
        self.Inc2 = [self.mkStringVar("0") for unused_i in Range8]
        self.IncUnit1 = [self.mkStringVar("0") for unused_i in Range8]
        self.IncUnit2 = [self.mkStringVar("0") for unused_i in Range8]
        self.Add = [self.mkStringVar("0") for unused_i in Range8]
        self.Inc = [self.mkStringVar("0") for unused_i in Range8]
        self.And = [self.mkStringVar("0") for unused_i in Range8]
        self.Or = [self.mkStringVar("0") for unused_i in Range8]
        self.Xor = [self.mkStringVar("0") for unused_i in Range8]
        self.Not = [self.mkStringVar("0") for unused_i in Range8]
        self.Shl = [self.mkStringVar("0") for unused_i in Range8]
        self.Clr = [self.mkStringVar("0") for unused_i in Range8]
        self.ADDRESSBUS = [self.mkStringVar("0") for unused_i in Range16]
        self.MEMORY = [self.mkStringVar("0") for unused_i in Range8]

# ==============================================================================

    def setRegisterLabelColor(self, L, bc, fc="black"):
        for i in L:
            i.config(bg=bc, fg=fc)

    def mkRegisterLabels(self, f):
        self.Alabels = self.mkLabelList(f, self.A, 1)
        self.setRegisterLabelColor(self.Alabels, "gray90")
        self.Blabels = self.mkLabelList(f, self.B, 2)
        self.setRegisterLabelColor(self.Blabels, "black", "yellow")
        self.Clabels = self.mkLabelList(f, self.C, 3)
        self.setRegisterLabelColor(self.Clabels, "black", "yellow")
        self.Dlabels = self.mkLabelList(f, self.D, 4)
        self.setRegisterLabelColor(self.Dlabels, "gray90")
        self.M1labels = self.mkLabelList(f, self.M1, 5)
        self.setRegisterLabelColor(self.M1labels, "gray90")
        self.M2labels = self.mkLabelList(f, self.M2, 6)
        self.setRegisterLabelColor(self.M2labels, "gray90")
        self.Xlabels = self.mkLabelList(f, self.X, 7)
        self.setRegisterLabelColor(self.Xlabels, "gray90")
        self.Ylabels = self.mkLabelList(f, self.Y, 8)
        self.setRegisterLabelColor(self.Ylabels, "gray90")

        self.J1labels = self.mkLabelList(f, self.J1, 9)
        self.J2labels = self.mkLabelList(f, self.J2, 10)
        self.PC1labels = self.mkLabelList(f, self.PC1, 11)
        self.PC2labels = self.mkLabelList(f, self.PC2, 12)

        self.Inc1labels = self.mkLabelList(f, self.Inc1, 13)
        self.setRegisterLabelColor(self.Inc1labels, "gray95")
        self.Inc2labels = self.mkLabelList(f, self.Inc2, 14)
        self.setRegisterLabelColor(self.Inc2labels, "gray95")

        self.IncUnit1labels = self.mkLabelList(f, self.IncUnit1, 15)
        self.setRegisterLabelColor(self.IncUnit1labels, "gray95")
        self.IncUnit2labels = self.mkLabelList(f, self.IncUnit2, 16)
        self.setRegisterLabelColor(self.IncUnit2labels, "gray95")

        self.Instlabels = self.mkLabelList(f, self.Inst, 17)

        self.addlabels = self.mkLabelList(f, self.Add, 18)
        self.setRegisterLabelColor(self.addlabels, "black", "red")
        self.inclabels = self.mkLabelList(f, self.Inc, 19)
        self.setRegisterLabelColor(self.inclabels, "black", "yellow")
        self.andlabels = self.mkLabelList(f, self.And, 20)
        self.setRegisterLabelColor(self.andlabels, "black", "yellow")
        self.orlabels = self.mkLabelList(f, self.Or, 21)
        self.setRegisterLabelColor(self.orlabels, "black", "yellow")
        self.xorlabels = self.mkLabelList(f, self.Xor, 22)
        self.setRegisterLabelColor(self.xorlabels, "black", "yellow")
        self.notlabels = self.mkLabelList(f, self.Not, 23)
        self.setRegisterLabelColor(self.notlabels, "black", "yellow")
        self.shllabels = self.mkLabelList(f, self.Shl, 24)
        self.setRegisterLabelColor(self.shllabels, "black", "yellow")
        self.clrlabels = self.mkLabelList(f, self.Clr, 25)
        self.setRegisterLabelColor(self.clrlabels, "black", "yellow")

        self.functionLabelsDictionary = { (0,0,0) : self.addlabels, \
                                 (0,0,1) : self.inclabels, \
                                 (0,1,0) : self.andlabels, \
                                 (0,1,1) : self.orlabels, \
                                 (1,0,0) : self.xorlabels, \
                                 (1,0,1) : self.notlabels, \
                                 (1,1,0) : self.shllabels, \
                                 (1,1,1) : self.clrlabels \
                                 }

# ===== Load & Select ==========================================================

    def mkLoad8Buttons(self, f):
        self.loadA = self.mkButton(f, "load A", 1, 9, 1, 2)
        self.loadB = self.mkButton(f, "load B", 2, 9, 1, 2)
        self.loadC = self.mkButton(f, "load C", 3, 9, 1, 2)
        self.loadD = self.mkButton(f, "load D", 4, 9, 1, 2)
        self.loadM1 = self.mkButton(f, "load M1", 5, 9, 1, 2)
        self.loadM2 = self.mkButton(f, "load M2", 6, 9, 1, 2)
        self.loadX = self.mkButton(f, "load X", 7, 9)
        self.loadY = self.mkButton(f, "load Y", 8, 9)
        self.loadJ1 = self.mkButton(f, "load J1", 9, 9, 1, 2)
        self.loadJ2 = self.mkButton(f, "load J2", 10, 9, 1, 2)

        self.loadInst = self.mkButton(f, "load Inst", 17, 9, 1, 2)

    def mkLoad16Buttons(self, f):
        self.loadXY = self.mkButton(f, "load XY", 7, 10, 2, 1)
        self.loadPC = self.mkButton(f, "load PC", 11, 9, 2, 2)
        self.loadINC = self.mkButton(f, "load INC", 13, 9, 2, 2)

    def mkSelect8Buttons(self, f):
        self.selectA = self.mkButton(f, "select A", 1, 11, 1, 2)
        self.selectB = self.mkButton(f, "select B", 2, 11, 1, 2)
        self.selectC = self.mkButton(f, "select C", 3, 11, 1, 2)
        self.selectD = self.mkButton(f, "select D", 4, 11, 1, 2)
        self.selectM1 = self.mkButton(f, "select M1", 5, 11)
        self.selectM2 = self.mkButton(f, "select M2", 6, 11)
        self.selectX = self.mkButton(f, "select X", 7, 11)
        self.selectY = self.mkButton(f, "select Y", 8, 11)

    def mkSelect16Buttons(self, f):
        self.selectM = self.mkButton(f, "select M", 5, 12, 2, 1)
        self.selectXY = self.mkButton(f, "select XY", 7, 12, 2, 1)
        self.selectJ = self.mkButton(f, "select J", 9, 11, 2, 2)
        self.selectPC = self.mkButton(f, "select PC", 11, 11, 2, 2)
        self.selectINC = self.mkButton(f, "select INC", 13, 11, 2, 2)

# ===== System Messages ========================================================

    def mkMessageArea(self, f):
        self.text = Text(f, height=36, width=64)
        self.text.configure(font=("Courier", 11, "bold"),
                            bg="black",
                            fg="green")
        self.scroll = Scrollbar(f, command=self.text.yview)
        self.text.configure(yscrollcommand=self.scroll.set)

        self.text.pack(side=LEFT, padx=3, pady=2)
        self.scroll.pack(side=RIGHT, fill=Y, padx=3, pady=2)

    def addText(self, text):
        self.text.insert(END, text + "\n")
        self.text.yview(END)

# ===== Initialization =========================================================

    def __init__(self):
        Tk.__init__(self)

        self.title("Virtual Machine")
        self.config(bg="blue")

        self.registers = LabelFrame(self, bg="blue")
        self.registers.config(relief=GROOVE)
        self.registers.config(borderwidth=2)
        self.registers.config(text="Virtual Machine: controls and states")
        self.registers.config(labelanchor="nw")
        self.registers.pack(side=LEFT, fill=BOTH)

        self.mkRegisterStringVars()

        self.mkTagLabels(self.registers)
        self.mkDataBus(self.registers)

        self.mkRegisterLabels(self.registers)

        self.mkLoad8Buttons(self.registers)
        self.mkLoad16Buttons(self.registers)
        self.mkSelect8Buttons(self.registers)
        self.mkSelect16Buttons(self.registers)

        self.mkAddressBus(self.registers)

        self.mkALU(self.registers)
        self.mkMemory(self.registers)
        self.mkProgramLoad(self.registers)
        self.mkProgramControl(self.registers)
        self.mkHaltArea(self.registers)

        self.messages = LabelFrame(self, bg="blue")
        self.messages.config(relief=GROOVE)
        self.messages.config(borderwidth=2)
        self.messages.config(text="Virtual Machine: system messages")
        self.messages.config(labelanchor="nw")
        self.messages.pack(side=RIGHT, fill=BOTH)

        self.mkMessageArea(self.messages)
Пример #3
0
    def initUI(self):

        self.parent.title("IAF CALC 0.01")
        self.pack(fill=BOTH, expand=1)

        self.configure(background='white')

        frameTOP = Frame(self)
        frameTOP.config(bg="white")
        frameTOP.pack(side=TOP)

        frameFILES = Frame(frameTOP)
        frameFILES.pack(side=LEFT, padx=10)

        # --- BUTTON FOR FILE 1 --- #
        frameF1 = LabelFrame(frameFILES,
                             text="Eyes open file:",
                             relief=FLAT,
                             borderwidth=1,
                             background="white")
        frameF1.pack(fill=X, expand=1)
        self.nameF1 = Entry(frameF1, width=50)
        self.nameF1.config(bg="lightgray")
        self.nameF1.pack(side=LEFT)
        self.nameF1.delete(0, END)
        self.nameF1.insert(0, "")
        self.buttonLoadFile1 = Button(frameF1,
                                      text="...",
                                      command=self.askOpenFile1)
        self.buttonLoadFile1.pack(side=LEFT, padx=5, pady=5)
        # ----------------------- #

        # --- BUTTON FOR FILE 2 --- #
        frameF2 = LabelFrame(frameFILES,
                             text="Eyes closed file:",
                             relief=FLAT,
                             borderwidth=1,
                             background="white")
        frameF2.pack(fill=X, expand=1)
        self.nameF2 = Entry(frameF2, width=50)
        self.nameF2.config(bg="lightgray")
        self.nameF2.pack(side=LEFT)
        self.nameF2.delete(0, END)
        self.nameF2.insert(0, "")
        self.buttonLoadFile2 = Button(frameF2,
                                      text="...",
                                      command=self.askOpenFile2)
        self.buttonLoadFile2.pack(side=LEFT, padx=5, pady=5)
        # ----------------------- #

        # --- BUTTON FOR FILE OUTPUT --- #
        frameO = LabelFrame(frameFILES,
                            text="Output directory:",
                            relief=FLAT,
                            borderwidth=1,
                            background="white")
        frameO.pack(fill=X, expand=1)
        self.nameO = Entry(frameO, width=50)
        self.nameO.config(bg="lightgray")
        self.nameO.pack(side=LEFT)
        self.nameO.delete(0, END)
        self.nameO.insert(0, "")
        self.buttonSelectOutput = Button(frameO,
                                         text="...",
                                         command=self.askOutputDirectory)
        self.buttonSelectOutput.pack(side=LEFT, padx=5, pady=5)
        # -------------------------------#
        # self.pack()
        # self.pack(fill=Y, expand=1)

        # ---------- PSD PARAMETER SELECTION ---------- #
        framePARAM = Frame(frameTOP)
        framePARAM.config(bg="white")
        framePARAM.pack(side=LEFT, fill=X)

        frame = LabelFrame(framePARAM,
                           text="PSD Parameters",
                           relief=RIDGE,
                           borderwidth=1,
                           background="white")
        frame.pack(fill=BOTH, expand=1, side=TOP)

        wFs = Label(frame, text="Fs:", bg="white")
        wFs.pack(side=LEFT)
        self.inputFs = Entry(frame, width=5)
        self.inputFs.pack(side=LEFT, padx=5)
        self.inputFs.delete(0, END)
        self.inputFs.insert(0, "500")

        wWS = Label(frame, text="Window size:", bg="white")
        wWS.pack(side=LEFT)
        self.inputWinSize = Entry(frame, width=5)
        self.inputWinSize.pack(side=LEFT, padx=5)
        self.inputWinSize.delete(0, END)
        self.inputWinSize.insert(0, "1024")

        wOL = Label(frame, text="Overlap:", bg="white")
        wOL.pack(side=LEFT)
        self.inputOverlap = Entry(frame, width=5)
        self.inputOverlap.pack(side=LEFT, padx=5)
        self.inputOverlap.delete(0, END)
        self.inputOverlap.insert(0, "512")

        wWT = Label(frame, text="Window function:", bg="white")
        wWT.pack(side=LEFT)

        variable = StringVar(frame)
        variable.set("Hamming")  # default value
        self.inputWinType = OptionMenu(frame, variable, "Hamming", "Bartlett",
                                       "Blackman", "Hanning", "None")
        self.inputWinType.config(bg="white", width=10)
        self.inputWinType.pack(side=LEFT)

        buttonRun = Button(frame, text="GO!", command=self.goTime)
        buttonRun.pack(side=RIGHT)

        # Channel selector
        frameCh = LabelFrame(framePARAM,
                             text="Channels",
                             relief=RIDGE,
                             borderwidth=1,
                             background="white")
        frameCh.pack(fill=BOTH, expand=1, side=TOP)

        self.EOch1 = IntVar()
        self.inputEOch1 = Checkbutton(frameCh,
                                      text="1",
                                      variable=self.EOch1,
                                      bg="white")
        self.inputEOch1.pack(side=LEFT)

        self.EOch2 = IntVar()
        self.inputEOch2 = Checkbutton(frameCh,
                                      text="2",
                                      variable=self.EOch2,
                                      bg="white")
        self.inputEOch2.pack(side=LEFT)

        self.EOch3 = IntVar()
        self.inputEOch3 = Checkbutton(frameCh,
                                      text="3",
                                      variable=self.EOch3,
                                      bg="white")
        self.inputEOch3.pack(side=LEFT)

        self.EOch4 = IntVar()
        self.inputEOch4 = Checkbutton(frameCh,
                                      text="4",
                                      variable=self.EOch4,
                                      bg="white")
        self.inputEOch4.pack(side=LEFT)

        self.EOch5 = IntVar()
        self.inputEOch5 = Checkbutton(frameCh,
                                      text="5",
                                      variable=self.EOch5,
                                      bg="white")
        self.inputEOch5.pack(side=LEFT)

        self.EOch6 = IntVar()
        self.inputEOch6 = Checkbutton(frameCh,
                                      text="6",
                                      variable=self.EOch6,
                                      bg="white")
        self.inputEOch6.pack(side=LEFT)

        self.EOch7 = IntVar()
        self.inputEOch7 = Checkbutton(frameCh,
                                      text="7",
                                      variable=self.EOch7,
                                      bg="white")
        self.inputEOch7.pack(side=LEFT)

        self.EOch8 = IntVar()
        self.inputEOch8 = Checkbutton(frameCh,
                                      text="8",
                                      variable=self.EOch8,
                                      bg="white")
        self.inputEOch8.pack(side=LEFT)

        # IAF Calculation parameters

        frameIAF = LabelFrame(framePARAM,
                              text="IAF Search Limits",
                              relief=RIDGE,
                              borderwidth=1,
                              background="white")
        frameIAF.pack(fill=BOTH, expand=1, side=TOP)

        labelLowBound = Label(frameIAF, text="Lower limit (Hz):", bg="white")
        labelLowBound.pack(side=LEFT)
        self.inputLowBound = Entry(frameIAF, width=5)
        self.inputLowBound.pack(side=LEFT, padx=5)
        self.inputLowBound.delete(0, END)
        self.inputLowBound.insert(0, "7")

        labelUpBound = Label(frameIAF, text="Upper limit (Hz):", bg="white")
        labelUpBound.pack(side=LEFT)
        self.inputUpBound = Entry(frameIAF, width=5)
        self.inputUpBound.pack(side=LEFT, padx=5)
        self.inputUpBound.delete(0, END)
        self.inputUpBound.insert(0, "14")

        self.GaussVar = IntVar()
        self.inputGauss = Checkbutton(frameIAF,
                                      text="Gauss",
                                      variable=self.GaussVar,
                                      bg="white")
        self.inputGauss.pack(side=LEFT)

        buttonRun = Button(frameIAF, text="IAF!", command=self.calculateIAF)
        buttonRun.pack(side=RIGHT)

        self.pack()

        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        # END OF TOP FRAME
        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

        # my variables
        self.chSelect = 0
        self.chOther = 0

        self.P1 = ndarray(1)
        self.f1 = ndarray(1)

        self.P2 = ndarray(1)
        self.f2 = ndarray(1)

        self.filename1 = "..."
        self.filename2 = "..."

        self.IAF = 10

        self.doGauss = True
        # FIGURE STUFF !!!
        self.Pmax = 0
        self.Pmin = 0
        self.Dmax = 0
        self.Dmin = 0

        frameBOTTOM = Frame(self)
        frameBOTTOM.config(bg="white")
        frameBOTTOM.pack(side=BOTTOM, pady=10)

        frameFig = LabelFrame(frameBOTTOM,
                              text="Spectrum",
                              relief=RIDGE,
                              borderwidth=1,
                              background="white")
        frameFig.pack(fill=X, expand=1, side=LEFT, padx=10)

        self.fig1 = matplotlib.figure.Figure(figsize=(7, 3),
                                             dpi=100)  #,frameon=False)
        self.fig1.set_facecolor('white')
        self.fig = matplotlib.backends.backend_tkagg.FigureCanvasTkAgg(
            self.fig1, master=frameFig)
        self.a1 = self.fig1.add_subplot(121)
        self.a2 = self.fig1.add_subplot(122)
        self.fig.show()
        self.fig.get_tk_widget().pack(side=BOTTOM)

        frameConfig = LabelFrame(frameBOTTOM,
                                 text="Filter configuration",
                                 relief=RAISED,
                                 borderwidth=1,
                                 background="white")
        frameConfig.pack(fill=BOTH, expand=1, side=RIGHT, padx=10)

        frameIAF = LabelFrame(frameConfig,
                              text="Individual Alpha Frequency (IAF)")
        frameIAF.config(bg="white")
        frameIAF.pack(expand=1, side=TOP, padx=10)

        self.inputIAF = Entry(frameIAF, width=5)
        self.inputIAF.pack(side=LEFT, padx=5)
        self.inputIAF.delete(0, END)
        self.inputIAF.insert(0, "0")

        self.buttonWriteDefault = Button(frameIAF,
                                         text="Update Filters",
                                         command=self.updateFilters)
        self.buttonWriteDefault.pack(side=LEFT, padx=5, pady=5)

        frameFilters = LabelFrame(frameConfig,
                                  text="Filters",
                                  relief=RAISED,
                                  borderwidth=1,
                                  background="white")
        frameFilters.pack(fill=X, expand=1, side=TOP)

        # THETA FRAME
        frameTheta = LabelFrame(frameFilters,
                                text="Theta",
                                relief=RAISED,
                                borderwidth=1,
                                background="white")
        frameTheta.pack(expand=1, side=TOP, pady=5, padx=5)

        self.inputThetaLow = Entry(frameTheta, width=8)
        self.inputThetaLow.pack(side=LEFT, padx=5, pady=5)
        self.inputThetaLow.delete(0, END)
        self.inputThetaLow.insert(0, "0")

        self.inputThetaHigh = Entry(frameTheta, width=8)
        self.inputThetaHigh.pack(side=LEFT, padx=5, pady=5)
        self.inputThetaHigh.delete(0, END)
        self.inputThetaHigh.insert(0, "0")

        # BETA FRAME
        frameBeta = LabelFrame(frameFilters,
                               text="Beta",
                               relief=RAISED,
                               borderwidth=1,
                               background="white")
        frameBeta.pack(expand=1, side=TOP, pady=5, padx=5)

        self.inputBetaLow = Entry(frameBeta, width=8)
        self.inputBetaLow.pack(side=LEFT, padx=5, pady=5)
        self.inputBetaLow.delete(0, END)
        self.inputBetaLow.insert(0, "0")

        self.inputBetaHigh = Entry(frameBeta, width=8)
        self.inputBetaHigh.pack(side=LEFT, padx=5, pady=5)
        self.inputBetaHigh.delete(0, END)
        self.inputBetaHigh.insert(0, "0")

        # SMR FRAME
        frameSMR = LabelFrame(frameFilters,
                              text="SMR",
                              relief=RAISED,
                              borderwidth=1,
                              background="white")
        frameSMR.pack(expand=1, side=TOP, pady=5, padx=5)

        self.inputSMRLow = Entry(frameSMR, width=8)
        self.inputSMRLow.pack(side=LEFT, padx=5, pady=5)
        self.inputSMRLow.delete(0, END)
        self.inputSMRLow.insert(0, "0")

        self.inputSMRHigh = Entry(frameSMR, width=8)
        self.inputSMRHigh.pack(side=LEFT, padx=5, pady=5)
        self.inputSMRHigh.delete(0, END)
        self.inputSMRHigh.insert(0, "0")

        frameButtons = LabelFrame(frameConfig,
                                  text="Commands",
                                  relief=RAISED,
                                  borderwidth=1,
                                  background="white")
        frameButtons.pack(expand=1, side=BOTTOM)

        self.buttonWriteConfig = Button(frameButtons,
                                        text="Write Filters",
                                        command=self.writeFilters)
        self.buttonWriteConfig.pack(side=LEFT, padx=5, pady=5)

        self.buttonWriteDefault = Button(frameButtons,
                                         text="Reset to Defaults",
                                         command=self.resetIAFtoDefault)
        self.buttonWriteDefault.pack(side=LEFT, padx=5, pady=5)

        # self.buttonVisualize = Button(frameButtons, text="VIS",command=self.resetIAFtoDefault)
        # self.buttonVisualize.pack(side=LEFT,padx=5,pady=5)

        self.buttonPrintFig = Button(frameButtons,
                                     text="Print Figure",
                                     command=self.printFigureToFile)
        self.buttonPrintFig.pack(side=LEFT, padx=5, pady=5)
Пример #4
0
class Emulatore(object):

    """
    Interfaccia grafica per l'emulatore del pdp8
    """

    def __init__(self, master, codice, calcolatore, emulatore):
        """
        Inizializza i frame per l'interfaccia dell'emulatore
        """
        self.CD = calcolatore
        self.codice = codice
        self.delay = 100
        self.master = Frame(master)
        self.root = emulatore

        # Memoria Ram
        self.ram = LabelFrame(
            self.master, text='Memoria RAM', relief=RIDGE, borderwidth=5, labelanchor='n', pady=5)
        self.ram.rowconfigure(0, weight=1)
        self.ram.columnconfigure(0, weight=1)
        self.ram.grid(
            row=0, column=0, rowspan=3, columnspan=5, sticky=W + E + N + S)

        # Controlli
        self.controlli = Frame(self.master, padx=10, pady=10)
        self.controlli.grid(row=0, column=5, rowspan=1)

        # Status CD
        self.registri = LabelFrame(
            self.master, text='REGISTRI', relief=RIDGE, borderwidth=5, labelanchor='n', padx=25, pady=10)
        self.registri.grid(row=0, column=6, rowspan=1, sticky=W + E + N + S)
        self.unita = LabelFrame(
            self.master, text='UC', relief=RIDGE, borderwidth=5, labelanchor='n', padx=10, pady=10)
        self.unita.grid(row=2, column=6, rowspan=1, sticky=N)

        # Var
        self.variabili = Frame(self.master)
        self.variabili.grid(row=2, column=5)
        self.nstep = LabelFrame(
            self.variabili, text='Num. Step', relief=RIDGE, borderwidth=5, labelanchor='n')
        self.nstep.grid(row=0, column=5, sticky=W + E)
        self.delays = LabelFrame(
            self.variabili, text='Delay', relief=RIDGE, borderwidth=5, labelanchor='n')
        self.delays.grid(row=1, column=5, sticky=W + E)
        self.tempo = LabelFrame(
            self.variabili, text='Tempo', relief=RIDGE, borderwidth=5, labelanchor='n')
        self.tempo.grid(row=1, column=6, sticky=W + E)

        # Unita' di controllo
        self.unitas = LabelFrame(
            self.unita, text='S', labelanchor='s', padx=10)
        self.unitas.grid(row=0, column=0, sticky=N)
        self.unitaf = LabelFrame(
            self.unita, text='F', labelanchor='s', padx=10)
        self.unitaf.grid(row=0, column=1, sticky=N)
        self.unitar = LabelFrame(
            self.unita, text='R', labelanchor='s', padx=10)
        self.unitar.grid(row=0, column=2, sticky=N)
        self.unitaint = LabelFrame(
            self.unita, text='Int.', labelanchor='s', padx=10)
        self.unitaint.grid(row=0, column=3, sticky=N)

        # Registri
        self.programc = LabelFrame(
            self.registri, text='PC', relief=FLAT, labelanchor='e', padx=5)
        self.programc.grid(row=0, column=0, sticky=W + E)
        self.mar = LabelFrame(
            self.registri, text='MAR', relief=FLAT, labelanchor='e', padx=5)
        self.mar.grid(row=1, column=0, sticky=W + E)
        self.mbr = LabelFrame(
            self.registri, text='MBR', relief=FLAT, labelanchor='e', padx=5)
        self.mbr.grid(row=2, column=0, sticky=W + E)
        self.lopr = LabelFrame(
            self.registri, text='OPR', relief=FLAT, labelanchor='e', padx=5)
        self.lopr.grid(row=3, column=0, sticky=W + E)
        self.vari = LabelFrame(
            self.registri, text='I', relief=FLAT, labelanchor='e', padx=5)
        self.vari.grid(row=4, column=0, sticky=W + E)
        self.vare = LabelFrame(
            self.registri, text='E', relief=FLAT, labelanchor='e', padx=5)
        self.vare.grid(row=5, column=0, sticky=W + E)
        self.lac = LabelFrame(
            self.registri, text='AC', relief=FLAT, labelanchor='e', padx=5)
        self.lac.grid(row=6, column=0, sticky=W + E)
        self.lacint = LabelFrame(
            self.registri, text='INT AC', relief=FLAT, labelanchor='e', padx=5)
        self.lacint.grid(row=7, column=0, sticky=W + E)
        self.lachex = LabelFrame(
            self.registri, text='HEX AC', relief=FLAT, labelanchor='e', padx=5)
        self.lachex.grid(row=8, column=0, sticky=W + E)

        # Microistruzioni
        self.micro = LabelFrame(
            self.master, text='Microistruzioni eseguite', relief=RIDGE, borderwidth=5, labelanchor='n', pady=5)
        self.micro.rowconfigure(0, weight=1)
        self.micro.columnconfigure(0, weight=1)
        self.micro.grid(
            row=3, column=4, rowspan=5, columnspan=5, sticky=W + E + N + S)

        # Inout
        self.inout = LabelFrame(
            self.master, text='Input & Output', relief=RIDGE, borderwidth=5, labelanchor='n', pady=5)
        self.inout.rowconfigure(0, weight=1)
        self.inout.columnconfigure(0, weight=1)
        self.inout.grid(row=3, column=0, columnspan=4, sticky=W + E + N + S)

        self.create_widgets()

    def create_widgets(self):
        """
        Crea il layout del programma, finestra dell'emulatore
        """
        # Memoria RAM
        self.Visualizza = Text(self.ram, width=80)
        self.Visualizzascrollbar = Scrollbar(self.ram)
        self.Visualizzascrollbar.config(command=self.Visualizza.yview)
        self.Visualizza.config(yscrollcommand=self.Visualizzascrollbar.set)
        self.Visualizzascrollbar.grid(row=0, column=1, sticky=N + S)
        self.Visualizza.grid(row=0, column=0, sticky=W)

        # INOUT
        self.Visualizzainout = Text(
            self.inout, width=62, height=7, fg='green', bg='black')
        self.Visualizzascrollbar_inout = Scrollbar(self.inout)
        self.Visualizzascrollbar_inout.config(
            command=self.Visualizzainout.yview)
        self.Visualizzainout.config(
            yscrollcommand=self.Visualizzascrollbar_inout.set)
        self.Visualizzascrollbar_inout.grid(row=0, column=1, sticky=N + S)
        self.Visualizzainout.grid(row=0, column=0, sticky=W)

        # Mircroistruzioni
        self.Visualizzamicro = Text(self.micro, width=55, height=7)
        self.Visualizzascrollbar_m = Scrollbar(self.micro)
        self.Visualizzascrollbar_m.config(command=self.Visualizzamicro.yview)
        self.Visualizzamicro.config(
            yscrollcommand=self.Visualizzascrollbar_m.set)
        self.Visualizzascrollbar_m.grid(row=0, column=1, sticky=N + S)
        self.Visualizzamicro.grid(row=0, column=0, sticky=W)

        # Pulsanti
        self.butload = Button(
            self.controlli, text='LOAD', anchor=CENTER, width=15, command=self.loading, bg='SkyBlue')
        self.butload.grid(row=0, column=0)
        self.butstep = Button(
            self.controlli, text='Step', anchor=CENTER, width=15, command=self.step, bg='linen')
        self.butstep.grid(row=1, column=0)
        self.butminstep = Button(
            self.controlli, text='miniStep', anchor=CENTER, width=15, command=self.mini_step, bg='linen')
        self.butminstep.grid(row=2, column=0)
        self.butstep = Button(self.controlli, text='microStep',
                              anchor=CENTER, width=15, command=self.micro_step, bg='linen')
        self.butstep.grid(row=3, column=0)
        self.butsetstep = Button(
            self.controlli, text='Set n Step', anchor=CENTER, width=15, command=self.setnstep, bg='linen')
        self.butsetstep.grid(row=4, column=0)
        self.butsetdelay = Button(
            self.controlli, text='Set Delay', anchor=CENTER, width=15, command=self.setdelay, bg='linen')
        self.butsetdelay.grid(row=5, column=0)
        self.butstart = Button(
            self.controlli, text='START', anchor=CENTER, width=15, command=self.start, bg='DarkOliveGreen3')
        self.butstart.grid(row=6, column=0)
        self.butreset = Button(
            self.controlli, text='RESET', anchor=CENTER, width=15, command=self.resetCD, bg='Orange3')
        self.butreset.grid(row=7, column=0)
        self.butstop = Button(
            self.controlli, text='STOP', anchor=CENTER, width=15, command=self.stop, bg='IndianRed')
        self.butstop.grid(row=8, column=0)
        self.butbreak = Button(
            self.controlli, text='BREAK', anchor=CENTER, width=15, command=self.breakpoint, bg='Magenta2')
        self.butbreak.grid(row=9, column=0)
        self.butcontinue = Button(
            self.controlli, text='CONTINUA', anchor=CENTER, width=15, command=self.continua, bg='Magenta2')
        self.butcontinue.grid(row=10, column=0)
        self.butesegui = Button(
            self.controlli, text='ESEGUI', anchor=CENTER, width=15, command=self.esegui, bg='Yellow')
        self.butesegui.grid(row=11, column=0)

        # Labels
        self.labelprogramc = Label(
            self.programc, text='00000000000', relief=SUNKEN, bg='red')
        self.labelprogramc.grid()
        self.labelmar = Label(
            self.mar, text='00000000000', relief=SUNKEN, bg='yellow')
        self.labelmar.grid()
        self.labelmbr = Label(self.mbr, text='000000000000000', relief=SUNKEN)
        self.labelmbr.grid()
        self.labelvari = Label(self.vari, text='0', relief=SUNKEN)
        self.labelvari.grid()
        self.labelopr = Label(self.lopr, text='000', relief=SUNKEN)
        self.labelopr.grid()
        self.labelucs = Label(self.unitas, text='0')
        self.labelucs.grid()
        self.labelucf = Label(self.unitaf, text='0')
        self.labelucf.grid()
        self.labelucr = Label(self.unitar, text='0')
        self.labelucr.grid()
        self.labelucint = Label(self.unitaint, text='0')
        self.labelucint.grid()
        self.labelnstep = Label(self.nstep, text='1')
        self.labelnstep.grid()
        self.labeldelay = Label(self.delays, text=str(self.delay))
        self.labeldelay.grid()
        self.labeltempo = Label(self.tempo, text=str(self.CD.tempo))
        self.labeltempo.grid()
        self.labelac = Label(self.lac, text='000000000000000', relief=SUNKEN)
        self.labelac.grid()
        self.labelacint = Label(
            self.lacint, text='000000000000000', relief=SUNKEN)
        self.labelacint.grid()
        self.labelachex = Label(
            self.lachex, text='000000000000000', relief=SUNKEN)
        self.labelachex.grid()
        self.labelvare = Label(self.vare, text='0', relief=SUNKEN)
        self.labelvare.grid()

    def continua(self):
        """
        Continua l'esecuzione dopo un break
        """
        self.CD.S = True
        self.esegui()

    def micro_step(self):
        """
        Esegue il metodo step del calcolatore didattico ed aggiorna
        """
        if self.CD.S:
            self.CD.step(self.root, self.codice)
            if self.CD.tempo == 0 and not self.CD.F and not self.CD.R:
                self.CD.previstr = self.CD.nextistr
            self.aggiornaall()

    def step(self):
        """
        Esegue il metodo step del calcolatore didattico ed aggiorna
        """
        var = True
        if self.CD.S and self.CD.nstep > 0:
            while var and self.CD.S:
                self.CD.step(self.root, self.codice)
                if not self.CD.F and not self.CD.R and self.CD.tempo == 0:
                    self.CD.nstep -= 1
                    self.aggiornaall()
                    self.CD.previstr = self.CD.nextistr
                    var = False
            if self.CD.nstep > 0:
                self.butstep.after(self.delay, self.step)
            else:
                self.CD.setnstep(1)
        else:
            self.CD.setnstep(1)
            self.aggiornaall()

    def esegui(self):
        """
        Esegue il programma fino all'arresto della macchina tramite
        l'istruzione HLT
        """
        while self.CD.S:
            self.CD.step(self.root, self.codice)
            if not self.CD.F and not self.CD.R and self.CD.tempo == 0:
                self.aggiornaall()
                self.CD.previstr = self.CD.nextistr
                break
        if self.CD.S:
            self.butesegui.after(self.delay, self.esegui)
        else:
            self.CD.setnstep(1)
            self.aggiornaall()

    def mini_step(self):
        """
        Esegue un singolo ciclo della macchina
        """
        if self.CD.S:
            for x in range(0, 4):
                self.CD.step(self.root, self.codice)
                self.CD.nstep = 1
                self.aggiornaall()
            if self.CD.F is False and self.CD.R is False:
                self.CD.previstr = self.CD.nextistr

    def cerca_istr_prev(self):
        """
        Evidenzia di VERDE l'ultima istruzione eseguita
        """
        if self.CD.PC == '000000000000':
            return
        try:
            if self.CD.previstr == '' and int(self.CD.PC, 2) == self.CD.START:
                return
            else:
                pospc = str(3.0 + self.CD.previstr)
                self.Visualizza.tag_add(
                    "PISTR", str(pospc[:-1] + '16'),  str(pospc[:-1] + 'end'))
                self.Visualizza.tag_config("PISTR", background="green")
                self.Visualizza.see(pospc)
        except TypeError:
            pass  # Errore che si ottiene durante il reset del CD

    # NOTA : METODO NON NECESSARIO NEL PROGRAMMA FINALE
    # def cerca_istr_corr(self):
    #    """
    #    Evidenzia di verde l'istruzione che si dovrà eseguire
    #    """
    #    if self.CD.PC == '000000000000':
    #        return
    #    try:
    #        if int(self.CD.PC,2) == self.CD.START:
    # Inizio esecuzione del programma
    # Il PC e l'istruzione da eseguire sono allo stesso 'livello'
    #            pos = str(3.0)
    #            self.Visualizza.tag_add("ISTR", str(pos[0]+'.16'), str(pos[:-1]+'end'))
    #            self.Visualizza.tag_config("ISTR", background = "green")
    #        else:
    #            pospc = str(3.0 + self.CD.nextistr)
    #            self.Visualizza.tag_add("ISTR", str(pospc[:-1]+'16'),  str(pospc[:-1]+'end'))
    #            self.Visualizza.tag_config("ISTR", background = "green")
    #            self.Visualizza.see(pospc)
    #    except TypeError:
    # pass ## Errore che si ottiene durante il reset del CD

    def cerca_MAR(self):
        """
        Evidenzia di giallo l'indirizzo puntato dal MAR
        """
        try:
            pos = 3.0
            stringa = self.Visualizza.get(str(pos), 'end')
            while stringa[:12] != self.CD.MAR and int(pos) < len(self.CD.RAM) + 3 and len(self.CD.RAM) > 0:
                pos += 1
                stringa = self.Visualizza.get(str(pos), 'end')
            if int(pos) >= len(self.CD.RAM) + 3:
                return
            self.Visualizza.tag_add("MAR", pos, str(float(pos) + 0.12))
            self.Visualizza.tag_config("MAR", background="yellow")
        except TypeError:
            pass  # Errore che si ottiene durante il reset del CD

    def cerca_PC(self):
        """
        Evidenzia di rosso l'indirizzo puntato da PC
        """
        try:
            pos = 3.0
            stringa = self.Visualizza.get(str(pos), 'end')
            while stringa[:12] != self.CD.PC and int(pos) < len(self.CD.RAM) + 3 and len(self.CD.RAM) > 0:
                pos += 1
                stringa = self.Visualizza.get(str(pos), 'end')
            if int(pos) >= len(self.CD.RAM) + 3:
                return
            self.Visualizza.tag_add("PC", pos, str(float(pos) + 0.12))
            self.Visualizza.tag_config("PC", background="red")
        except TypeError:
            pass  # Errore che si ottiene durante il reset del CD

    def aggiornaout(self):
        """
        Aggiorna micro e input/output
        """
        self.aggiornamicro()
        self.aggiornainout()

    def aggiornamicro(self):
        """
        Aggiorna le microistruzioni eseguite
        """
        self.Visualizzamicro.delete(1.0, END)
        stringa = self.CD.microistruzioni
        self.Visualizzamicro.insert(INSERT, stringa)
        self.Visualizzamicro.see(END)

    def aggiornainout(self):
        """
        Aggiorna gli input ed output di sistema
        """
        self.Visualizzainout.delete(1.0, END)
        stringa = self.CD.inout
        self.Visualizzainout.insert(INSERT, stringa)
        self.Visualizzainout.see(END)

    def aggiornaram(self):
        """
        Aggiorna lo stato della RAM
        """
        self.Visualizza.delete(1.0, END)
        stringa = self.CD.statusRAM()
        self.Visualizza.insert(INSERT, stringa)
        self.cerca_MAR()
        self.cerca_PC()
        self.cerca_istr_prev()
        # self.cerca_istr_corr() #Non più necessaria nella versione finale

    def aggiornareg(self):
        """
        Aggiorna lo stato dei Registri
        """
        self.labelprogramc.config(text=self.CD.PC)
        self.labelmar.config(text=self.CD.MAR)
        self.labelmbr.config(text=self.CD.MBR)
        self.labelac.config(text=self.CD.AC)
        self.labelacint.config(text=str(self.CD.range(int(self.CD.AC, 2))))
        self.labelachex.config(
            text=str((hex(int(self.CD.AC, 2))[2:].upper())).zfill(4))
        self.labelvare.config(text=self.CD.E)
        self.labelvari.config(text=self.CD.I)
        self.labelopr.config(text=self.CD.OPR)

    def aggiornauc(self):
        """
        Aggiorna lo stato dell'unita' di controllo
        """
        if self.CD.S and not self.CD.breaks:
            self.labelucs.config(text=self.CD.S, bg='green')
            self.unitas.config(bg='green')
        elif not self.CD.S and self.CD.breaks:
            self.labelucs.config(text=self.CD.S, bg='Magenta2')
            self.unitas.config(bg='Magenta2')
        else:
            self.labelucs.config(text=self.CD.S, bg='red')
            self.unitas.config(bg='red')
        self.labelucf.config(text=self.CD.F)
        self.labelucr.config(text=self.CD.R)
        self.labelucint.config(text=self.CD.Interrupt)
        self.labeltempo.config(text=self.CD.tempo)

    def aggiornaall(self):
        """
        Aggiorna tutto
        """
        self.aggiornaram()
        self.aggiornareg()
        self.aggiornauc()
        self.aggiornamicro()
        self.aggiornaout()
        self.labelnstep.config(text=self.CD.nstep)

    def loading(self):
        """
        Carica il contenuto del codice assembly decodificandolo in binario
        nella RAM
        """
        contenuto = self.codice.Inserisci.get(1.0, END)
        if len(contenuto) > 1:
            self.resetCD()
            if self.CD.carica(contenuto.decode('ascii', 'ignore'), self) is not None:
                self.CD.S = 0
                self.aggiornaall()

    def resetCD(self):
        """
        Resetta il calcolatore didattico
        """
        self.CD = pdp8()
        self.aggiornaall()

    def start(self):
        """
        Mette la variabile Start (S) ad 1, cioe' True
        """
        self.CD.S = True
        if self.CD.breaks == True:
            self.CD.breaks = False
        self.aggiornauc()

    def stop(self):
        """
        Mette la variabile Start (S) ad 0, cioe' False
        """
        self.CD.S = False
        self.aggiornauc()

    def setnstep(self):
        """
        Setta, in base al valore passato, il numero di cicli da eseguire
        """
        temp = askinteger("Num Step", "Numero di step da eseguire",
                          initialvalue=1, minvalue=1, parent=self.root)
        if temp is None:
            self.CD.setnstep(1)
        else:
            self.CD.setnstep(temp)
            self.labelnstep.config(text=self.CD.nstep)

    def setdelay(self):
        """
        Setta, in base al valore passato, il ritardo di esecuzione.
        Il valore è espresso in millisecondi, di default = 1000
        """
        temp = askinteger("Set Delay", "Ritardo in millisecondi",
                          initialvalue=100, minvalue=1, parent=self.root)
        if temp is not None:
            self.delay = temp
            self.labeldelay.config(text=self.delay)

    def breakpoint(self):
        """
        Setta o elimina i breakpoint dal programma caricato in memoria
        """
        temp = askstring(
            "Cella di memoria", "Indirizzo esadecimale", parent=self.root)
        if temp is not None:
            temp = self.CD.binario(int(temp, 16)).zfill(12)
            self.CD.breakpoint(temp)
            self.aggiornaram()

    def exit(self):
        """
        Esce dal programma
        """
        if askquestion('Exit', 'Sicuro di voler uscire?', parent=self.master) == YES:
            self.codice.master.quit()
            self.codice.master.destroy()
        else:
            showinfo('Suggerimento', """Forse e' meglio fare una pausa!""",
                     icon=WARNING, parent=self.master)
Пример #5
0
    def initUI(self):

        self.parent.title("IAF CALC 0.01")
        self.pack(fill=BOTH, expand=1)

        self.configure(background="white")

        frameTOP = Frame(self)
        frameTOP.config(bg="white")
        frameTOP.pack(side=TOP)

        frameFILES = Frame(frameTOP)
        frameFILES.pack(side=LEFT, padx=10)

        # --- BUTTON FOR FILE 1 --- #
        frameF1 = LabelFrame(frameFILES, text="Eyes open file:", relief=FLAT, borderwidth=1, background="white")
        frameF1.pack(fill=X, expand=1)
        self.nameF1 = Entry(frameF1, width=50)
        self.nameF1.config(bg="lightgray")
        self.nameF1.pack(side=LEFT)
        self.nameF1.delete(0, END)
        self.nameF1.insert(0, "")
        self.buttonLoadFile1 = Button(frameF1, text="...", command=self.askOpenFile1)
        self.buttonLoadFile1.pack(side=LEFT, padx=5, pady=5)
        # ----------------------- #

        # --- BUTTON FOR FILE 2 --- #
        frameF2 = LabelFrame(frameFILES, text="Eyes closed file:", relief=FLAT, borderwidth=1, background="white")
        frameF2.pack(fill=X, expand=1)
        self.nameF2 = Entry(frameF2, width=50)
        self.nameF2.config(bg="lightgray")
        self.nameF2.pack(side=LEFT)
        self.nameF2.delete(0, END)
        self.nameF2.insert(0, "")
        self.buttonLoadFile2 = Button(frameF2, text="...", command=self.askOpenFile2)
        self.buttonLoadFile2.pack(side=LEFT, padx=5, pady=5)
        # ----------------------- #

        # --- BUTTON FOR FILE OUTPUT --- #
        frameO = LabelFrame(frameFILES, text="Output directory:", relief=FLAT, borderwidth=1, background="white")
        frameO.pack(fill=X, expand=1)
        self.nameO = Entry(frameO, width=50)
        self.nameO.config(bg="lightgray")
        self.nameO.pack(side=LEFT)
        self.nameO.delete(0, END)
        self.nameO.insert(0, "")
        self.buttonSelectOutput = Button(frameO, text="...", command=self.askOutputDirectory)
        self.buttonSelectOutput.pack(side=LEFT, padx=5, pady=5)
        # -------------------------------#
        # self.pack()
        # self.pack(fill=Y, expand=1)

        # ---------- PSD PARAMETER SELECTION ---------- #
        framePARAM = Frame(frameTOP)
        framePARAM.config(bg="white")
        framePARAM.pack(side=LEFT, fill=X)

        frame = LabelFrame(framePARAM, text="PSD Parameters", relief=RIDGE, borderwidth=1, background="white")
        frame.pack(fill=BOTH, expand=1, side=TOP)

        wFs = Label(frame, text="Fs:", bg="white")
        wFs.pack(side=LEFT)
        self.inputFs = Entry(frame, width=5)
        self.inputFs.pack(side=LEFT, padx=5)
        self.inputFs.delete(0, END)
        self.inputFs.insert(0, "500")

        wWS = Label(frame, text="Window size:", bg="white")
        wWS.pack(side=LEFT)
        self.inputWinSize = Entry(frame, width=5)
        self.inputWinSize.pack(side=LEFT, padx=5)
        self.inputWinSize.delete(0, END)
        self.inputWinSize.insert(0, "1024")

        wOL = Label(frame, text="Overlap:", bg="white")
        wOL.pack(side=LEFT)
        self.inputOverlap = Entry(frame, width=5)
        self.inputOverlap.pack(side=LEFT, padx=5)
        self.inputOverlap.delete(0, END)
        self.inputOverlap.insert(0, "512")

        wWT = Label(frame, text="Window function:", bg="white")
        wWT.pack(side=LEFT)

        variable = StringVar(frame)
        variable.set("Hamming")  # default value
        self.inputWinType = OptionMenu(frame, variable, "Hamming", "Bartlett", "Blackman", "Hanning", "None")
        self.inputWinType.config(bg="white", width=10)
        self.inputWinType.pack(side=LEFT)

        buttonRun = Button(frame, text="GO!", command=self.goTime)
        buttonRun.pack(side=RIGHT)

        # Channel selector
        frameCh = LabelFrame(framePARAM, text="Channels", relief=RIDGE, borderwidth=1, background="white")
        frameCh.pack(fill=BOTH, expand=1, side=TOP)

        self.EOch1 = IntVar()
        self.inputEOch1 = Checkbutton(frameCh, text="1", variable=self.EOch1, bg="white")
        self.inputEOch1.pack(side=LEFT)

        self.EOch2 = IntVar()
        self.inputEOch2 = Checkbutton(frameCh, text="2", variable=self.EOch2, bg="white")
        self.inputEOch2.pack(side=LEFT)

        self.EOch3 = IntVar()
        self.inputEOch3 = Checkbutton(frameCh, text="3", variable=self.EOch3, bg="white")
        self.inputEOch3.pack(side=LEFT)

        self.EOch4 = IntVar()
        self.inputEOch4 = Checkbutton(frameCh, text="4", variable=self.EOch4, bg="white")
        self.inputEOch4.pack(side=LEFT)

        self.EOch5 = IntVar()
        self.inputEOch5 = Checkbutton(frameCh, text="5", variable=self.EOch5, bg="white")
        self.inputEOch5.pack(side=LEFT)

        self.EOch6 = IntVar()
        self.inputEOch6 = Checkbutton(frameCh, text="6", variable=self.EOch6, bg="white")
        self.inputEOch6.pack(side=LEFT)

        self.EOch7 = IntVar()
        self.inputEOch7 = Checkbutton(frameCh, text="7", variable=self.EOch7, bg="white")
        self.inputEOch7.pack(side=LEFT)

        self.EOch8 = IntVar()
        self.inputEOch8 = Checkbutton(frameCh, text="8", variable=self.EOch8, bg="white")
        self.inputEOch8.pack(side=LEFT)

        # IAF Calculation parameters

        frameIAF = LabelFrame(framePARAM, text="IAF Search Limits", relief=RIDGE, borderwidth=1, background="white")
        frameIAF.pack(fill=BOTH, expand=1, side=TOP)

        labelLowBound = Label(frameIAF, text="Lower limit (Hz):", bg="white")
        labelLowBound.pack(side=LEFT)
        self.inputLowBound = Entry(frameIAF, width=5)
        self.inputLowBound.pack(side=LEFT, padx=5)
        self.inputLowBound.delete(0, END)
        self.inputLowBound.insert(0, "7")

        labelUpBound = Label(frameIAF, text="Upper limit (Hz):", bg="white")
        labelUpBound.pack(side=LEFT)
        self.inputUpBound = Entry(frameIAF, width=5)
        self.inputUpBound.pack(side=LEFT, padx=5)
        self.inputUpBound.delete(0, END)
        self.inputUpBound.insert(0, "14")

        self.GaussVar = IntVar()
        self.inputGauss = Checkbutton(frameIAF, text="Gauss", variable=self.GaussVar, bg="white")
        self.inputGauss.pack(side=LEFT)

        buttonRun = Button(frameIAF, text="IAF!", command=self.calculateIAF)
        buttonRun.pack(side=RIGHT)

        self.pack()

        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        # END OF TOP FRAME
        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        # """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

        # my variables
        self.chSelect = 0
        self.chOther = 0

        self.P1 = ndarray(1)
        self.f1 = ndarray(1)

        self.P2 = ndarray(1)
        self.f2 = ndarray(1)

        self.filename1 = "..."
        self.filename2 = "..."

        self.IAF = 10

        self.doGauss = True
        # FIGURE STUFF !!!
        self.Pmax = 0
        self.Pmin = 0
        self.Dmax = 0
        self.Dmin = 0

        frameBOTTOM = Frame(self)
        frameBOTTOM.config(bg="white")
        frameBOTTOM.pack(side=BOTTOM, pady=10)

        frameFig = LabelFrame(frameBOTTOM, text="Spectrum", relief=RIDGE, borderwidth=1, background="white")
        frameFig.pack(fill=X, expand=1, side=LEFT, padx=10)

        self.fig1 = matplotlib.figure.Figure(figsize=(7, 3), dpi=100)  # ,frameon=False)
        self.fig1.set_facecolor("white")
        self.fig = matplotlib.backends.backend_tkagg.FigureCanvasTkAgg(self.fig1, master=frameFig)
        self.a1 = self.fig1.add_subplot(121)
        self.a2 = self.fig1.add_subplot(122)
        self.fig.show()
        self.fig.get_tk_widget().pack(side=BOTTOM)

        frameConfig = LabelFrame(
            frameBOTTOM, text="Filter configuration", relief=RAISED, borderwidth=1, background="white"
        )
        frameConfig.pack(fill=BOTH, expand=1, side=RIGHT, padx=10)

        frameIAF = LabelFrame(frameConfig, text="Individual Alpha Frequency (IAF)")
        frameIAF.config(bg="white")
        frameIAF.pack(expand=1, side=TOP, padx=10)

        self.inputIAF = Entry(frameIAF, width=5)
        self.inputIAF.pack(side=LEFT, padx=5)
        self.inputIAF.delete(0, END)
        self.inputIAF.insert(0, "0")

        self.buttonWriteDefault = Button(frameIAF, text="Update Filters", command=self.updateFilters)
        self.buttonWriteDefault.pack(side=LEFT, padx=5, pady=5)

        frameFilters = LabelFrame(frameConfig, text="Filters", relief=RAISED, borderwidth=1, background="white")
        frameFilters.pack(fill=X, expand=1, side=TOP)

        # THETA FRAME
        frameTheta = LabelFrame(frameFilters, text="Theta", relief=RAISED, borderwidth=1, background="white")
        frameTheta.pack(expand=1, side=TOP, pady=5, padx=5)

        self.inputThetaLow = Entry(frameTheta, width=8)
        self.inputThetaLow.pack(side=LEFT, padx=5, pady=5)
        self.inputThetaLow.delete(0, END)
        self.inputThetaLow.insert(0, "0")

        self.inputThetaHigh = Entry(frameTheta, width=8)
        self.inputThetaHigh.pack(side=LEFT, padx=5, pady=5)
        self.inputThetaHigh.delete(0, END)
        self.inputThetaHigh.insert(0, "0")

        # BETA FRAME
        frameBeta = LabelFrame(frameFilters, text="Beta", relief=RAISED, borderwidth=1, background="white")
        frameBeta.pack(expand=1, side=TOP, pady=5, padx=5)

        self.inputBetaLow = Entry(frameBeta, width=8)
        self.inputBetaLow.pack(side=LEFT, padx=5, pady=5)
        self.inputBetaLow.delete(0, END)
        self.inputBetaLow.insert(0, "0")

        self.inputBetaHigh = Entry(frameBeta, width=8)
        self.inputBetaHigh.pack(side=LEFT, padx=5, pady=5)
        self.inputBetaHigh.delete(0, END)
        self.inputBetaHigh.insert(0, "0")

        # SMR FRAME
        frameSMR = LabelFrame(frameFilters, text="SMR", relief=RAISED, borderwidth=1, background="white")
        frameSMR.pack(expand=1, side=TOP, pady=5, padx=5)

        self.inputSMRLow = Entry(frameSMR, width=8)
        self.inputSMRLow.pack(side=LEFT, padx=5, pady=5)
        self.inputSMRLow.delete(0, END)
        self.inputSMRLow.insert(0, "0")

        self.inputSMRHigh = Entry(frameSMR, width=8)
        self.inputSMRHigh.pack(side=LEFT, padx=5, pady=5)
        self.inputSMRHigh.delete(0, END)
        self.inputSMRHigh.insert(0, "0")

        frameButtons = LabelFrame(frameConfig, text="Commands", relief=RAISED, borderwidth=1, background="white")
        frameButtons.pack(expand=1, side=BOTTOM)

        self.buttonWriteConfig = Button(frameButtons, text="Write Filters", command=self.writeFilters)
        self.buttonWriteConfig.pack(side=LEFT, padx=5, pady=5)

        self.buttonWriteDefault = Button(frameButtons, text="Reset to Defaults", command=self.resetIAFtoDefault)
        self.buttonWriteDefault.pack(side=LEFT, padx=5, pady=5)

        # self.buttonVisualize = Button(frameButtons, text="VIS",command=self.resetIAFtoDefault)
        # self.buttonVisualize.pack(side=LEFT,padx=5,pady=5)

        self.buttonPrintFig = Button(frameButtons, text="Print Figure", command=self.printFigureToFile)
        self.buttonPrintFig.pack(side=LEFT, padx=5, pady=5)
Пример #6
0
class QRMainWindow(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.serial_num = StringVar()
        self.master = master
        self.__initUi()

    #===========================================================================
    # Initialize and reset GUI
    #===========================================================================
    def __initUi(self):
        self.master.title('Shine Production')
        self.pack(fill=BOTH, expand=1)

        Style().configure("TFrame", background="#333")

        #Status frame
        self.status_frame = LabelFrame(self,
                                       text='Status',
                                       relief=RIDGE,
                                       width=800,
                                       height=500)
        self.status_frame.place(x=20, y=20)

        #QRFrame
        self.path_frame = LabelFrame(self,
                                     text='QR Serial Code',
                                     relief=RIDGE,
                                     height=60,
                                     width=225)
        self.path_frame.place(x=400, y=550)
        entry = Entry(self.path_frame, bd=5, textvariable=self.serial_num)
        entry.place(x=50, y=5)

        #START
        self.start_button = Button(self,
                                   text="Start",
                                   command=self.start,
                                   height=4,
                                   width=20)
        self.start_button.place(x=100, y=550)

    def start(self):
        self.start_button.config(state=DISABLED)
        self.start_button.update()
        self.__setStatusLabel(2)

        success = executeQRSerialSequence(self.serial_num.get())
        self.serial_num.set("")
        self.__setStatusLabel(success)

        self.start_button.config(state=ACTIVE)
        self.start_button.update()

    def __setStatusLabel(self, success):
        if success == 1:
            self.status_frame.config(text='SUCCESS', bg=STATUS_OK_COLOR)
        elif success > 1:
            self.status_frame.config(text='Status', bg='yellow')
        elif success == -1:
            self.status_frame.config(
                text='ERROR CONNECTING TO SOURCE METER. TRY AGAIN.', bg='blue')
        elif success == -2:
            self.status_frame.config(
                text='PC IS NOT CONNECTED TO INTERNET!!!!.', bg='blue')
        else:
            self.status_frame.config(text='FAIL', bg=STATUS_ERROR_COLOR)
        self.update()
Пример #7
0
class GuiMainWindow(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.serial_num = StringVar()
        self.gpioPin = StringVar()
        self.serial_num_smt = StringVar()
        self.master = master
        self.results = StringVar()
        self.debug_mode = BooleanVar()
        self.__initUi()

    #===========================================================================
    # Initialize and reset GUI
    #===========================================================================
    def __initUi(self):
        self.master.title('GPIO Test')
        self.pack(fill=BOTH, expand=1)

        Style().configure("TFrame", background="#333")

        # Status of Test frame
        self.status_frame = LabelFrame(self,
                                       text='Status',
                                       relief=RIDGE,
                                       width=235,
                                       height=100)
        self.status_frame.place(x=20, y=20)

        self.path_frame_1 = LabelFrame(self,
                                       text='GPIO Pin (between 0 and 27)',
                                       relief=RIDGE,
                                       height=60,
                                       width=235)
        self.path_frame_1.place(x=20, y=150)
        self.entry_1 = Entry(self.path_frame_1,
                             bd=5,
                             textvariable=self.gpioPin)
        self.entry_1.place(x=20, y=5)
        self.entry_1.focus_set()

        # TEST RESULTS LABEL
        w = Label(self.status_frame, textvariable=self.results)
        w.place(x=50, y=50)

        # Toggle Button
        self.toggleButton = Button(self,
                                   text="Toggle",
                                   command=self.toggle,
                                   height=4,
                                   width=20,
                                   background='green')
        self.toggleButton.place(x=20, y=250)
        self.toggleButton.bind('<Return>', lambda e: self.hi())

        self.isHi = False
        gpio_ns_init()

    def toggle(self):

        pin = self.entry_1.get()
        if pin == "":
            self.status_frame.config(text="Invalid pin!",
                                     bg=STATUS_ERROR_COLOR)
            return

        validPin = re.match('^[0-9]{1,2}$', pin)

        if not validPin or (int(pin) < 4 or int(pin) > 27):
            self.status_frame.config(text="Invalid pin!",
                                     bg=STATUS_ERROR_COLOR)
            return

        if self.isHi:
            self.status_frame.config(text='Pin is low', bg=STATUS_OK_COLOR)
            self.isHi = False
            self.toggleButton['text'] = "Set Hi"
            gpio_ns_write(int(pin), GPIO_LO)
        else:
            self.isHi = True
            self.status_frame.config(text='Pin is hi', bg=STATUS_OK_COLOR)
            self.toggleButton['text'] = "Set Low"
            gpio_ns_write(int(pin), GPIO_HI)
Пример #8
0
class view(Tk):
    
    def mkStringVar(self, s):
        R = StringVar()
        R.set(s)
        return R
    
    def mkLabel(self, f, T, r, c, rs=1, cs=1):
        if isinstance(T, type(StringVar())):
            R = Label(f, textvariable = T, relief=GROOVE, borderwidth=2)
        else:
            R = Label(f, text = T, relief=GROOVE, borderwidth=2)
        R.grid(row=r, column=c, rowspan=rs, columnspan=cs, sticky="wens")
        return R

    def mkLabelList(self, f, SV, r):
        R = []
        for i in range(len(SV)):
            R.append(self.mkLabel(f, SV[i], r, i+1))
        return R

    def mkButton(self, f, t, r, c, rs=1, cs=1):
        R = Button(f, text=t)
        R.grid( row=r, column=c, rowspan=rs, columnspan=cs, sticky="wens")
        return R

# ===== HALT et cetera =========================================================

    def mkHaltArea(self, f):
        self.HALTframe = Frame(f)
        self.HALTframe.config(relief=GROOVE)
        self.HALTframe.config(borderwidth=2)

        self.HALTbutton = Button(self.HALTframe, text = "HALT", width=10)
        self.READMEbutton = Button(self.HALTframe, text = "README", width=10)

        self.HALTbutton.config(borderwidth=2, relief=GROOVE, fg="red")
        self.HALTbutton.config(command = self.quit)
        self.READMEbutton.config(borderwidth=2, relief=GROOVE, fg="red")

        self.HALTbutton.pack(side=LEFT, fill=BOTH)
        self.READMEbutton.pack(side=RIGHT, fill=BOTH)

        self.HALTframe.grid(row=0, column=9, rowspan=1, columnspan=4, sticky="wens")

# ==============================================================================

    def mkProgramControl(self, f):        
        self.PROGRAMCONTROLframe = Frame(f)
        self.PROGRAMCONTROLframe.config(relief=GROOVE)
        self.PROGRAMCONTROLframe.config(borderwidth=2)

        self.runButton = Button(self.PROGRAMCONTROLframe, text="RUN", width=10)
        self.runButton.grid(row=0, column=0, sticky="wens", padx=29, pady=7)

        self.stepButton = Button(self.PROGRAMCONTROLframe, text="STEP", width=10)
        self.stepButton.grid(row=1, column=0, sticky="wens", padx=29, pady=5)

        self.noStepButton = Button(self.PROGRAMCONTROLframe, text="NOSTEP", width=10)
        self.noStepButton.grid(row=2, column=0, sticky="wens", padx=29, pady=7)

        self.PROGRAMCONTROLframe.grid(row=17, column=11, rowspan=6, columnspan=2, sticky="wens")

# ==============================================================================

    def getPGMfileName(self):
        options = {'filetypes': [('pgm files', '.pgm')]}
        f = askopenfilename(**options)
        g = f.split('/')
        self.filenameVar.set(g[len(g) - 1])
        return f

    def mkProgramLoad(self, f):
        self.PROGRAMLOADframe = Frame(f)
        self.PROGRAMLOADframe.config(relief=GROOVE)
        self.PROGRAMLOADframe.config(borderwidth=2)

        self.loadPGMbutton = Button(self.PROGRAMLOADframe, text="Load PGM")
        self.loadPGMbutton.config(width=14)
        self.loadPGMbutton.pack(side=LEFT, fill=BOTH, padx=20, pady=5)
        
        self.filenameVar = StringVar()
        self.filenameVar.set("*****.pgm")
        
        self.fileNameLabel = Label(self.PROGRAMLOADframe, textvariable=self.filenameVar)
        self.fileNameLabel.config(relief=GROOVE, borderwidth=2, width=17)
        self.fileNameLabel.pack(side=RIGHT, fill=BOTH, padx=20, pady=5)

        self.PROGRAMLOADframe.grid(row=15, column=9, rowspan=2, columnspan=4, sticky="wens")

# ==============================================================================

    def mkMemory(self, f):
        self.MEMORYframe = Frame(f)
        self.MEMORYframe.config(relief=GROOVE)
        self.MEMORYframe.config(borderwidth=2)

        E = Frame(self.MEMORYframe)

        self.CLEAR = self.mkButton(E, "ClearMem", 0, 0)
        self.RANDOM = self.mkButton(E, "RandomMem", 0, 1)
        self.READ = self.mkButton(E, "ReadMem", 1, 0)
        self.WRITE = self.mkButton(E, "WriteMem", 1, 1)
        self.BUSTOMEM = self.mkButton(E, "BusToMem", 2, 0, 1, 2)

        F = Frame(self.MEMORYframe)
        
        for i in Range8:
            L = Label(F, textvariable=self.MEMORY[i])
            L.config(relief=GROOVE, borderwidth=2, bg="black", fg="yellow", height=1)
            L.grid(row=0, column=i, sticky="wens", ipadx=5)

        E.pack(side=TOP)
        F.pack(side=BOTTOM)

        self.MEMORYframe.grid(row=18, column=9, rowspan=5, columnspan=2, sticky="wens")

# ==============================================================================

    def mkDataBus(self, f):
        self.DBframe = Frame(f)
        self.DBframe.config(relief=GROOVE)
        self.DBframe.config(borderwidth=2, bg="red")
        self.DBframe.grid(row=0, column=0, rowspan=1, \
                          columnspan=9, sticky="wens")
        
        self.databusLabel = Label(self.DBframe, text="Data\nBus", width=10)
        self.databusLabel.pack(side=LEFT)

        self.DATABUSbuttons = []
        for i in Range8:
            b = Button(self.DBframe, textvariable=self.DATABUS[i])
            b.pack(side=LEFT, fill=BOTH)
            self.DATABUSbuttons.append(b)

    def mkAddressBus(self, f):
        self.ABframe = Frame(f)
        self.ABframe.config(relief=GROOVE)
        self.ABframe.config(borderwidth=2, bg="red")
        self.ABframe.grid(row=26, column=0, rowspan=1, columnspan=13, sticky="wens")
        
        self.AddressBusLabel = Label(self.ABframe, text="Address\nBus", width=12)
        self.AddressBusLabel.pack(side=LEFT)
        
        self.ADDRESSBUSbuttons = []
        for i in Range16:
            b = Button(self.ABframe, textvariable=self.ADDRESSBUS[i])
            b.pack(side=LEFT, fill=BOTH, ipadx=2)
            self.ADDRESSBUSbuttons.append(b)

# ==============================================================================

    def mkALU(self, f):
        self.ALUframe = Frame(f)
        self.ALUframe.config(relief=GROOVE)
        self.ALUframe.config(borderwidth=2)
        
        self.mkFunctionChoice(self.ALUframe)
        self.mkStates(self.ALUframe)
        
        self.ALUframe.grid(row=23, column=9, rowspan=3, columnspan=4, sticky="wens")
        
    def mkFunctionChoice(self, f):
        self.FUNCTIONframe = Frame(f)
        self.FUNCTIONframe.config(relief=GROOVE)
        self.FUNCTIONframe.config(borderwidth=2)

        self.F0label = Label(self.FUNCTIONframe, text="F0", borderwidth=2, relief=GROOVE)
        self.F0label.grid(row=0, column=0, sticky="wens", padx=5)

        self.F1label = Label(self.FUNCTIONframe, text="F1", borderwidth=2, relief=GROOVE)
        self.F1label.grid(row=0, column=1, sticky="wens", padx=8)

        self.F2label = Label(self.FUNCTIONframe, text="F2", borderwidth=2, relief=GROOVE)
        self.F2label.grid(row=0, column=2, sticky="wens", padx=5)

        self.FUNCTIONbuttons = []

        self.F0button = Button(self.FUNCTIONframe)
        self.F0button.config(textvariable=self.FUNCTION[0], borderwidth=2, relief=GROOVE)
        self.F1button = Button(self.FUNCTIONframe)
        self.F1button.config(textvariable=self.FUNCTION[1], borderwidth=2, relief=GROOVE)
        self.F2button = Button(self.FUNCTIONframe)
        self.F2button.config(textvariable=self.FUNCTION[2], borderwidth=2, relief=GROOVE)

        self.FUNCTIONbuttons.append(self.F0button)        
        self.FUNCTIONbuttons.append(self.F1button)
        self.FUNCTIONbuttons.append(self.F2button)

        for i in Range3:
            self.FUNCTIONbuttons[i].grid(row=1, column=i, sticky="wens", padx=5)

        self.FUNCTIONframe.pack(side=LEFT, padx=8, pady=3)

    def mkStates(self, f):
        self.STATESframe = Frame(f)
        self.STATESframe.config(relief=GROOVE)
        self.STATESframe.config(borderwidth=2)

        self.CARRYtag = Label(self.STATESframe, text = " carry ", borderwidth=2, relief=GROOVE)
        self.CARRYtag.grid(row=0, column=0, padx=5, pady=2, sticky="wens")
        
        self.ZEROtag = Label(self.STATESframe, text =  "  zero ", borderwidth=2, relief=GROOVE)
        self.ZEROtag.grid(row=0, column=1, padx=5, pady=1, sticky="wens")
        
        self.SIGNtag = Label(self.STATESframe, text =  "  sign ", borderwidth=2, relief=GROOVE)
        self.SIGNtag.grid(row=0, column=2, padx=5, pady=2, sticky="wens")

        self.CARRY = self.mkStringVar("0")
        self.ZERO  = self.mkStringVar("0")
        self.SIGN  = self.mkStringVar("0")
        
        self.CARRYlabel = Label(self.STATESframe, textvariable = self.CARRY, borderwidth=2, relief=GROOVE)
        self.CARRYlabel.grid(row=1, column=0, padx=5, pady=2, sticky="wens")
        
        self.ZEROlabel = Label(self.STATESframe, textvariable = self.ZERO, borderwidth=2, relief=GROOVE)
        self.ZEROlabel.grid(row=1, column=1, padx=5, pady=1, sticky="wens")
        
        self.SIGNlabel = Label(self.STATESframe, textvariable = self.SIGN, borderwidth=2, relief=GROOVE)
        self.SIGNlabel.grid(row=1, column=2, padx=5, pady=2, sticky="wens")
        
        self.STATESframe.pack(side=RIGHT, padx=8, pady=3)

# ==============================================================================
        
    def mkTagLabels(self, f):
        self.ALabel          = self.mkLabel(f, "A",             1, 0)
        self.BLabel          = self.mkLabel(f, "B",             2, 0)
        self.BLabel.config(bg="black", fg="yellow")
        self.CLabel          = self.mkLabel(f, "C",             3, 0)
        self.CLabel.config(bg="black", fg="yellow")
        self.DLabel          = self.mkLabel(f, "D",             4, 0)
        self.M1Label         = self.mkLabel(f, "M1",            5, 0)
        self.M2Label         = self.mkLabel(f, "M2",            6, 0)
        self.XLabel          = self.mkLabel(f, "X",             7, 0)
        self.YLabel          = self.mkLabel(f, "Y",             8, 0)
        self.J1Label         = self.mkLabel(f, "J1",            9, 0)
        self.J2Label         = self.mkLabel(f, "J2",           10, 0)
        self.PC1Label        = self.mkLabel(f, "PC1",          11, 0)
        self.PC2Label        = self.mkLabel(f, "PC2",          12, 0)
        self.Inc1Label       = self.mkLabel(f, "Inc1",         13, 0)
        self.Inc2Label       = self.mkLabel(f, "Inc2",         14, 0)
        self.IncUnit1Label   = self.mkLabel(f, "IncUnit1",     15, 0)
        self.IncUnit2Label   = self.mkLabel(f, "IncUnit2",     16, 0)
        self.InstLabel       = self.mkLabel(f, "Inst",         17, 0)
        self.addLabel        = self.mkLabel(f, "ADD",          18, 0)
        self.incLabel        = self.mkLabel(f, "INC",          19, 0)
        self.andLabel        = self.mkLabel(f, "AND",          20, 0)
        self.orLabel         = self.mkLabel(f, "OR",           21, 0)
        self.xorLabel        = self.mkLabel(f, "XOR",          22, 0)
        self.notLabel        = self.mkLabel(f, "NOT",          23, 0)
        self.shlLabel        = self.mkLabel(f, "SHL",          24, 0)
        self.clrLabel        = self.mkLabel(f, "CLR",          25, 0)

        self.functionTagLabelDictionary = { (0,0,0) : self.addLabel, \
                                 (0,0,1) : self.incLabel, \
                                 (0,1,0) : self.andLabel, \
                                 (0,1,1) : self.orLabel, \
                                 (1,0,0) : self.xorLabel, \
                                 (1,0,1) : self.notLabel, \
                                 (1,1,0) : self.shlLabel, \
                                 (1,1,1) : self.clrLabel \
                                 }

        for i in self.functionTagLabelDictionary.values():
            i.config(bg="black", fg="yellow")

# ==============================================================================

    def mkRegisterStringVars(self):
        self.FUNCTION   = [ self.mkStringVar("0") for unused_i in Range3 ]
        self.DATABUS    = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.Inst       = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.A          = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.B          = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.C          = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.D          = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.M1         = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.M2         = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.X          = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Y          = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.J1         = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.J2         = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.PC1        = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.PC2        = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Inc1       = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Inc2       = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.IncUnit1   = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.IncUnit2   = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Add        = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.Inc        = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.And        = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.Or         = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Xor        = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Not        = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Shl        = [ self.mkStringVar("0") for unused_i in Range8 ] 
        self.Clr        = [ self.mkStringVar("0") for unused_i in Range8 ]
        self.ADDRESSBUS = [ self.mkStringVar("0") for unused_i in Range16 ]
        self.MEMORY     = [ self.mkStringVar("0") for unused_i in Range8 ]

# ==============================================================================

    def setRegisterLabelColor(self, L, bc, fc="black"):
        for i in L:
            i.config(bg=bc, fg=fc)
    
    def mkRegisterLabels(self, f):
        self.Alabels        = self.mkLabelList(f, self.A,           1)
        self.setRegisterLabelColor(self.Alabels, "gray90")
        self.Blabels        = self.mkLabelList(f, self.B,           2)
        self.setRegisterLabelColor(self.Blabels, "black", "yellow")
        self.Clabels        = self.mkLabelList(f, self.C,           3)
        self.setRegisterLabelColor(self.Clabels, "black", "yellow")
        self.Dlabels        = self.mkLabelList(f, self.D,           4)
        self.setRegisterLabelColor(self.Dlabels, "gray90")
        self.M1labels       = self.mkLabelList(f, self.M1,          5)
        self.setRegisterLabelColor(self.M1labels, "gray90")
        self.M2labels       = self.mkLabelList(f, self.M2,          6)
        self.setRegisterLabelColor(self.M2labels, "gray90")
        self.Xlabels        = self.mkLabelList(f, self.X,           7)
        self.setRegisterLabelColor(self.Xlabels, "gray90")
        self.Ylabels        = self.mkLabelList(f, self.Y,           8)
        self.setRegisterLabelColor(self.Ylabels, "gray90")

        self.J1labels       = self.mkLabelList(f, self.J1,          9)
        self.J2labels       = self.mkLabelList(f, self.J2,         10)
        self.PC1labels      = self.mkLabelList(f, self.PC1,        11)
        self.PC2labels      = self.mkLabelList(f, self.PC2,        12)
        
        self.Inc1labels     = self.mkLabelList(f, self.Inc1,       13)
        self.setRegisterLabelColor(self.Inc1labels, "gray95")
        self.Inc2labels     = self.mkLabelList(f, self.Inc2,       14)
        self.setRegisterLabelColor(self.Inc2labels, "gray95")

        self.IncUnit1labels = self.mkLabelList(f, self.IncUnit1,   15)
        self.setRegisterLabelColor(self.IncUnit1labels, "gray95")
        self.IncUnit2labels = self.mkLabelList(f, self.IncUnit2,   16)
        self.setRegisterLabelColor(self.IncUnit2labels, "gray95")
        
        self.Instlabels     = self.mkLabelList(f, self.Inst,       17)
        
        self.addlabels      = self.mkLabelList(f, self.Add,        18)
        self.setRegisterLabelColor(self.addlabels, "black", "red")
        self.inclabels      = self.mkLabelList(f, self.Inc,        19)
        self.setRegisterLabelColor(self.inclabels, "black", "yellow")
        self.andlabels      = self.mkLabelList(f, self.And,        20)
        self.setRegisterLabelColor(self.andlabels, "black", "yellow")
        self.orlabels       = self.mkLabelList(f, self.Or,         21)
        self.setRegisterLabelColor(self.orlabels, "black", "yellow")
        self.xorlabels      = self.mkLabelList(f, self.Xor,        22)
        self.setRegisterLabelColor(self.xorlabels, "black", "yellow")
        self.notlabels      = self.mkLabelList(f, self.Not,        23)
        self.setRegisterLabelColor(self.notlabels, "black", "yellow")
        self.shllabels      = self.mkLabelList(f, self.Shl,        24)
        self.setRegisterLabelColor(self.shllabels, "black", "yellow")
        self.clrlabels      = self.mkLabelList(f, self.Clr,        25)
        self.setRegisterLabelColor(self.clrlabels, "black", "yellow")
        
        self.functionLabelsDictionary = { (0,0,0) : self.addlabels, \
                                 (0,0,1) : self.inclabels, \
                                 (0,1,0) : self.andlabels, \
                                 (0,1,1) : self.orlabels, \
                                 (1,0,0) : self.xorlabels, \
                                 (1,0,1) : self.notlabels, \
                                 (1,1,0) : self.shllabels, \
                                 (1,1,1) : self.clrlabels \
                                 }

# ===== Load & Select ==========================================================

    def mkLoad8Buttons(self, f):
        self.loadA    = self.mkButton(f, "load A",     1, 9, 1, 2)
        self.loadB    = self.mkButton(f, "load B",     2, 9, 1, 2)
        self.loadC    = self.mkButton(f, "load C",     3, 9, 1, 2)
        self.loadD    = self.mkButton(f, "load D",     4, 9, 1, 2)
        self.loadM1   = self.mkButton(f, "load M1",    5, 9, 1, 2)
        self.loadM2   = self.mkButton(f, "load M2",    6, 9, 1, 2)
        self.loadX    = self.mkButton(f, "load X",     7, 9)
        self.loadY    = self.mkButton(f, "load Y",     8, 9)
        self.loadJ1   = self.mkButton(f, "load J1",    9, 9, 1, 2)
        self.loadJ2   = self.mkButton(f, "load J2",   10, 9, 1, 2)

        self.loadInst = self.mkButton(f, "load Inst", 17, 9, 1, 2)


    def mkLoad16Buttons(self, f):
        self.loadXY  = self.mkButton(f, "load XY",    7, 10, 2, 1)
        self.loadPC  = self.mkButton(f, "load PC",   11,  9, 2, 2)
        self.loadINC = self.mkButton(f, "load INC",  13,  9, 2, 2)

    def mkSelect8Buttons(self, f):
        self.selectA    = self.mkButton(f, "select A",    1, 11, 1, 2)
        self.selectB    = self.mkButton(f, "select B",    2, 11, 1, 2)
        self.selectC    = self.mkButton(f, "select C",    3, 11, 1, 2)
        self.selectD    = self.mkButton(f, "select D",    4, 11, 1, 2)
        self.selectM1   = self.mkButton(f, "select M1",   5, 11)
        self.selectM2   = self.mkButton(f, "select M2",   6, 11)
        self.selectX    = self.mkButton(f, "select X",    7, 11)
        self.selectY    = self.mkButton(f, "select Y",    8, 11)

    def mkSelect16Buttons(self, f):
        self.selectM   = self.mkButton(f, "select M",    5, 12, 2, 1)
        self.selectXY  = self.mkButton(f, "select XY",   7, 12, 2, 1)
        self.selectJ   = self.mkButton(f, "select J",    9, 11, 2, 2)
        self.selectPC  = self.mkButton(f, "select PC",  11, 11, 2, 2)
        self.selectINC = self.mkButton(f, "select INC", 13, 11, 2, 2)

# ===== System Messages ========================================================

    def mkMessageArea(self, f):
        self.text = Text(f, height=36, width=64)
        self.text.configure(font=("Courier", 11, "bold"), bg="black", fg="green")
        self.scroll = Scrollbar(f, command = self.text.yview)        
        self.text.configure(yscrollcommand = self.scroll.set)
        
        self.text.pack(side=LEFT, padx=3, pady=2)
        self.scroll.pack(side=RIGHT, fill=Y, padx=3, pady=2)

    def addText(self, text):
        self.text.insert(END, text + "\n")
        self.text.yview(END)

# ===== Initialization =========================================================

    def __init__(self):
        Tk.__init__(self)
        
        self.title("Virtual Machine")
        self.config(bg="blue")

        self.registers = LabelFrame(self, bg="blue")
        self.registers.config(relief=GROOVE)
        self.registers.config(borderwidth=2)
        self.registers.config(text = "Virtual Machine: controls and states")
        self.registers.config(labelanchor = "nw")
        self.registers.pack(side = LEFT, fill=BOTH)
        
        self.mkRegisterStringVars()
        
        self.mkTagLabels(self.registers)
        self.mkDataBus(self.registers)
        
        self.mkRegisterLabels(self.registers)
        
        self.mkLoad8Buttons(self.registers)
        self.mkLoad16Buttons(self.registers)
        self.mkSelect8Buttons(self.registers)
        self.mkSelect16Buttons(self.registers)
        
        self.mkAddressBus(self.registers)
        
        self.mkALU(self.registers)
        self.mkMemory(self.registers)
        self.mkProgramLoad(self.registers)
        self.mkProgramControl(self.registers)
        self.mkHaltArea(self.registers)

        self.messages = LabelFrame(self, bg="blue")
        self.messages.config(relief=GROOVE)
        self.messages.config(borderwidth=2)
        self.messages.config(text = "Virtual Machine: system messages")
        self.messages.config(labelanchor = "nw")
        self.messages.pack(side = RIGHT, fill=BOTH)

        self.mkMessageArea(self.messages)