Пример #1
0
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)
Пример #2
0
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)
Пример #4
0
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()))