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()
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)
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)
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)
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)
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()
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)
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)