class Application(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.grid() self.createWidgets() self.turtle = Turtle() def createWidgets(self): self.EntryFrame = Frame(self,bd=5) self.EntryFrame.grid(row=0, column=1) i = 0 Label(self.EntryFrame, text='Type some Python code\n').grid(row=i, column=0, columnspan=2) i += 1 Label(self.EntryFrame, text='The Code').grid(row=i, column=0, sticky=E) self.text = Text(self.EntryFrame, width=50, height=10) self.text.grid(row=i, column=1) self.EntryFrame.after(1000, self.runCode) def runCode(self): t = self.turtle script = self.text.get("1.0", "end-1c") try: t.tracer(100000) t.reset() exec script in globals(), locals() t.tracer(1) except: pass self.EntryFrame.after(1000, self.runCode)
class Application(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.grid() self.createWidgets() self.turtle = Turtle() def createWidgets(self): self.EntryFrame = Frame(self, bd=5) self.EntryFrame.grid(row=0, column=1) i = 0 Label(self.EntryFrame, text='Type some Python code\n').grid(row=i, column=0, columnspan=2) i += 1 Label(self.EntryFrame, text='The Code').grid(row=i, column=0, sticky=E) self.text = Text(self.EntryFrame, width=50, height=10) self.text.grid(row=i, column=1) self.EntryFrame.after(1000, self.runCode) def runCode(self): t = self.turtle script = self.text.get("1.0", "end-1c") try: t.tracer(100000) t.reset() exec script in globals(), locals() t.tracer(1) except: pass self.EntryFrame.after(1000, self.runCode)
class App: ### (1) def __init__(self, myParent): ### (1a) self.status = Tk.StringVar() self.status.set('Avaiting indicators from game session') self.statuswidg = Tk.Label(myParent, textvariable=self.status, fg=FG, bg=BG, font=labelfonts) try: if settings['STATUSBAR']==1: self.statuswidg.pack() except: pass self.frame = Frame(myParent) self.frame.pack() self.statusbar = Frame(myParent) self.statusbar.pack() self.frame.config(bg=BGG) self.ind = get_indicators() self.inds = {} self.t_m=time.time() self.frame.after(int(dt*1000), self.upd) def inds_to_disp(self, master): ind_d = {} for instr in NEEDED_INSTRUMENTS: if DRAW_ALL: ind_d[instr] = self.get_instr(instr, master) else: for available in self.ind.keys(): if instr in available: ind_d[available] = self.get_instr(available, master) try: if settings[instr+'_bind'] == available: ind_d[instr] = self.get_instr(instr, master, label=True) except: pass return ind_d def upd(self): d = get_indicators() ## print len(d), 'en d' try: ## print d['valid'], 'valid' if 'vario' not in d and len(d)>1: d['vario'] = (d['altitude_hour']-self.ind['altitude_hour'])/(time.time()-self.t_m) self.t_m=time.time() except Exception: try: if len(d)>1: d['vario'] = '--' except: pass self.ind = d if len(d) == 0: for child in self.frame.winfo_children(): child.destroy() self.inds={} self.ind ={} self.status.set('No response from game at: '+"HTTP://"+ADDRESS+":8111/indicators") elif d['valid'] and len(self.inds)>0: self.status.set('In game at: '+"HTTP://"+ADDRESS+":8111/indicators") for ind in self.inds.values(): try: ind.update(d[ind.name]) except: ind.update('--') elif d['valid']==False and len(self.inds)>0: for child in self.frame.winfo_children(): child.destroy() self.inds={} self.ind ={} elif d['valid']==True and len(self.inds)<1: ds = self.inds_to_disp(self.frame) self.inds = ds if len(d) != 0 and d['valid']==False: if len(self.frame.winfo_children())<1: self.status.set('Avaiting indicators from game session') self.frame.after(int(dt*1000), self.upd) def get_instr(self, instr, master, label=False): if 'water_temperature' in instr: return WaterTempInd(master, instr) elif label==True: return GenericLabel(master, instr) elif 'oil_temperature' in instr: return OilTempInd(master, instr) elif 'ammo' in instr: return AmmoInd(master, instr) elif 'vario' in instr: return VarioInd(master, instr) elif 'head_temperature' in instr: return HeadTempInd(master, instr) elif "flaps, %" == instr: return FlapsInd(master, instr) elif "gear, %" in instr: return GearInd(master, instr) elif "airbrake, %" in instr: ## print 'airbrake in instr' return AirbrakeInd(master, instr) else: return GenericInd(master, instr)
class DataCollector: def __init__(self, master): self.master = master master.title("Robostats Data Collector") global Labels self.grassLabels = Labels #class vars self.isRecording = False self.directory_name = StringVar() self.grassLabel = StringVar() self.grassLabel.set(self.grassLabels[0]) self.lastcaptime = 0 self.count = [IntVar() for i in range(len(self.grassLabels))] #self.countText = [StringVar(), StringVar(), StringVar()] self.countText = [StringVar() for i in range(len(self.grassLabels))] for i in range(len(self.grassLabels)): self.countText[i].set(self.grassLabels[i] + ":" + str(self.count[i].get())) self.capRate = 10 global CameraNum self.cap = cv2.VideoCapture(CameraNum) self.controlFrame = Frame(self.master) self.directory_label = Label(self.controlFrame, text="Save Directory:") self.dir_box = Entry(self.controlFrame, width=50, textvariable=self.directory_name) self.directoryButton = Button(self.controlFrame, text="Browse", command=self.set_directory) self.rateFrame = Frame(self.master) self.rateLabel = Label(self.rateFrame, text="Captures per second: ") self.rateSlider = Scale(self.rateFrame, from_=.1, to=30, orient=HORIZONTAL, resolution=0.1, sliderlength=15, length=300, command=self.set_rate) self.buttonFrame = Frame(self.master) self.startButton = Button(self.buttonFrame, text="Start", command=self.start_record, height=5, width=12, bg="#47BD5C") self.stopButton = Button(self.buttonFrame, text="Stop", command=self.stop_record, height=5, width=12, bg="red") self.labelButtonFrame = Frame(self.master) self.typeButton = [ Button(self.labelButtonFrame, text=self.grassLabels[i], height=3, command=lambda num=i: self.set_label(num), width=int(50 / len(self.grassLabels))) for i in range(len(self.grassLabels)) ] self.typeButton[0].config(relief=SUNKEN, bg="#F7C45D") # self.typeButton = [ # Button(self.labelButtonFrame, text=self.grassLabels[0], command=lambda:self.set_label(0), height=3, width=10, relief=SUNKEN, bg="#F7C45D"), # Button(self.labelButtonFrame, text=self.grassLabels[1], command=lambda:self.set_label(1), height=3, width=10), # Button(self.labelButtonFrame, text=self.grassLabels[2], command=lambda:self.set_label(2), height=3, width=10) # ] self.infoFrame = Frame(self.master) self.countLabel = [ Label(self.infoFrame, textvariable=self.countText[i]) for i in range(len(self.grassLabels)) ] # self.countLabel = [ # Label(self.infoFrame, textvariable=self.countText[0]), # Label(self.infoFrame, textvariable=self.countText[1]), # Label(self.infoFrame, textvariable=self.countText[2]) # ] #layout #self.imageFrame.grid(row=0, column=0) #self.lmain.grid(row=0, column=0) curFrameRow = 0 self.controlFrame.grid(row=curFrameRow, column=0) self.directory_label.grid(row=1, column=0) self.dir_box.grid(row=1, column=1) self.directoryButton.grid(row=1, column=2) curFrameRow += 1 self.rateFrame.grid(row=curFrameRow, column=0) self.rateLabel.grid(row=0, column=0) self.rateSlider.grid(row=0, column=1) curFrameRow += 1 self.buttonFrame.grid(row=curFrameRow, column=0, pady=10) self.startButton.grid(row=0, padx=5) self.stopButton.grid(row=0, column=1, padx=5) curFrameRow += 1 self.labelButtonFrame.grid(row=curFrameRow, column=0) col = 0 for button in self.typeButton: button.grid(row=0, column=col, padx=10) col += 1 curFrameRow += 1 self.infoFrame.grid(row=curFrameRow, column=0, pady=10) col = 0 for label in self.countLabel: label.grid(row=0, column=col) col += 1 def set_directory(self): filename = tkFileDialog.askdirectory() self.directory_name.set(filename) self.update_counters() def set_label(self, num): print "num: " + str(num) for i, button in enumerate(self.typeButton): if i != num: button.config(relief=RAISED, bg=self.master.cget('bg')) else: button.config(relief=SUNKEN, bg="#F7C45D") self.grassLabel.set(self.grassLabels[num]) def set_rate(self, val): self.capRate = float(val) def show_frame(self): _, frame = self.cap.read() #frame = cv2.flip(frame, 1) cv2.imshow("Robostats Data Collector", frame) cv2.waitKey(1) #cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA) #img = Image.fromarray(cv2image) #imgtk = ImageTk.PhotoImage(image=img) #self.lmain.imgtk = imgtk #self.lmain.configure(image=imgtk) #save if started if self.isRecording: if os.path.exists(self.directory_name.get()): millis = int(round(time.time() * 1000)) if millis > self.lastcaptime + (1000 / self.capRate): labelDir = self.directory_name.get( ) + "/" + self.grassLabel.get() if not os.path.exists(labelDir): os.makedirs(labelDir) #check existing files listOfFiles = [f for f in os.listdir(labelDir)] print listOfFiles maxNum = 0 if len(listOfFiles) > 0: fileNums = [ int(re.search(r'\d+', n).group()) for n in listOfFiles ] maxNum = max(fileNums) filename = labelDir + "/" + self.grassLabel.get() + str( maxNum + 1) + ".png" #print("saved" + str(filename)) cv2.imwrite(filename, frame) self.lastcaptime = millis self.update_counters() self.controlFrame.after(10, self.show_frame) def start_record(self): self.isRecording = True def stop_record(self): self.isRecording = False def update_counters(self): for i, label in enumerate(self.grassLabels): labelDir = self.directory_name.get() + "/" + label if not os.path.exists(labelDir): os.makedirs(labelDir) #check existing files listOfFiles = [f for f in os.listdir(labelDir)] maxNum = 0 if len(listOfFiles) > 0: fileNums = [ int(re.search(r'\d+', n).group()) for n in listOfFiles ] maxNum = max(fileNums) #print maxNum self.count[i].set(maxNum) for i in range(len(self.grassLabels)): self.countText[i].set(self.grassLabels[i] + ":" + str(self.count[i].get()))