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