예제 #1
0
파일: start.py 프로젝트: ofer515/project
def main1():
    main_window = Tk()
    main_window.geometry("500x500")
    main_window.iconbitmap(os.path.abspath(
        os.curdir + "\Assets\Alien_robot.ico"))  #r"C:\Users\ofer\Desktop\github files\project\Alien_robot.ico")
    main_window.wm_title("Personal Helper!")
    l = Label(text="Personal helper!")
    CheckVal1 = IntVar()
    w = Checkbutton(main_window, text="work", variable=CheckVal1, \
                    onvalue=1, offvalue=0, height=5, \
                    width=20)
    b = Button(main_window, text="start scanning for programs", command=scan_computer_programs)
    #c = Button(main_window, text="block all gaming apps", command=running_programs(main_window,True))
    l.pack()
    b.pack()
    c.pack()
    w.pack()
    print CheckVal1
    main_window.mainloop()
예제 #2
0
class RhythmTrackFrame(TrackFrame):
    def __init__(self, master, track, sequencer):
        TrackFrame.__init__(self, master, track)

        self.id_label = Label(self, text=str(track.id))
        self.id_label.pack(side='left')

        self.instrument_label = Label(self, text=str(track.instrument_tone), width=3)
        self.instrument_label.pack(side='left')

        mute_var = IntVar()

        self.mute_toggle = Checkbutton(self, command=lambda: check_cmd(track, mute_var), variable=mute_var)
        self.mute_toggle.pack(side='left')

        mute_var.set(not track.mute)

        rhythm_frame = Frame(self)
        rhythm_frame.pack(side='right')

        subdivision = sequencer.measure_resolution / sequencer.beats_per_measure

        self.buttons = []

        for b in range(0, len(self.track.rhythms)):
            button = RhythmButton(rhythm_frame, track, b, not b % subdivision)
            self.buttons.append(button)
            button.grid(row=0, column=b, padx=1)

        self.beat = 0

    def set_time(self, beat):
        self.buttons[self.beat].playing = False
        self.buttons[self.beat].toggle_visual()
        self.beat = beat
        self.buttons[self.beat].playing = True
        self.buttons[self.beat].toggle_visual()

    def destroy(self):
        return TrackFrame.destroy(self)
예제 #3
0
    def insert_checkbutton(self, text, frame_name, side, varname, stick=None, default=None, callback=None):
        """Inserts a check button widget in the specified frame.
        ARGS:
          * var: a TKinter supported variable, such as IntVar(), StrVar(),
          and etc."""

        # create a variable for this task
        var = BooleanVar()
        if default is not None:
            var.set(default)

        # create the widget
        frame = self.frames[frame_name]
        check = Checkbutton(frame, text=text, variable=var, command=callback)
        check.pack(side=self.TkSide[side], anchor=stick)

        # save data regarding the widget
        if self.checkbuttons.get(frame_name, None) == None:
            self.checkbuttons[frame_name] = {}

        self.checkbuttons[frame_name][varname] = {'button':check,
                                                  'var':var}
예제 #4
0
파일: start.py 프로젝트: ofer515/project
def main1():
    main_window = Tk()
    main_window.geometry("500x500")
    main_window.iconbitmap(
        os.path.abspath(os.curdir + "\Assets\Alien_robot.ico")
    )  #r"C:\Users\ofer\Desktop\github files\project\Alien_robot.ico")
    main_window.wm_title("Personal Helper!")
    l = Label(text="Personal helper!")
    CheckVal1 = IntVar()
    w = Checkbutton(main_window, text="work", variable=CheckVal1, \
                    onvalue=1, offvalue=0, height=5, \
                    width=20)
    b = Button(main_window,
               text="start scanning for programs",
               command=scan_computer_programs)
    #c = Button(main_window, text="block all gaming apps", command=running_programs(main_window,True))
    l.pack()
    b.pack()
    c.pack()
    w.pack()
    print CheckVal1
    main_window.mainloop()
예제 #5
0
    def initUI(self):


        self.parent.title("Simple")
        self.pack(fill=BOTH, expand=True)
        self.centerWindow()

        sw = self.parent.winfo_screenwidth()
        sh = self.parent.winfo_screenheight()

        frame1 = Frame(self, relief=RAISED, borderwidth=1)
        frame1.pack(fill=X)

        button1 = Button(frame1, text=u"<", command=self.prevDocument)
        button1.pack(side=LEFT, padx=5, pady=5)

        button2 = Button(frame1, text=u">", command=self.nextDocument)
        button2.pack(side=LEFT, padx=5, pady=5)


        self.selCategory = StringVar(self)
        self.categoryOption = OptionMenu(frame1, self.selCategory, *["Categories"], command=self.changeCategory)
        self.categoryOption.pack(side=LEFT, padx=5, pady=5)

        self.entry1 = Entry(frame1)
        self.entry1.pack(side=LEFT, padx=5, pady=5)

        self.ignoreActualDocVar = IntVar(self)

        checkButton1 = Checkbutton(frame1, text="Ignored", variable=self.ignoreActualDocVar)
        checkButton1.pack(side=LEFT, padx=5, pady=5)

        button3 = Button(frame1, text=u"Save document", command=self.prevDocument)
        button3.pack(side=LEFT, padx=5, pady=5)

        #entry1 = Entry(frame1)
        #entry1.pack(fill=X, padx=5, expand=True)




        frame2 = PanedWindow(self, orient=HORIZONTAL)
        frame2.pack(fill=BOTH, expand=1)

        self.txt1 = Text(frame2, width=sw/22)
        frame2.add(self.txt1)

        self.txt2 = Text(frame2)
        self.txt2.bind("<Button-3>", self.popup)      
        frame2.add(self.txt2)






        frame3 = Frame(self, relief=RAISED, borderwidth=1)
        frame3.pack(fill=X)

        #lbl3 = Label(frame3, text="Author", width=6)
        #lbl3.pack(side=LEFT, padx=5, pady=5)

        #entry3 = Entry(frame3)
        #entry3.pack(fill=X, padx=5, expand=True)

        self.swVar = IntVar(self)
        checkButton1 = Checkbutton(frame3, text="Remove stop words", variable=self.swVar)
        checkButton1.pack(side=LEFT, padx=5, pady=5)

        self.lowerVar = IntVar(self)
        checkButton1 = Checkbutton(frame3, text="Convert to lower case", variable=self.lowerVar)
        checkButton1.pack(side=LEFT, padx=5, pady=5)

        button3 = Button(frame3, text=u"Apply", command=self.applyProcessing)
        button3.pack(side=LEFT, padx=5, pady=5)

        #self.readCorpus()
        


	# create a toplevel menu
	menubar = Menu(self)


        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Quit", command=self.parent.quit)
        filemenu.add_command(label="Open corpus", command=self.loadCorpus)
        menubar.add_cascade(label="Project", menu=filemenu)
	#menubar.add_command(label="Quit!")  # , command=root.quit

	# display the menu
	self.parent.config(menu=menubar)

	self.popupmenu = Menu(self.parent, tearoff=0)
	self.popupmenu.add_command(label="Undo", command=self.hello)
	self.popupmenu.add_command(label="Redo", command=self.hello)
    def initUI(self):

        #Parent Frame
        self.parent.title("Test Stand Control Panel")
        self.style = Style()
        self.style.theme_use("default")

        self.pack(fill=BOTH, expand=1)


        # Frame 1 (top)
        frame1 = Frame(self)
        frame1.pack(fill=X, expand=1)

            #Start motor button
        startButton = Button(frame1, text="Start Motor",
            command=self.startMotor)
        startButton.pack(side=LEFT, padx=5, pady=5)     


            #Throttle slider
        lbl1 = Label(frame1, text="Throttle (0-100):", width=14)
        lbl1.pack(side=LEFT, padx=5, pady=5)
        
        self.scale = Scale(frame1, from_=0, to=100, 
            command=self.onScaleThrottle)
        self.scale.pack(side=LEFT, padx=15)
        
        self.label = Label(frame1, text="throttle", textvariable=self.throttlevar, width=5)        
        self.label.pack(side=LEFT)

            #Throttlesweep checkbutton
        self.autovar = BooleanVar()
        cb = Checkbutton(frame1, text="Throttle Sweep",
            variable=self.autovar, command=self.onClickAuto)
        cb.pack(side=LEFT, padx=15)

            #Com port selection field
        droplbl = Label(frame1, text="Serial Port:", width=10)
        droplbl.pack(side=LEFT, padx=5, pady=5)
        self.selected_s_Port = StringVar()
        self.s_Ports = []
        self.drop = OptionMenu(frame1,self.selected_s_Port,"None",*self.s_Ports)
        self.drop.pack(side=LEFT, padx=5)

            #baudrate selection field (disabled)
##       drop2lbl = Label(frame1, text="Baudrate:", width=9)
##        drop2lbl.pack(side=LEFT, padx=5, pady=5)
##        self.baudrate = StringVar()
##        baudrates = [9600, 19200, 38400, 57600, 115200]
##        drop2 = OptionMenu(frame1,self.baudrate,*baudrates)
##        drop2.pack(side=LEFT, padx=5)

            #Start serial button
        comsButton = Button(frame1, text="Start Serial",
            command=self.startSerial)
        comsButton.pack(side=LEFT, padx=5, pady=5)

            #Stop serial button
        comsStopButton = Button(frame1, text="Stop Serial",
            command=self.stopSerial)
        comsStopButton.pack(side=LEFT, padx=5, pady=5)

        # Frame 2 (second line)
        frame2 = Frame(self)
        frame2.pack(fill=X, expand=1)

            #Amperage entry
        lbl2 = Label(frame2, text="Max Motor Current (A):", width=21)
        lbl2.pack(side=LEFT, padx=5, pady=5)
        
        self.MaxA_Entry = Entry(frame2)
        self.MaxA_Entry.pack(side="left", fill=X, padx=5, expand=False)
        self.MaxA_Entry.insert(0, 10)

            #Voltage entry
        lbl3 = Label(frame2, text="Max Motor Voltage (V):", width=20)
        lbl3.pack(side=LEFT, padx=5, pady=5)
        
        self.MaxV_Entry = Entry(frame2)
        self.MaxV_Entry.pack(side="left", fill=X, padx=5, expand=False)
        self.MaxV_Entry.insert(0, 14)

            #Update button
        updateButton = Button(frame2, text="Update Values",
            command=self.updateValues)
        updateButton.pack(side=LEFT, padx=5, pady=5)
        
        # Graph Frame
        framegraph = Frame(self)
        framegraph.pack(fill=X, expand=1)

            #Init figures
        f = Figure(figsize=(4,4), dpi=100)
        self.a = f.add_subplot(2, 2, 1)
        self.d = f.add_subplot(2, 2, 4)
        self.c = f.add_subplot(2, 2, 3)
        self.b = f.add_subplot(2, 2, 2)
        
        f.set_tight_layout(True)

        self.canvas = matplotlib.backends.backend_tkagg.FigureCanvasTkAgg(f, master=self)
        self.canvas.show()
        self.canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)

            #Display Toolbar
        toolbar = NavigationToolbar2TkAgg(self.canvas, framegraph)
        toolbar.update()
        self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
        
        # Frame 0 (Bottom text)
        frame0 = Frame(self)
        frame0.pack(side="bottom", fill="x", expand=1)

            #Display text (allows to give user information)
        self.textboxvar = StringVar()
        self.info = Label(frame0, textvariable=self.textboxvar)
        self.info.pack(side=LEFT, padx=5, pady=5)

        # Button Frame (large buttons, near bottom)
        s = Style() #has its own style
        s.configure('My.TFrame',background='#f7edc3') #fancy colors
        framered = Frame(self, style='My.TFrame')
        framered.pack(side="bottom", fill="x", expand=1)
        #used the tk instead of ttk library for this, allows font and color mods

            #Save Button
        self.saveButton = tk.Button(framered, text="Save Data", bg='green', font=('Arial',20,'bold'),
            command=self.saveData)
        self.saveButton.pack(side="left", padx=5, pady=5)

            #Log button
        self.logButton = tk.Button(framered, text="Start Data Logging", bg="blue", font=('Arial',20,'bold'),
            command=self.logData)
        self.logButton.pack(side="left", padx=5, pady=5)

            #Stop button
        self.stopButton = tk.Button(framered, text="Stop Motor", bg='red', font=('Arial',20,'bold'),
            command=self.stopMotor)
        self.stopButton.pack(side="right", padx=5, pady=5)
예제 #7
0
class SetupBoard(Dialog):
    def __init__(self, parent, title, gameManager):
        self._master = parent
        self._manager = gameManager
        self._load_entry_box_vars()
        self.result = False
        Dialog.__init__(self, parent, title)

    def body(self, master):
        self._npLFrame = LabelFrame(master, text='No. of players:')
        self._npFrameEx1 = Frame(self._npLFrame, width=30)
        self._npFrameEx1.pack(side=LEFT, pady=5, expand=1)
        self._npButton1 = Radiobutton(self._npLFrame, text='Zero (autoplay)',
                                      value=0, variable=self._num_players,
                                      command=self._disable_player_color)
        self._npButton1.pack(side=LEFT, pady=5, expand=1)
        self._npButton2 = Radiobutton(self._npLFrame, text='One',
                                      value=1, variable=self._num_players,
                                      command=self._enable_player_color)
        self._npButton2.pack(side=LEFT, pady=5, expand=1)
        self._npButton3 = Radiobutton(self._npLFrame, text='Two',
                                      value=2, variable=self._num_players,
                                      command=self._disable_player_color)
        self._npButton3.pack(side=LEFT, pady=5, expand=1)
        self._npFrameEx2 = Frame(self._npLFrame, width=30)
        self._npFrameEx2.pack(side=LEFT, pady=5, expand=1)
        self._npLFrame.pack(fill=X)

        self._playerFrame = LabelFrame(master, text='Player color:')
        self._playerFrameEx1 = Frame(self._playerFrame, width=50)
        self._playerFrameEx1.pack(side=LEFT, pady=5, expand=1)
        self._rbColor1 = Radiobutton(self._playerFrame, text='Black',
                                     value=BLACK, variable=self._player_color)
        self._rbColor1.pack(side=LEFT, padx=0, pady=5, expand=1)
        self._rbColor2 = Radiobutton(self._playerFrame, text='White',
                                     value=WHITE, variable=self._player_color)
        self._rbColor2.pack(side=LEFT, padx=0, pady=5, expand=1)
        self._playerFrameEx2 = Frame(self._playerFrame, width=50)
        self._playerFrameEx2.pack(side=LEFT, pady=5, expand=1)
        self._playerFrame.pack(fill=X)

        self._rbFrame = LabelFrame(master, text='Next to move:')
        self._rbFrameEx1 = Frame(self._rbFrame, width=50)
        self._rbFrameEx1.pack(side=LEFT, pady=5, expand=1)
        self._rbTurn1 = Radiobutton(self._rbFrame, text='Black',
                                    value=BLACK, variable=self._player_turn)
        self._rbTurn1.pack(side=LEFT, padx=0, pady=5, expand=1)
        self._rbTurn2 = Radiobutton(self._rbFrame, text='White',
                                    value=WHITE, variable=self._player_turn)
        self._rbTurn2.pack(side=LEFT, padx=0, pady=5, expand=1)
        self._rbFrameEx2 = Frame(self._rbFrame, width=50)
        self._rbFrameEx2.pack(side=LEFT, pady=5, expand=1)
        self._rbFrame.pack(fill=X)

        self._bcFrame = LabelFrame(master, text='Board configuration')
        self._wmFrame = Frame(self._bcFrame, borderwidth=0)
        self._wmLabel = Label(self._wmFrame, text='White men:')
        self._wmLabel.pack(side=LEFT, padx=7, pady=10)
        self._wmEntry = Entry(self._wmFrame, width=40,
                              textvariable=self._white_men)
        self._wmEntry.pack(side=LEFT, padx=10)
        self._wmFrame.pack()

        self._wkFrame = Frame(self._bcFrame, borderwidth=0)
        self._wkLabel = Label(self._wkFrame, text='White kings:')
        self._wkLabel.pack(side=LEFT, padx=5, pady=10)
        self._wkEntry = Entry(self._wkFrame, width=40,
                              textvariable=self._white_kings)
        self._wkEntry.pack(side=LEFT, padx=10)
        self._wkFrame.pack()

        self._bmFrame = Frame(self._bcFrame, borderwidth=0)
        self._bmLabel = Label(self._bmFrame, text='Black men:')
        self._bmLabel.pack(side=LEFT, padx=7, pady=10)
        self._bmEntry = Entry(self._bmFrame, width=40,
                              textvariable=self._black_men)
        self._bmEntry.pack(side=LEFT, padx=10)
        self._bmFrame.pack()

        self._bkFrame = Frame(self._bcFrame, borderwidth=0)
        self._bkLabel = Label(self._bkFrame, text='Black kings:')
        self._bkLabel.pack(side=LEFT, padx=5, pady=10)
        self._bkEntry = Entry(self._bkFrame, width=40,
                              textvariable=self._black_kings)
        self._bkEntry.pack(side=LEFT, padx=10)
        self._bkFrame.pack()
        self._bcFrame.pack(fill=X)

        self._bsState = IntVar()
        self._bsFrame = Frame(master, borderwidth=0)
        self._bsCheck = Checkbutton(self._bsFrame, variable=self._bsState,
                                    text='Start new game with the current setup?')
        self._bsCheck.pack()
        self._bsFrame.pack(fill=X)

        if self._num_players.get() == 1:
            self._enable_player_color()
        else:
            self._disable_player_color()

    def validate(self):
        self.wm_list = self._parse_int_list(self._white_men.get())
        self.wk_list = self._parse_int_list(self._white_kings.get())
        self.bm_list = self._parse_int_list(self._black_men.get())
        self.bk_list = self._parse_int_list(self._black_kings.get())
        if (self.wm_list == None or self.wk_list == None
            or self.bm_list == None or self.bk_list == None):
            return 0  # Error occurred during parsing
        if not self._all_unique(self.wm_list, self.wk_list,
                                self.bm_list, self.bk_list):
            return 0  # A repeated index occurred
        return 1

    def apply(self):
        mgr = self._manager
        model = mgr.model
        view = mgr.view
        state = model.curr_state
        mgr.player_color = self._player_color.get()
        mgr.num_players = self._num_players.get()
        mgr.model.curr_state.to_move = self._player_turn.get()

        # only reset the BoardView if men or kings have new positions
        if (sorted(self.wm_list) != sorted(self._orig_white_men) or
            sorted(self.wk_list) != sorted(self._orig_white_kings) or
            sorted(self.bm_list) != sorted(self._orig_black_men) or
            sorted(self.bk_list) != sorted(self._orig_black_kings) or
            self._bsState.get() == 1):
            state.clear()
            sq = state.squares
            for item in self.wm_list:
                idx = squaremap[item]
                sq[idx] = WHITE | MAN
            for item in self.wk_list:
                idx = squaremap[item]
                sq[idx] = WHITE | KING
            for item in self.bm_list:
                idx = squaremap[item]
                sq[idx] = BLACK | MAN
            for item in self.bk_list:
                idx = squaremap[item]
                sq[idx] = BLACK | KING
            state.to_move = self._player_turn.get()
            state.reset_undo()
            view.reset_view(mgr.model)
        if self._bsState.get() == 1:
            mgr.filename = None
            mgr.parent.set_title_bar_filename()
        state.ok_to_move = True
        self.result = True
        self.destroy()

    def cancel(self, event=None):
        self.destroy()

    def _load_entry_box_vars(self):
        self._white_men = StringVar()
        self._white_kings = StringVar()
        self._black_men = StringVar()
        self._black_kings = StringVar()
        self._player_color = IntVar()
        self._player_turn = IntVar()
        self._num_players = IntVar()
        self._player_color.set(self._manager.player_color)
        self._num_players.set(self._manager.num_players)
        model = self._manager.model
        self._player_turn.set(model.curr_state.to_move)
        view = self._manager.view
        self._white_men.set(', '.join(view.get_positions(WHITE | MAN)))
        self._white_kings.set(', '.join(view.get_positions(WHITE | KING)))
        self._black_men.set(', '.join(view.get_positions(BLACK | MAN)))
        self._black_kings.set(', '.join(view.get_positions(BLACK | KING)))
        self._orig_white_men = map(int, view.get_positions(WHITE | MAN))
        self._orig_white_kings = map(int, view.get_positions(WHITE | KING))
        self._orig_black_men = map(int, view.get_positions(BLACK | MAN))
        self._orig_black_kings = map(int, view.get_positions(BLACK | KING))

    def _disable_player_color(self):
        self._rbColor1.configure(state=DISABLED)
        self._rbColor2.configure(state=DISABLED)

    def _enable_player_color(self):
        self._rbColor1.configure(state=NORMAL)
        self._rbColor2.configure(state=NORMAL)

    def _all_unique(self, *lists):
        s = set()
        total_list = []
        for i in lists:
            total_list.extend(i)
            s = s.union(i)
        return sorted(total_list) == sorted(s)

    def _parse_int_list(self, parsestr):
        try:
            lst = parsestr.split(',')
        except AttributeError:
            return None

        if lst == ['']:
            return []

        try:
            lst = [int(i) for i in lst]
        except ValueError:
            return None

        if not all(((x>=1 and x<=MAX_VALID_SQ) for x in lst)):
            return None

        return lst
예제 #8
0
class AvionicsLogger(KRCCModule):
    def __init__(self, root):
        super().__init__()
        self.root = root
        self.exception = None

        self.list_string = StringVar()
        self.listbox = Listbox(root,
                               listvariable=self.list_string,
                               font='TkFixedFont',
                               width=30)

        self.write_cache = ''
        self.logfile = None
        self.enable_logging = BooleanVar()
        self.enable_logging_checkbox = Checkbutton(
            root,
            var=self.enable_logging,
            text='Enable logging',
            command=self.enable_logging_changed)

        self.logfile_label = Label(root, text='Logfile name:')
        self.logfile_name = StringVar()
        self.logfile_name_entry = Entry(root, textvar=self.logfile_name)

        self.load()

    def write(self, string):
        if self.enable_logging.get() and self.logfile is None:
            if self.logfile_name.get() == '':
                self.logfile_name.set('logs/{}.log'.format(time.time()))
            self.logfile = io.open(self.logfile_name.get(), 'a')
            self.logfile.write(self.write_cache)
            self.write_cache = ''
        self.logfile.write(string)

    def cache(self, string):
        self.write_cache += string

    def enable_logging_changed(self):
        if not self.enable_logging.get():
            self.logfile_name_entry.configure(state=NORMAL)
            if self.logfile is not None:
                self.logfile.close()
                self.logfile = None
                self.logfile_name.set('')
        else:
            self.logfile_name_entry.configure(state=DISABLED)

    def establish_connection_and_run(self):
        error = None
        dots = 0
        connection = None
        while not self.terminate:
            try:
                if connection is None:
                    connection = krpc.connect(name=self.name)
                self.run_with_connection(connection)
                error = None
                dots = 0
            except Exception as e:
                if error != e.args[0]:
                    error = e.args[0]
                    print('\n')
                    print(traceback.format_exc())
                    sys.stdout.write('Retrying')
                if dots > 80:
                    dots = 0
                    sys.stdout.write('\n')
                sys.stdout.write('.')
                dots += 1
                sys.stdout.flush()
                time.sleep(1)
        if connection is not None:
            connection.close()

    def run_with_connection(self, connection):
        logging.debug('KRPC connection established')
        vessel = connection.space_center.active_vessel
        ref = vessel.orbit.body.reference_frame
        flight = connection.add_stream(vessel.flight, ref)
        floats = [
            'mean_altitude',
            'atmosphere_density',
            'ballistic_coefficient',
            'drag_coefficient',
        ]
        vectors = [
            'velocity',
        ]
        colon_pos_float = max([len(v) for v in floats])
        colon_pos_vec = max([len(v) + 3 for v in vectors])
        self.listbox.configure(width=max(colon_pos_float, colon_pos_vec) + 11)

        # Write the log file header.
        self.cache('time\t' + '\t'.join(floats) + '\t')
        s = '{}\t' + '\t'.join('{{}}[{}]'.format(x) for x in [0, 1, 2])
        self.cache('\t'.join(
            s.format(*(v for _ in [0, 1, 2, 3])) for v in vectors))
        self.cache('\n')
        log_sample_interval = 0.01
        next_log_sample = time.time()
        while not self.terminate:
            values = [time.time()]
            strings = []
            for name in floats:
                value = flight().__getattribute__(name)
                values.append(value)
                padding = colon_pos_float - len(name) + 9
                format_string = '{{}}: {{:>{}.3f}}'.format(padding)
                strings.append(format_string.format(name, value))
            for name in vectors:
                value = flight().__getattribute__(name)
                magnitude = value[0]
                padding = colon_pos_float - len(name) + 9
                format_string = '{{}}: {{:>{}.3f}}'.format(padding)
                strings.append(format_string.format(name, magnitude))
                values.append(magnitude)
                padding = colon_pos_vec - len(name) + 2
                format_string = '{{}}[{{}}]: {{:>{}.3f}}'.format(padding)
                for i in [0, 1, 2]:
                    values.append(value[i])
                    strings.append(format_string.format(name, i, value[i]))
            if self.enable_logging.get() and time.time() > next_log_sample:
                self.write('\t'.join(['{}'.format(v) for v in values]) + '\n')
                next_log_sample = time.time() + log_sample_interval
            self.list_string.set(tuple(strings))

    def run(self):
        try:
            self.establish_connection_and_run()
            self.logfile_name_entry.destroy()
            self.logfile_label.destroy()
            self.enable_logging_checkbox.destroy()
            self.listbox.destroy()
        except RuntimeError:
            # Should only happen when KeyboardInterrupt is thrown in the MainThread.
            pass
        if self.logfile is not None:
            self.logfile.close()

    @property
    def name(self):
        return 'Avionics Logger'

    def load(self):
        self.listbox.pack(side=LEFT, fill=BOTH)
        self.logfile_label.pack(side=LEFT, anchor=NW)
        self.logfile_name_entry.pack(side=LEFT, anchor=NE, fill=X, expand=True)
        self.enable_logging_checkbox.pack(side=LEFT, anchor=NW)
예제 #9
0
class SetupBoard(Dialog):
    def __init__(self, parent, title, gameManager):
        self._master = parent
        self._manager = gameManager
        self._load_entry_box_vars()
        self.result = False
        Dialog.__init__(self, parent, title)

    def body(self, master):
        self._npLFrame = LabelFrame(master, text='No. of players:')
        self._npFrameEx1 = Frame(self._npLFrame, width=30)
        self._npFrameEx1.pack(side=LEFT, pady=5, expand=1)
        self._npButton1 = Radiobutton(self._npLFrame,
                                      text='Zero (autoplay)',
                                      value=0,
                                      variable=self._num_players,
                                      command=self._disable_player_color)
        self._npButton1.pack(side=LEFT, pady=5, expand=1)
        self._npButton2 = Radiobutton(self._npLFrame,
                                      text='One',
                                      value=1,
                                      variable=self._num_players,
                                      command=self._enable_player_color)
        self._npButton2.pack(side=LEFT, pady=5, expand=1)
        self._npButton3 = Radiobutton(self._npLFrame,
                                      text='Two',
                                      value=2,
                                      variable=self._num_players,
                                      command=self._disable_player_color)
        self._npButton3.pack(side=LEFT, pady=5, expand=1)
        self._npFrameEx2 = Frame(self._npLFrame, width=30)
        self._npFrameEx2.pack(side=LEFT, pady=5, expand=1)
        self._npLFrame.pack(fill=X)

        self._playerFrame = LabelFrame(master, text='Player color:')
        self._playerFrameEx1 = Frame(self._playerFrame, width=50)
        self._playerFrameEx1.pack(side=LEFT, pady=5, expand=1)
        self._rbColor1 = Radiobutton(self._playerFrame,
                                     text='Black',
                                     value=BLACK,
                                     variable=self._player_color)
        self._rbColor1.pack(side=LEFT, padx=0, pady=5, expand=1)
        self._rbColor2 = Radiobutton(self._playerFrame,
                                     text='White',
                                     value=WHITE,
                                     variable=self._player_color)
        self._rbColor2.pack(side=LEFT, padx=0, pady=5, expand=1)
        self._playerFrameEx2 = Frame(self._playerFrame, width=50)
        self._playerFrameEx2.pack(side=LEFT, pady=5, expand=1)
        self._playerFrame.pack(fill=X)

        self._rbFrame = LabelFrame(master, text='Next to move:')
        self._rbFrameEx1 = Frame(self._rbFrame, width=50)
        self._rbFrameEx1.pack(side=LEFT, pady=5, expand=1)
        self._rbTurn1 = Radiobutton(self._rbFrame,
                                    text='Black',
                                    value=BLACK,
                                    variable=self._player_turn)
        self._rbTurn1.pack(side=LEFT, padx=0, pady=5, expand=1)
        self._rbTurn2 = Radiobutton(self._rbFrame,
                                    text='White',
                                    value=WHITE,
                                    variable=self._player_turn)
        self._rbTurn2.pack(side=LEFT, padx=0, pady=5, expand=1)
        self._rbFrameEx2 = Frame(self._rbFrame, width=50)
        self._rbFrameEx2.pack(side=LEFT, pady=5, expand=1)
        self._rbFrame.pack(fill=X)

        self._bcFrame = LabelFrame(master, text='Board configuration')
        self._wmFrame = Frame(self._bcFrame, borderwidth=0)
        self._wmLabel = Label(self._wmFrame, text='White men:')
        self._wmLabel.pack(side=LEFT, padx=7, pady=10)
        self._wmEntry = Entry(self._wmFrame,
                              width=40,
                              textvariable=self._white_men)
        self._wmEntry.pack(side=LEFT, padx=10)
        self._wmFrame.pack()

        self._wkFrame = Frame(self._bcFrame, borderwidth=0)
        self._wkLabel = Label(self._wkFrame, text='White kings:')
        self._wkLabel.pack(side=LEFT, padx=5, pady=10)
        self._wkEntry = Entry(self._wkFrame,
                              width=40,
                              textvariable=self._white_kings)
        self._wkEntry.pack(side=LEFT, padx=10)
        self._wkFrame.pack()

        self._bmFrame = Frame(self._bcFrame, borderwidth=0)
        self._bmLabel = Label(self._bmFrame, text='Black men:')
        self._bmLabel.pack(side=LEFT, padx=7, pady=10)
        self._bmEntry = Entry(self._bmFrame,
                              width=40,
                              textvariable=self._black_men)
        self._bmEntry.pack(side=LEFT, padx=10)
        self._bmFrame.pack()

        self._bkFrame = Frame(self._bcFrame, borderwidth=0)
        self._bkLabel = Label(self._bkFrame, text='Black kings:')
        self._bkLabel.pack(side=LEFT, padx=5, pady=10)
        self._bkEntry = Entry(self._bkFrame,
                              width=40,
                              textvariable=self._black_kings)
        self._bkEntry.pack(side=LEFT, padx=10)
        self._bkFrame.pack()
        self._bcFrame.pack(fill=X)

        self._bsState = IntVar()
        self._bsFrame = Frame(master, borderwidth=0)
        self._bsCheck = Checkbutton(
            self._bsFrame,
            variable=self._bsState,
            text='Start new game with the current setup?')
        self._bsCheck.pack()
        self._bsFrame.pack(fill=X)

        if self._num_players.get() == 1:
            self._enable_player_color()
        else:
            self._disable_player_color()

    def validate(self):
        self.wm_list = self._parse_int_list(self._white_men.get())
        self.wk_list = self._parse_int_list(self._white_kings.get())
        self.bm_list = self._parse_int_list(self._black_men.get())
        self.bk_list = self._parse_int_list(self._black_kings.get())
        if (self.wm_list == None or self.wk_list == None
                or self.bm_list == None or self.bk_list == None):
            return 0  # Error occurred during parsing
        if not self._all_unique(self.wm_list, self.wk_list, self.bm_list,
                                self.bk_list):
            return 0  # A repeated index occurred
        return 1

    def apply(self):
        mgr = self._manager
        model = mgr.model
        view = mgr.view
        state = model.curr_state
        mgr.player_color = self._player_color.get()
        mgr.num_players = self._num_players.get()
        mgr.model.curr_state.to_move = self._player_turn.get()

        # only reset the BoardView if men or kings have new positions
        if (sorted(self.wm_list) != sorted(self._orig_white_men)
                or sorted(self.wk_list) != sorted(self._orig_white_kings)
                or sorted(self.bm_list) != sorted(self._orig_black_men)
                or sorted(self.bk_list) != sorted(self._orig_black_kings)
                or self._bsState.get() == 1):
            state.clear()
            sq = state.squares
            for item in self.wm_list:
                idx = squaremap[item]
                sq[idx] = WHITE | MAN
            for item in self.wk_list:
                idx = squaremap[item]
                sq[idx] = WHITE | KING
            for item in self.bm_list:
                idx = squaremap[item]
                sq[idx] = BLACK | MAN
            for item in self.bk_list:
                idx = squaremap[item]
                sq[idx] = BLACK | KING
            state.to_move = self._player_turn.get()
            state.reset_undo()
            view.reset_view(mgr.model)
        if self._bsState.get() == 1:
            mgr.filename = None
            mgr.parent.set_title_bar_filename()
        state.ok_to_move = True
        self.result = True
        self.destroy()

    def cancel(self, event=None):
        self.destroy()

    def _load_entry_box_vars(self):
        self._white_men = StringVar()
        self._white_kings = StringVar()
        self._black_men = StringVar()
        self._black_kings = StringVar()
        self._player_color = IntVar()
        self._player_turn = IntVar()
        self._num_players = IntVar()
        self._player_color.set(self._manager.player_color)
        self._num_players.set(self._manager.num_players)
        model = self._manager.model
        self._player_turn.set(model.curr_state.to_move)
        view = self._manager.view
        self._white_men.set(', '.join(view.get_positions(WHITE | MAN)))
        self._white_kings.set(', '.join(view.get_positions(WHITE | KING)))
        self._black_men.set(', '.join(view.get_positions(BLACK | MAN)))
        self._black_kings.set(', '.join(view.get_positions(BLACK | KING)))
        self._orig_white_men = map(int, view.get_positions(WHITE | MAN))
        self._orig_white_kings = map(int, view.get_positions(WHITE | KING))
        self._orig_black_men = map(int, view.get_positions(BLACK | MAN))
        self._orig_black_kings = map(int, view.get_positions(BLACK | KING))

    def _disable_player_color(self):
        self._rbColor1.configure(state=DISABLED)
        self._rbColor2.configure(state=DISABLED)

    def _enable_player_color(self):
        self._rbColor1.configure(state=NORMAL)
        self._rbColor2.configure(state=NORMAL)

    def _all_unique(self, *lists):
        s = set()
        total_list = []
        for i in lists:
            total_list.extend(i)
            s = s.union(i)
        return sorted(total_list) == sorted(s)

    def _parse_int_list(self, parsestr):
        try:
            lst = parsestr.split(',')
        except AttributeError:
            return None

        if lst == ['']:
            return []

        try:
            lst = [int(i) for i in lst]
        except ValueError:
            return None

        if not all(((x >= 1 and x <= MAX_VALID_SQ) for x in lst)):
            return None

        return lst
    def initUI(self):

        #Parent Frame
        self.parent.title("Test Stand Control Panel")
        self.style = Style()
        self.style.theme_use("default")

        self.pack(fill=BOTH, expand=1)


        # Frame 1 (top)
        frame1 = Frame(self)
        frame1.pack(fill=X, expand=1)

            #Start motor button
        startButton = Button(frame1, text="Start Motor",
            command=self.startMotor)
        startButton.pack(side=LEFT, padx=5, pady=5)     


            #Throttle slider
        lbl1 = Label(frame1, text="Throttle (0-100):", width=14)
        lbl1.pack(side=LEFT, padx=5, pady=5)
        
        scale = Scale(frame1, from_=0, to=100, 
            command=self.onScaleThrottle)
        scale.pack(side=LEFT, padx=15)
        
        self.throttlevar = StringVar()
        self.throttleval = IntVar()
        self.label = Label(frame1, text="throttle", textvariable=self.throttlevar, width=5)        
        self.label.pack(side=LEFT)

            #Throttlesweep checkbutton
        self.autovar = BooleanVar()
        cb = Checkbutton(frame1, text="Throttle Sweep",
            variable=self.autovar, command=self.onClickAuto)
        cb.pack(side=LEFT, padx=15)

            #Com port selection field
        droplbl = Label(frame1, text="Serial Port:", width=10)
        droplbl.pack(side=LEFT, padx=5, pady=5)
        self.selected_s_Port = StringVar()
        self.s_Ports = []
        drop = OptionMenu(frame1,self.selected_s_Port,"None",*self.s_Ports)
        drop.pack(side=LEFT, padx=5)

            #baudrate selection field (disabled)
##        drop2lbl = Label(frame1, text="Baudrate:", width=9)
##        drop2lbl.pack(side=LEFT, padx=5, pady=5)
##        self.baudrate = StringVar()
##        baudrates = [9600, 19200, 38400, 57600, 115200]
##        drop2 = OptionMenu(frame1,self.baudrate,*baudrates)
##        drop2.pack(side=LEFT, padx=5)

            #Start serial button
        comsButton = Button(frame1, text="Start Serial",
            command=self.startSerial)
        comsButton.pack(side=LEFT, padx=5, pady=5)

            #Stop serial button
        comsStopButton = Button(frame1, text="Stop Serial",
            command=self.stopSerial)
        comsStopButton.pack(side=LEFT, padx=5, pady=5)

        # Frame 2 (second line)
        frame2 = Frame(self)
        frame2.pack(fill=X, expand=1)

            #Amperage entry
        lbl2 = Label(frame2, text="Max Motor Current (A):", width=21)
        lbl2.pack(side=LEFT, padx=5, pady=5)
        
        self.MaxA_Entry = Entry(frame2)
        self.MaxA_Entry.pack(side="left", fill=X, padx=5, expand=False)
        self.MaxA_Entry.insert(0, 10)

            #Voltage entry
        lbl3 = Label(frame2, text="Max Motor Voltage (V):", width=20)
        lbl3.pack(side=LEFT, padx=5, pady=5)
        
        self.MaxV_Entry = Entry(frame2)
        self.MaxV_Entry.pack(side="left", fill=X, padx=5, expand=False)
        self.MaxV_Entry.insert(0, 14)

            #Update button
        updateButton = Button(frame2, text="Update Values",
            command=self.updateValues)
        updateButton.pack(side=LEFT, padx=5, pady=5)
        
        # Graph Frame
        framegraph = Frame(self)
        framegraph.pack(fill=X, expand=1)

            #Init figures
        f = Figure(figsize=(4.5,4.5), dpi=100)
        self.a = f.add_subplot(2, 2, 1)
        self.d = f.add_subplot(2, 2, 4)
        self.c = f.add_subplot(2, 2, 3)
        self.b = f.add_subplot(2, 2, 2)
        
        f.set_tight_layout(True)

        self.canvas = matplotlib.backends.backend_tkagg.FigureCanvasTkAgg(f, master=self)
        self.canvas.show()
        self.canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)

            #Display Toolbar
        toolbar = NavigationToolbar2TkAgg(self.canvas, framegraph)
        toolbar.update()
        self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)

            #Refresh thread function
        def refreshFigure(): #this is threaded and just refreshes the figure (see time.sleep() for refresh rate)
            time.sleep(1)
            while True  and (not exitapp):
                self.a.clear()
                self.b.clear()
                self.c.clear()
                self.d.clear()
                if not serialStatus:
                    self.a.plot([1,2,3,4,5,6,7,8],[0,0,0,0,0,0,0,0])
                    self.b.plot([1,2,3,4,5,6,7,8],[0,0,0,0,0,0,0,0])
                    self.c.plot([1,2,3,4,5,6,7,8],[0,0,0,0,0,0,0,0])
                    self.d.plot([1,2,3,4,5,6,7,8],[0,0,0,0,0,0,0,0])
                else:
                    #debug plotsTimestamp
                    self.a.plot(serialData[-10:]["Timestamp"],serialData[-10:]["Timestamp"])
                    self.b.plot(serialData[-10:]["Timestamp"],serialData[-10:]["raw_temp"])
                    self.c.plot(serialData[-10:]["Timestamp"],serialData[-10:]["conv_temp"])
                    self.d.plot(serialData[-10:]["Timestamp"],serialData[-10:]["Potentiometer"])
                    #final plots
    ##                self.a.plot(serialData[-10:]["Timestamp"],serialData[-10:]["Thrust"])
    ##                self.b.plot(serialData[-10:]["Timestamp"],serialData[-10:]["RPM"])
    ##                self.c.plot(serialData[-10:]["Timestamp"],serialData[-10:]["Current"])
    ##                self.d.plot(serialData[-10:]["Timestamp"],serialData[-10:]["Voltage"])
                    #old demo stuff
    ##                self.a.plot([1,2,3,4,5,6,7,8],[5,6,1,3,self.throttleval.get(),9,3,5])
    ##                self.b.plot([1,2,3,4,5,6,7,8],[3,16,10,30,80,90,30,50])
    ##                self.c.plot([1,2,3,4,5,6,7,8],[8,5,4,(self.throttleval.get())**(0.5),15,15,15,20])
    ##                self.d.plot([1,2,3,4,5,6,7,8],[14,14,13,12,12,11.5,11.2,10.5])

                #set labels for graphs (could make automatic later)
                self.a.set_xlabel('time (s)')
                self.a.set_ylabel('Thrust (N)')
                self.b.set_xlabel('time (s)')
                self.b.set_ylabel('RPM')
                self.c.set_xlabel('time (s)')
                self.c.set_ylabel('Current (A)')
                self.d.set_xlabel('time (s)')
                self.d.set_ylabel('Voltage (V)')

                #try drawing the canvas
                try:
                    self.canvas.draw()
                except:
                    pass #just ignore it, you'll do better next time
                time.sleep(0.1) #refreshrate
        ###END FUNCTION###

            #Start the graphing thread
        plotThread = Thread(target=refreshFigure, args=())
        plotThread.start()
        threads.append(plotThread)
        
        # Frame 0 (Bottom text)
        frame0 = Frame(self)
        frame0.pack(side="bottom", fill="x", expand=1)

            #Display text (allows to give user information)
        self.textboxvar = StringVar()
        self.info = Label(frame0, textvariable=self.textboxvar)
        self.info.pack(side=LEFT, padx=5, pady=5)

        # Button Frame (large buttons, near bottom)
        s = Style() #has its own style
        s.configure('My.TFrame',background='#f7edc3') #fancy colors
        framered = Frame(self, style='My.TFrame')
        framered.pack(side="bottom", fill="x", expand=1)
        #used the tk instead of ttk library for this, allows font and color mods

            #Save Button
        self.saveButton = tk.Button(framered, text="Save Data", bg='green', font=('Arial',20,'bold'),
            command=self.saveData)
        self.saveButton.pack(side="left", padx=5, pady=5)

            #Log button
        self.logButton = tk.Button(framered, text="Start Data Logging", bg="blue", font=('Arial',20,'bold'),
            command=self.logData)
        self.logButton.pack(side="left", padx=5, pady=5)

            #Stop button
        self.stopButton = tk.Button(framered, text="Stop Motor", bg='red', font=('Arial',20,'bold'),
            command=self.stopMotor)
        self.stopButton.pack(side="right", padx=5, pady=5)