def radio_buttons(root, elements): """Creates and positions radio buttons for task selection.""" button_var = IntVar() path_button = Radiobutton(root, variable=button_var, value=PATH, background='gray') textbox_button = Radiobutton(root, variable=button_var, value=TEXT, background='gray') path_button.grid(row=0, sticky=W) textbox_button.grid(row=2, sticky=W) path_button.select() elements["path_button"] = path_button elements["textbox_button"] = textbox_button elements["button_var"] = button_var return elements
class Button: def __init__(self, parent, value, label, stateCarrier, width=0, height=0, variable=None): self.instance = Radiobutton( parent, value=value, variable=variable, indicatoron=0, command=lambda: stateCarrier.saveVal(value), width=width, height=height) if isinstance(label, str): self.instance.config(text=label) elif isinstance(label, ImageTk.PhotoImage): self.instance.config(image=label) else: raise TypeError( 'Wrong Type. Label must be of type String or PhotoImage!') def pos(self, row, column, padx=0, pady=0): self.instance.grid(row=row, column=column, padx=padx, pady=pady, sticky=N)
def set_new_time_or_continue_after_manual_check(top_settings): global reset_time_after_manually_check_intvar reset_time_after_manually_check_intvar = IntVar() reset_time_after_manually_check_intvar.set( reset_time_after_manually_check_int) label_reset_time_after_manually_check_ = Label( top_settings, text="After checking manually:") label_reset_time_after_manually_check_.grid(column=0, row=4, rowspan=2, sticky=W) radiobutton_reset_time_after_manually_check_on = Radiobutton( top_settings, text="New time (reset time)", variable=reset_time_after_manually_check_intvar, value=1) radiobutton_reset_time_after_manually_check_off = Radiobutton( top_settings, text="Continue time", variable=reset_time_after_manually_check_intvar, value=0) radiobutton_reset_time_after_manually_check_on.grid(column=1, row=4, sticky=W) radiobutton_reset_time_after_manually_check_off.grid(column=1, row=5, sticky=W)
def pass_info(*args): frame_head =Frame(root, bg='light yellow' ,bd=0) frame_head.place(relx=0.5, rely=0.01, relwidth=0.99, relheight=0.11, anchor='n') """ t="" for x in args: t+=" "+x t=t.strip() """ t=args[0] label_mesg = Label(frame_head,text=t) label_mesg.grid(row=0,column=0,columnspan=2) if len(args)>1: if args[1]=="NEW": rb1=Radiobutton(frame_head, text="Option 1", variable=r, value=1, anchor='n' ) rb1.grid(row=1,column=0,columnspan=1) rb2=Radiobutton(frame_head, text="Option 2", variable=r, value=0, anchor='n' ) rb2.grid(row=1,column=1,columnspan=1) opt_select = Button(frame_head,text="Confirm \n Option" ,command= lambda: clicked_rb(r.get(),frame_head,label_mesg ,rb1,rb2,opt_select,frame_pad,frame_status)) opt_select.grid(row=0,column=2,rowspan=2 , padx=0,pady=0) frame_pad =Frame(root, bg='light green' ,bd=0) frame_pad.place(relx=0.5, rely=0.13, relwidth=0.99, relheight=0.75 , anchor='n') frame_status =Frame(root, bg='light yellow' ,bd=0) frame_status.place(relx=0.5, rely=0.88, relwidth=0.99, relheight=0.12, anchor='n')
class ToggledFrame(tk.Frame): def __init__(self, parent, text="", *args, **options): tk.Frame.__init__(self, parent, *args, **options) self.show = tk.StringVar() self.show.set("No") self.title_frame = ttk.Frame(self) self.title_frame.pack(fill="x", expand=1) ttk.Label(self.title_frame, text=text).grid(row = 0, column = 0) self.choice1 = Radiobutton(self.title_frame, width = 2, text = "Yes", value = "Yes", command = self.toggle, variable = self.show) self.choice2 = Radiobutton(self.title_frame, width = 2, text = "No", value = "No", command = self.toggle, variable = self.show) self.choice1.grid(row = 0, column = 1) self.choice2.grid(row = 0, column = 2) self.sub_frame = tk.Frame(self, relief="sunken", borderwidth=1) def toggle(self): if self.show.get() == "Yes": self.sub_frame.pack(fill="x", expand=1) else: self.sub_frame.forget()
def __init__(self, master): super().__init__(master, relief='flat', borderwidth=40) self.business_logic = MLLogic() self.radio_btn_var = IntVar() self.master.title(self.business_logic.title) self.pack(fill=None, expand=False) Label(self, text="Select the type of appliances you want to buy").grid( row=1, columnspan=2, sticky='NW') for index, appliance_type in enumerate( self.business_logic.appliance_choices): rdo_btn = Radiobutton(self, text=appliance_type, variable=self.radio_btn_var, value=index, command=self.get_appliances) rdo_btn.select() rdo_btn.grid(row=index + 2, column=2) Label(self, text="Preferences").grid(row=7, columnspan=2, sticky='NW') self.item_lst_box = Listbox(self, selectmode='multiple') self.item_lst_box.delete(0, 'end') self.item_lst_box.grid(row=7, column=2) self.recommend_btn = Button(self, text='Recommend', command=self.on_recommend_btn_click) self.recommend_btn.grid(row=9, column=2, sticky='NW') self.recommend_btn.configure(state=DISABLED)
def init_widget(self): Label(self.frame, text='Ciclos:').grid(column=0, row=0, sticky='we', columnspan=1) i = 1 for k in self.entries.keys(): rb = Radiobutton(self.frame, text=k, variable=self.cycles, value=self.entries[k]['value'], state='disabled') rb.grid(sticky='ew', column=0, row=i, columnspan=1) self.entries[k]['entry'] = rb i += 1 Label(self.frame, text='Deflexión máxima:').grid(column=1, row=0, sticky='w', columnspan=2, pady=2, padx=5) Label(self.frame, text='Frecuencia máxima:').grid(column=1, row=2, sticky='w', columnspan=2, pady=2, padx=5) self.labels['x'] = Label(self.frame, text='-') self.labels['x'].grid(column=1, row=1, sticky='n') self.labels['fmax'] = Label(self.frame, text='-') self.labels['fmax'].grid(column=1, row=3, sticky='n') self.cycles.set(1e6)
def onOpen(self): ftypes = [('Excel files', '*.xls, *.xlsx'), ('All files', '*')] dlg = filedialog.Open(self, filetypes=ftypes) file = dlg.show() if file != '': self.filelabel.set("Current file: " + file) self.filename = file self.readExcel(self.filename) self.columns = BooleanVar() self.columns.set(1) if self.filelabel.get() != "File not chosen": rboneColumn = Radiobutton(self, text="Arrange in 1 column", variable=self.columns, value=1, command=self.onClick) rboneColumn.grid(sticky=W, row=2, column=1, padx=5, pady=5) rb2Columns = Radiobutton(self, text="Arrange in 2 columns", variable=self.columns, value=0, command=self.onClick) rb2Columns.grid(sticky=W, row=3, column=1, padx=5, pady=5)
def initialize(self): """radiobuttons for asking the player which suit the card is""" self.frame = Frame(master=self.root) deck_size = self.gamestate.get_deck_size() current_card = self.gamestate.get_answer_size() card_count = Label(master=self.frame, text="Kortti: " + str(current_card+1) + "/" + str(deck_size)) card_count.config(font=("Courier", 10)) card_count.grid(row=0, column=0) radio_button_heart = Radiobutton(master=self.frame, text="Hertta", variable = self.suit_var, value= Suit.HEART.value, command=self.sel_suit) radio_button_heart.grid(row=0, column=1) radio_button_diamond = Radiobutton(master=self.frame, text="Ruutu", variable = self.suit_var, value= Suit.DIAMOND.value, command=self.sel_suit) radio_button_diamond.grid(row=0, column=2) radio_button_spade = Radiobutton(master=self.frame, text="Pata", variable = self.suit_var, value= Suit.SPADE.value, command=self.sel_suit) radio_button_spade.grid(row=0, column=3) radio_button_club = Radiobutton(master=self.frame, text="Risti", variable = self.suit_var, value= Suit.CLUB.value, command=self.sel_suit) radio_button_club.grid(row=0, column=4) """radiobuttons for asking player which number the card is""" for i in range(1,14): radio_button = Radiobutton(master=self.frame,text=str(i),variable = self.num_var, value=i, command=self.sel_num) radio_button.grid(row=1, column=i) select_button = Button(master=self.frame, text="Lukitse valinta", command=self.next) select_button.grid(padx=5, pady=5, sticky=constants.EW) warning_text = Label(master=self.frame, text="Paina mikäli haluat luovuttaa:") warning_text.config(font=("Courier", 10)) warning_text.grid(row=6, column=0) give_up_button = Button(master=self.frame, text="Lopeta peli", command=self.handle_show_frontpage_view) give_up_button.grid(padx=5, pady=5, sticky=constants.EW)
def __setup__(self): frame_timezone = LabelFrame(self._root, text='Timezone') frame_timezone.pack() label1 = Label(frame_timezone, text='UTC+') label1.grid(row=0, column=0, padx=(5, 0), pady=5) self.entry1 = Entry(frame_timezone) self.entry1.grid(row=0, column=1, padx=(0, 5), pady=5) self.entry1.delete(0, 'end') self.entry1.insert(0, str(self._main.time_offset)) frame_orientation = LabelFrame(self._root, text='Orientation') frame_orientation.pack() self.switch_variable = IntVar(value=self._main.gps_sign) east_button = Radiobutton(frame_orientation, text='East', variable=self.switch_variable, value=True, width=8) west_button = Radiobutton(frame_orientation, text='West', variable=self.switch_variable, value=False, width=8) east_button.grid(row=0, column=0) west_button.grid(row=0, column=1) save_button = Button(self._root, text='Save', command=self.save_gps) save_button.pack()
def __init__(self, **kwargs): super().__init__(**kwargs) self._isReady = False Grid.rowconfigure(self, 0, weight = 1) Grid.columnconfigure(self, 0, weight = 1) # Create a list of all available parsers and their class objects self._pList = [(name, parser()) for name, parser in inspect.getmembers(parsers, inspect.isclass) if issubclass(parser, parsers.Parser) and name != 'Parser'] plugins = _utils.findPlugins('Parser') self._pList.extend(((name, parser()) for name, parser in plugins)) # value = 1 prevents PositionParser's config window from opening v = IntVar(value = 1) parent = self.master for index, (text, _) in enumerate(self._pList): b = Radiobutton( self, text=text, variable = v, value=index, command = lambda: self._configureParser(v, parent)) b.grid(row = index, column = 0, sticky = W) # Intialize the parser contained by the LabelFrame self._configureParser(v, parent) self._isReady = True
def build_heuristics_list(self): """ Construit la liste des heuristiques disponibles :return: IntVar - Identifiant de la liste des boutons """ # Label heuristic_label = Label(self, text="Choix de l'heuristique") heuristic_label.configure(font=font.Font(family=Config.FONT["main"], size=Config.SIZE["large"]), background=Config.COLOR["main-bg"], foreground=Config.COLOR["main-fg"]) heuristic_label.grid(sticky='w', padx=10) # Radio buttons x = IntVar(value=1) for index, text in enumerate(Menu.HEURISTICS): rdo = Radiobutton(self, text=text, variable=x, value=index + 1, tristatevalue=0) rdo.configure(font=font.Font(family=Config.FONT["main"], size=Config.SIZE["medium"]), background=Config.COLOR["main-bg"], foreground=Config.COLOR["main-fg"], activebackground=Config.COLOR["main-bg"], activeforeground=Config.COLOR["main-fg"], selectcolor=Config.COLOR["main-bg"]) rdo.grid(sticky='w', padx=20) return x
def initialize(self): """Creates the setup for this analysis """ lbl = ttk.Label(master=self.frame, text="Choose which variable to create barplot for:") lbl.grid(row=0, column=0) objects = 0 var = IntVar() for column in self.stat_analyzer.get_column_names(): objects = objects + 1 chk = Radiobutton( self.frame, text=column, variable=var, value=objects, command=lambda col=column: self.set_column_to_plot(col)) chk.grid(row=objects, column=0) btn = ttk.Button(master=self.frame, text='Plot!', command=self.analyze) btn.grid(row=objects + 1, column=0)
def __init__(self, **kwargs): super().__init__(**kwargs) self._isReady = False Grid.rowconfigure(self, 0, weight=1) Grid.columnconfigure(self, 0, weight=1) # Create a list of all available parsers and their class objects self._pList = [ (name, parser()) for name, parser in inspect.getmembers( parsers, inspect.isclass) if issubclass(parser, parsers.Parser) and name != 'Parser' ] plugins = _utils.findPlugins('Parser') self._pList.extend(((name, parser()) for name, parser in plugins)) # value = 1 prevents PositionParser's config window from opening v = IntVar(value=1) parent = self.master for index, (text, _) in enumerate(self._pList): b = Radiobutton( self, text=text, variable=v, value=index, command=lambda: self._configureParser(v, parent)) b.grid(row=index, column=0, sticky=W) # Intialize the parser contained by the LabelFrame self._configureParser(v, parent) self._isReady = True
def get_filter(self, list_video=[], list_type=[]): if list_video: # Initialize Canvas # radio button if len(self.your_video.title) > 50: self.title_video = "Title: " + \ self.your_video.title[:50] + "..." else: self.title_video = "Title: " + self.your_video.title label_title = Label(self, text=self.title_video) label_title.grid(row=3, column=0, columnspan=3, padx=5) label_title.configure(background='#fff') label_save_as = Label(self, text="Save as") label_save_as.grid(row=4, column=1, sticky=W, padx=10) label_save_as.configure(background='#fff') self.choose = StringVar() for id, value in enumerate(sorted(list_type)): if id == 0: self.choose.set(value) R1 = Radiobutton(self, text=value, variable=self.choose, value=value, command=self.choose_save_as) R1.grid(row=5+id, column=1, sticky=W, padx=10) R1.configure(background='#fff') # menu dorpdown label_quality = Label(self, text="Quality") label_quality.grid(row=4, column=2, sticky=W) label_quality.configure(background='#fff') # list quality label_quality_select = Label(self) label_quality_select.grid(row=5, column=2, sticky=W, padx=10) label_quality_select.configure(background='#fff')
def __init__(self): # create the window window = Tk() window.title("Widget Demo") # create the first frame frame1 = Frame(window) frame1.pack() # create variables for buttons and create the buttons self.v1 = IntVar() cbtBold = Checkbutton(frame1, text="Bold", variable=self.v1, command=self.processCheckbutton) self.v2 = IntVar() rbRed = Radiobutton(frame1, text="Red", bg="red", variable=self.v2, value=1, command=self.processRadiobutton) rbYellow = Radiobutton(frame1, text="Yellow", bg="yellow", variable=self.v2, value=2, command=self.processRadiobutton) # set the buttons in the frame cbtBold.grid(row=1, column=1) rbRed.grid(row=1, column=2) rbYellow.grid(row=1, column=3) # create the second frame frame2 = Frame(window) frame2.pack() # create labels and entry and button and message label = Label(frame2, text="Enter Your Name: ") self.name = StringVar() entryName = Entry(frame2, textvariable=self.name) btGetName = Button(frame2, text="Get Name", command=self.processButton) message = Message(frame2, text="This is the Message Widget") # position what we just made label.grid(row=1, column=1) entryName.grid(row=1, column=2) btGetName.grid(row=1, column=3) message.grid(row=1, column=4) # create a text window and add text to it text = Text(window) text.pack() text.insert(END, "Tip\nThe Best way to learn tkinter is to read ") text.insert(END, "these carefully designed examples and use them ") text.insert(END, "to create your application") window.mainloop()
def open_render_view(self): try: path = filedialog.askopenfilename(initialdir=".", filetypes=(("DOT graph", "*.gv *.dot"), ("all files", "*.*")), title="Choose a file.") path_splitted = os.path.split(path) ext = path_splitted[1].split('.') # Check in case user enter an unknown file # or closes without choosing a file. if ext[1] != 'dot' and ext[1] != 'gv': self.popupmsg("Wrong extension file inserted!\n" "Please insert a DOT file") else: # define the frame and its geometry r_window = tk.Toplevel(padx=20, pady=20, bg=self.COLOR_frames) r_window.wm_title("Render") r_window.resizable(False, False) self.__set_window_dimension__(r_window) label_format = tk.Label(r_window, text="Choose a file format for render:", fg=self.COLOR_foreground, bg=self.COLOR_frames, wraplength=500) label_format.grid(row=0, column=0) # Initialize file format variable for radiobutton option = tk.StringVar() # Radiobutton rb1 = Radiobutton(r_window, text='png', value="png", var=option, bg=self.COLOR_frames) rb2 = Radiobutton(r_window, text='pdf', value="pdf", var=option, bg=self.COLOR_frames) rb1.grid(row=1, column=0) rb2.grid(row=1, column=1) # TODO try except for wrong dot files b = Button(r_window, text='Render', bg=self.COLOR_buttons, command=lambda: (self.log(["[RENDER] " + self.controller.render(path, option.get())]), r_window.destroy())) b.grid(row=2, column=1) except: pass
def bubble_options(var,tkinter,column_start,row,option_num,option_labels,option_effect): rad_list=[] for i in range(option_num): rad=Radiobutton(tkinter,text=(option_labels[i]),variable=var,value=i,command=option_effect) rad_list.append(rad) i2=0 for rad in rad_list: rad.grid(column=(column_start+i2),row=row) i2+=1
def __init__(self, master): self.master_frame = master Toplevel.__init__(self) self.transient(root) self.geometry('450x350') self.lift() # Elementos lbl_titulo = Label(self, text = "Produtos") lbl_nome = Label(self, text = "Nome:") txt_nome = Entry(self) lbl_consignado = Label(self, text = "Consignado:") var_rdio = IntVar() rdio_consignado = Radiobutton(self, text="Sim", variable=var_rdio, value=1) rdio_consignado.grid(row=2,column=1) rdio_consignado = Radiobutton(self, text="Não", variable=var_rdio, value=0) rdio_consignado.grid(row=2,column=2) lbl_distribuidor = Label(self, text = "Distribuidor:") var_drop = StringVar(root) list_distribuidores = ModelDistribuidor.lista(self) var_drop.set(list_distribuidores[0]) popupMenu = OptionMenu(self, var_drop, *list_distribuidores) btn_alterar = Button(self, text = "Alterar", command = lambda:self.ControllerAlterar(self.list_produtos.get(ACTIVE),txt_nome.get(),var_rdio.get(),var_drop.get())) btn_adicionar = Button(self, text = "Adicionar", command = lambda:self.ControllerAdicionar(txt_nome.get(),var_rdio.get(),var_drop.get())) self.list_produtos = Listbox(self) btn_remover = Button(self, text = "Remover", command = lambda:self.ControllerRemover(self.list_produtos.get(ACTIVE))) btn_voltar = Button(self, text ="Voltar", command = lambda:self.voltar()) # Layout lbl_titulo.grid(row=0,column=1) lbl_nome.grid(row=1,column=0) txt_nome.grid(row=1,column=1) lbl_consignado.grid(row=2,column=0) lbl_distribuidor.grid(row=3,column=0) popupMenu.grid(row=3,column=1) btn_adicionar.grid(row=4,column=2) btn_alterar.grid(row=4,column=3) self.list_produtos.grid(row=5,column=1) btn_remover.grid(row=5,column=2) btn_voltar.grid(row=6,column=1) # Calculos self.ControllerListar()
def check_automation_checking(top_settings): global automatic_checking_is_on_intvar automatic_checking_is_on_intvar = IntVar() automatic_checking_is_on_intvar.set(automatic_checking_is_on_int) label_automatic_checking = Label(top_settings, text = "Automatic checking:") label_automatic_checking.grid(column = 0, row = 0, rowspan = 2, sticky = W) radiobutton_automatic_checking_on = Radiobutton(top_settings, text = "Turn ON automatic checking", variable = automatic_checking_is_on_intvar, value = True) radiobutton_automatic_checking_off = Radiobutton(top_settings, text = "Turn OFF automatic checking", variable = automatic_checking_is_on_intvar, value = False) radiobutton_automatic_checking_on.grid(column = 1, row = 0) radiobutton_automatic_checking_off.grid(column = 1, row = 1)
def ask_if_close_application(top_settings): global confirm_close_application_intvar confirm_close_application_intvar = IntVar() confirm_close_application_intvar.set(confirm_close_application_int) label_confirm_close_application = Label(top_settings, text = "Confirm exit from application:") label_confirm_close_application.grid(column = 0, row = 8, rowspan = 2, sticky = W) radiobutton_confirm_close_application_on = Radiobutton(top_settings, text = "Yes", variable = confirm_close_application_intvar, value = 1) radiobutton_confirm_close_application_off = Radiobutton(top_settings, text = "No", variable = confirm_close_application_intvar, value = 0) radiobutton_confirm_close_application_on.grid(column = 1, row = 8, sticky = W) radiobutton_confirm_close_application_off.grid(column = 1, row = 9, sticky = W)
def create_radiobuttons(self, texts, grid_row, callback): var = IntVar() for idx, buttontext in enumerate(texts): chk = Radiobutton(self.frame, text=buttontext, variable=var, value=idx, command=lambda val=buttontext: callback(val)) chk.grid(row=grid_row + idx, column=0)
def PseudoColor(self): pseudovar = IntVar() button3 = Radiobutton(self.frame1, text="Experiment1", variable=pseudovar, value=1) button4 = Radiobutton(self.frame1, text="Experiment2", variable=pseudovar, value=2) button3.grid(row=2, column=1) button4.grid(row=3, column=1)
def create_radio_buttons(self): # Scale related entries = ['DIATONIC', 'HARMONIC', 'MELODIC', 'PENTATONIC', 'PENTA_MINOR', 'GREEK_CHROMATIC', 'GREEK_ENHARMONIC'] self.scale = StringVar() self.scale.set('DIATONIC') self.rb_frame = Frame(self) for e in entries: rb = Radiobutton(self.rb_frame, value=e, text=e, anchor=W, command=self.send_scale, variable=self.scale) rb.grid(row=len(self.rb_frame.winfo_children()), sticky=W) self.rb_frame.grid(column=1, row=len(self.grid_slaves(column=1)), rowspan=3)
def UI(): # 软件窗口大小 sWidth = 400 sHeight = 180 # 初始化窗口 root = tk.Tk() root.title('财务造假识别 V1.001') # 窗口居中 screen_w = root.winfo_screenwidth() screen_h = root.winfo_screenheight() alignstr = '%dx%d+%d+%d' % (sWidth, sHeight, (screen_w - sWidth) / 2, (screen_h - sHeight) / 2) root.geometry(alignstr) # 第一行布局 Label(root, text="文件路径", font=(6)).grid(row=0) entry1 = Entry(root, width=30, xscrollcommand=True) entry1.grid(row=0, column=1) # 设置载入按钮 load_button = tk.Button(root, text='浏览', command=lambda: load_file(entry1), font=(6)) load_button.grid(row=0, column=2, padx=3, pady=3) # 第二行布局 v = IntVar() select_model = [('支持向量机', 0), ('随机森林', 1), ('融合模型', 2)] for model_type, num in select_model: model_radio_button = Radiobutton(root, text=model_type, value=num, command=lambda: choose_model(v), variable=v, font=(6)) model_radio_button.grid(row=1, column=num) # 第三行布局 Label(root, text="结果", font=(6)).grid(row=2) entry2 = Entry(root, width=30, xscrollcommand=True) entry2.grid(row=2, column=1) # 设置预测按钮 load_button = tk.Button(root, text='开始', command=lambda: test(root, entry2), font=(6)) load_button.grid(row=2, column=2, padx=3, pady=3) root.mainloop()
def bulbPopulate(bulbs): if len(devices.children) > 0: for widgets in devices.winfo_children(): widgets.destroy() i = 0 for name, v in bulbs.items(): ip = (list(v.values())[0]) bulb = Bulb(ip) dev_op = Radiobutton(devices, text=name, bg=bg_color, selectcolor=bg_color, width=24, offrelief="flat", overrelief="ridge", indicatoron=0, variable=bulbsOp, value=name, padx=1, command=lambda name=name, bulb=bulb: activateBulb(name, bulb)) dev_op.grid(column=0, row=i, pady=1) i += 1
def time(self): time_frame = LabelFrame(self.root, height=100, width=150, text='Time settings') time_frame.grid(column=1, row=0, columnspan=1, rowspan=1) time_now = Radiobutton(time_frame, text='Now', variable=time, value=1) time_now.grid(column=0, row=0, columnspan=1, rowspan=1) time_selection = Radiobutton(time_frame, text='Select', variable=time, value=2) time_selection.grid(column=0, row=1, columnspan=1, rowspan=1)
def __init__(self, master, parentWindow): frame = Frame(master) frame.pack() self.frame = frame # for destroy purpose self.master = master self.parentWindow = parentWindow # database with images self.imgDB = tm.cdb.imgDB # for database.get(item) self.item = 1 self.labelImgPlace = Label(frame, text="Image from database \n (click next)") self.labelImgPlace.grid(row=0, column=1) # buttons for going trought imgDB self.buttonNext = Button(frame, text="Next", command=self.next) self.buttonNext.grid(row=2, column=0) self.buttonBack = Button(frame, text="Back", command=self.back) self.buttonBack.grid(row=3, column=0) # label for name of class self.varForLabel = StringVar() self.labelClassName = Label(frame, textvariable=self.varForLabel) self.labelClassName.grid(row=4, column=0) self.button = Button(frame, text="load image", command=self.load_image) # self.button.grid(row=0, column=0) self.label = 0 # self.label=Label(frame,image=imgP) # self.label.pack(side=RIGHT) self.things = self.parentWindow.childResultList # ["cup","banana","pencil"] for i in range(len(self.things)): b = Radiobutton(self.frame, text=self.things[i], value=i) # write i-ths element from list to database as label b.config(command=lambda iter=i: self.choice_class(iter)) b.deselect() b.grid(row=i+1, column=2)
def gui_init(self): Label(self, text='起始路径').grid(row=0, column=0) Entry(self, textvariable=self.path1).grid(row=0, column=1) Button(self, text='路径选择', command=self.chose_folder1).grid(row=0, column=2) Label(self, text='复制路径').grid(row=1, column=0) Entry(self, textvariable=self.path3).grid(row=1, column=1) Button(self, text='路径选择', command=self.chose_folder3).grid(row=1, column=2) # Button(self, text='复制', command=self.command1).grid(row=1, column=3) r1 = Radiobutton(self, text='复制', variable=self.choseifcopy, value='do_copy') r1.grid(row=1, column=3) r2 = Radiobutton(self, text='不复制', variable=self.choseifcopy, value='not_copy', command=self.ifcopy) r2.grid(row=1, column=4) Label(self, text='目标路径').grid(row=2, column=0) Entry(self, textvariable=self.path2).grid(row=2, column=1) Button(self, text='路径选择', command=self.chose_folder2).grid(row=2, column=2) Button(self, text='执行', command=self.command1).grid(row=2, column=3) # Button(self, text='停止', command=self.stop_gener).grid(row=3, column=4) Button(self, text='清空错误文件列表', command=self.clean_list).grid(row=3, column=2) self.lb1 = Listbox(self, selectmode=BROWSE, listvariable=self.chose_fail, width=30, height=10) self.lb1.grid(row=3, columnspan=2) # Button(self, text='打开文件', command=self.command2).grid(row=3, column=0) self.b1 = Button(self, text='重新生成', command=self.command3) self.b1.grid(row=4, column=1) Button(self, text='打开失败文件位置', command=self.command2).grid(row=5, column=3) Label(self, text='失败原因').grid(row=6, column=0) Label(self, textvariable=self.show_error, bg='white', fg='blue', font=('Arial', 8), width=60, height=3).grid(row=6, column=1)
def __init__(self): window = Tk() window.title("Tip Calculator App") window.configure(background="khaki") window.geometry("500x400") window.resizable(width=False,height=False) self.meal_cost = StringVar() self.tip_percent = IntVar() self.tip = StringVar() self.total_cost = StringVar() tip_per = Label(window,text="Tip Percentages",bg="purple",fg="white",width=14,height=2) tip_per.grid(column=0,row=0,padx=25,pady=25) bill_amt = Label(window,text="Bill Amount",bg="black",fg="white",width=14,height=2) bill_amt.grid(column=1,row=0,padx=25,pady=25) bill_amt_entry = Entry(window,textvariable=self.meal_cost,width=14) bill_amt_entry.grid(column=2,row=0) five_per = Radiobutton(window,text=" 5 %",variable=self.tip_percent,value=5) five_per.grid(column=0,row=1,padx=5,pady=5) ten_per = Radiobutton(window,text="10 %",variable=self.tip_percent,value=10) ten_per.grid(column=0,row=2,padx=5,pady=5) fifteen_per = Radiobutton(window,text="15 %",variable=self.tip_percent,value=15) fifteen_per.grid(column=0,row=3,padx=5,pady=5) twenty_per = Radiobutton(window,text="20 %",variable=self.tip_percent,value=20) twenty_per.grid(column=0,row=4,padx=5,pady=5) twentyfive_per = Radiobutton(window,text="25 %",variable=self.tip_percent,value=25) twentyfive_per.grid(column=0,row=5,padx=5,pady=5) tip_amt = Label(window,text="Tip Amount",bg="black",fg="white",width=14,height=2) tip_amt.grid(column=1,row=2) tip_amt_generated = Entry(window,textvariable=self.tip,width=14) tip_amt_generated.grid(column=2,row=2) bill_total = Label(window,text="Bill Total",bg="black",fg="white",width=14,height=2) bill_total.grid(column=1,row=5) bill_total_entry = Entry(window,textvariable=self.total_cost,width=14) bill_total_entry.grid(column=2,row=5) cal_btn = Button(window,text="Calculate",bg="navy",fg="white",width=14,height=2,command=self.calculate) cal_btn.grid(column=1,row=8,padx=25,pady=25) clear_btn = Button(window,text="Clear",bg="navy",fg="white",width=14,height=2,command=self.clear) clear_btn.grid(column=2,row=8) window.mainloop()
def main(self): self.top.title("Color Image Processing") self.fileName = "C:/Users/Roopa/Documents/GitHub/assignment-2-roopa-rajala/Lenna.png" self.outputfileName = "C:/Users/Roopa/PycharmProjects/ColorImageProc/Lenna0.jpg" self.layout = Canvas(self.top, width=600, height=600, bg='white') self.layout2 = Canvas(self.top, width=600, height=600, bg='white') self.frame1 = Frame(self.top) self.frame1.grid(row=0, column=0) browseButton = tkinter.Button(self.frame1, text="Browse", command=self.helloCallBack) browseButton.grid(row=0, column=0) self.var = IntVar() buttonradio1 = Radiobutton(self.frame1, text="ColorTransformations", variable=self.var, value=1, command=self.ColorTransfer) buttonradio2 = Radiobutton(self.frame1, text="PseudoColoring", variable=self.var, value=2, command=self.PseudoColor) buttonradio1.grid(row=1, column=0) buttonradio2.grid(row=1, column=1) self.frame2 = Frame(self.top) self.frame2.grid(row=1, column=0) self.convertButton = tkinter.Button(self.frame1, text="Convert", bg="green", command=self.start) self.convertButton.grid(row=5, column=1) pic = ImageTk.PhotoImage(Image.open(self.fileName)) self.inputPic = Label(self.frame1, image=pic) self.inputPic.grid(row=6, column=0) pic1 = ImageTk.PhotoImage(Image.open(self.outputfileName)) self.outputPic = Label(self.frame1, image=pic1) self.outputPic.grid(row=6, column=1) # self.layout.grid(row=1, column=0) # pic = ImageTk.PhotoImage(file=self.fileName) # inputPic = self.layout.create_image(250, 250, image=pic) # self.layout2.grid(row=1, column=1) # pic2 = ImageTk.PhotoImage(file=self.outputfileName) # inputPic2 = self.layout2.create_image(250, 250, image=pic2) self.top.mainloop()
def __init__(self, master): Frame.__init__(self, master) self._shipVar = IntVar() self.shipRadioButtons = {} # Create radio buttons for each ship for i, shipType in enumerate(Ship.SHIPS): radioButton = Radiobutton(self, text=shipType, value=i, justify=LEFT, variable=self._shipVar, indicatoron=0) radioButton.grid(row=i, column=0, padx=10, pady=1, sticky=W) self.shipRadioButtons[shipType] = radioButton
def __init__(self, master): main_frame = Frame(master) main_frame.pack() # Color picker panel self.color_picker = Frame(main_frame) self.color_picker.grid(row=1, column=0) # Converted color panel self.converted_color = Frame(main_frame) self.converted_color.grid(row=1, column=2) # Values for entry and scale in RGB self.rgb = self.initialize_rgb() # Values for entry and scale in CMYK self.cmyk = self.initialize_cmyk() # Color preview panel self.canvas = Canvas(main_frame, width=300, height=300) self.canvas.create_rectangle(0, 0, 300, 300, fill=self.DEFAULT_COLOR) self.canvas.grid(row=1, column=1) # Color model selector section self.selected_model = IntVar() self.selected_model.set(1) radio_button_frame = Frame(main_frame) Label(radio_button_frame, text='Choose color model').grid(row=0, columnspan=2) rgb_button = Radiobutton(radio_button_frame, text='RGB', variable=self.selected_model, value=1, command=self.change_panel) rgb_button.grid(row=1, column=0) rgb_button.invoke() Radiobutton(radio_button_frame, text='CMYK', variable=self.selected_model, value=2, command=self.change_panel).grid(row=1, column=1) radio_button_frame.grid(row=0, columnspan=2)
def radio_buttons(root, elements): """Creates and positions radio buttons for task selection.""" button_var = IntVar() path_button = Radiobutton(root, variable = button_var, value = PATH, background = 'gray') textbox_button = Radiobutton(root, variable = button_var, value = TEXT, background = 'gray') path_button.grid(row = 0, sticky = W) textbox_button.grid(row = 2, sticky = W) path_button.select() elements["path_button"] = path_button elements["textbox_button"] = textbox_button elements["button_var"] = button_var return elements
def __init__(self): super().__init__() # Initialisation des pions à la valeur initiale. self.pion1 = "X" self.pion2 = "O" # Titre de la fenêtre self.title("Ultimate TIC-TAC-TOE") # Pour changer taille minimum de fenêtre et taille centrer, # changer variable self.width_fen, self.height_fen. self.width_fen, self.height_fen = 430, 500 # Taille minimum de la fenêtre self.minsize(self.width_fen, self.height_fen) # Centrer la fenêtre. centreFen(self, self.width_fen, self.height_fen) # Création d'un canvas avec l'image "logo.gif" canvas = Canvas(self, width=280, height=100) self.img = PhotoImage(file="logo.gif") canvas.create_image(280, 100, anchor=SE, image=self.img) canvas.grid(row=0, columnspan=5, pady=10) # Libellé - Nouvelle Partie Label(self, text="Nouvelle partie", font=("Arial", 16), fg="#0080FF", justify=CENTER).grid( row=1, columnspan=5, padx = 20, pady = 5) separateur(20).grid(row=10,columnspan=5) # Sélection du type de partie avec bouton radio self.choixJoueur = IntVar() r1 = Radiobutton(self, text="Jouer avec l'ordinateur", variable = self.choixJoueur, value = 1, command=self.define_choix) r1.select() r1.grid(row=20, column=0) r2 = Radiobutton(self, text="Jouer avec un autre joueur", variable = self.choixJoueur, value = 2, command=self.define_choix) r2.grid(row=20, column=1) # Saisie du nom du joueur 1. f_j1 = Frame(self, borderwidth=1, padx=5, pady=5, relief=SUNKEN) f_j1.grid(row=30, columnspan=5, padx=5, pady=5) Label(f_j1, text="Nom joueur 1:").grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.nom_joueur1 = Entry(f_j1) self.nom_joueur1.grid(row=1,column=1) # Sélection du pion joueur 1. Le pion restant est automatiquement attribué au joueur 2. Label(f_j1, text="Choix de pion:").grid(row=1, column=2, padx=5) self.sel_pion=IntVar() p1 = Radiobutton(f_j1, indicatoron=0, width=5, text="X", variable=self.sel_pion, value=1, command=self.choix_pion) p1.grid(row=1, column=3, padx=2) p1.select() Radiobutton(f_j1, indicatoron=0, width=5, text="O", variable=self.sel_pion, value=2, command=self.choix_pion).grid(row=1, column=4, padx=2) # Saisie du nom du joueur 2. Apparaît seulement si on sélection 2 joueurs. Voir define_choix self.f_j2 = Frame(self, width=420, borderwidth=1, padx=5, pady=5, relief=SUNKEN) Label(self.f_j2, text="Nom joueur 2").grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.nom_joueur2 = Entry(self.f_j2, state="disabled") self.nom_joueur2.grid(row=1, column=1) self.label_pion2 = Label(self.f_j2, text="Pion Joueur 2 = O") self.label_pion2.grid(row=1, column=2, padx=5) # Information sur l'ordinateur. Disparaît si on choisi 2 joueurs. self.f_ordi = Frame(self, width=420, borderwidth=1, padx=5, pady=5, relief=SUNKEN) self.f_ordi.grid(row=40, columnspan=5, padx=5, pady=5) Label(self.f_ordi, text="Ordinateur = Colosse", font=("Arial", 12), fg="#0080FF")\ .grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.pion_ordi = Label(self.f_ordi, text="| Pion de l'ordinateur = O", font=("Arial", 12), fg="#0080FF") self.pion_ordi.grid(row=1, column=2) separateur(20).grid(row=50,columnspan=5) # Sélection de la force de l'ordinateur self.choixForce = IntVar() self.f1 = Radiobutton(self, indicatoron=0, width = 20, padx = 20, text="Facile", variable=self.choixForce, value=1, command=self.define_choix) self.f1.select() self.f1.grid(row=60, columnspan=5) self.f2 = Radiobutton(self, indicatoron=0, width = 20, padx = 20, text="Moyen", variable=self.choixForce, value=2, command=self.define_choix) self.f2.grid(row=61, columnspan=5) self.f3 = Radiobutton(self, indicatoron=0, width = 20, padx = 20, text="Difficile", variable=self.choixForce, value=3, command=self.define_choix) self.f3.grid(row=62, columnspan=5) separateur(40).grid(row=70, column=0) #Button pour démarrer la partie self.bt_start = Button(text="Démarrer", font=("Arial", 12), fg="green", command=self.demarrer_jeu) self.bt_start.grid(row=80, columnspan=5)
class fen_info(Tk): """ Fenêtre permettant de saisir les informations sur les joueurs """ def __init__(self): super().__init__() # Initialisation des pions à la valeur initiale. self.pion1 = "X" self.pion2 = "O" # Titre de la fenêtre self.title("Ultimate TIC-TAC-TOE") # Pour changer taille minimum de fenêtre et taille centrer, # changer variable self.width_fen, self.height_fen. self.width_fen, self.height_fen = 430, 500 # Taille minimum de la fenêtre self.minsize(self.width_fen, self.height_fen) # Centrer la fenêtre. centreFen(self, self.width_fen, self.height_fen) # Création d'un canvas avec l'image "logo.gif" canvas = Canvas(self, width=280, height=100) self.img = PhotoImage(file="logo.gif") canvas.create_image(280, 100, anchor=SE, image=self.img) canvas.grid(row=0, columnspan=5, pady=10) # Libellé - Nouvelle Partie Label(self, text="Nouvelle partie", font=("Arial", 16), fg="#0080FF", justify=CENTER).grid( row=1, columnspan=5, padx = 20, pady = 5) separateur(20).grid(row=10,columnspan=5) # Sélection du type de partie avec bouton radio self.choixJoueur = IntVar() r1 = Radiobutton(self, text="Jouer avec l'ordinateur", variable = self.choixJoueur, value = 1, command=self.define_choix) r1.select() r1.grid(row=20, column=0) r2 = Radiobutton(self, text="Jouer avec un autre joueur", variable = self.choixJoueur, value = 2, command=self.define_choix) r2.grid(row=20, column=1) # Saisie du nom du joueur 1. f_j1 = Frame(self, borderwidth=1, padx=5, pady=5, relief=SUNKEN) f_j1.grid(row=30, columnspan=5, padx=5, pady=5) Label(f_j1, text="Nom joueur 1:").grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.nom_joueur1 = Entry(f_j1) self.nom_joueur1.grid(row=1,column=1) # Sélection du pion joueur 1. Le pion restant est automatiquement attribué au joueur 2. Label(f_j1, text="Choix de pion:").grid(row=1, column=2, padx=5) self.sel_pion=IntVar() p1 = Radiobutton(f_j1, indicatoron=0, width=5, text="X", variable=self.sel_pion, value=1, command=self.choix_pion) p1.grid(row=1, column=3, padx=2) p1.select() Radiobutton(f_j1, indicatoron=0, width=5, text="O", variable=self.sel_pion, value=2, command=self.choix_pion).grid(row=1, column=4, padx=2) # Saisie du nom du joueur 2. Apparaît seulement si on sélection 2 joueurs. Voir define_choix self.f_j2 = Frame(self, width=420, borderwidth=1, padx=5, pady=5, relief=SUNKEN) Label(self.f_j2, text="Nom joueur 2").grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.nom_joueur2 = Entry(self.f_j2, state="disabled") self.nom_joueur2.grid(row=1, column=1) self.label_pion2 = Label(self.f_j2, text="Pion Joueur 2 = O") self.label_pion2.grid(row=1, column=2, padx=5) # Information sur l'ordinateur. Disparaît si on choisi 2 joueurs. self.f_ordi = Frame(self, width=420, borderwidth=1, padx=5, pady=5, relief=SUNKEN) self.f_ordi.grid(row=40, columnspan=5, padx=5, pady=5) Label(self.f_ordi, text="Ordinateur = Colosse", font=("Arial", 12), fg="#0080FF")\ .grid(row=1, column=0, sticky=E, padx = 5, pady = 5) self.pion_ordi = Label(self.f_ordi, text="| Pion de l'ordinateur = O", font=("Arial", 12), fg="#0080FF") self.pion_ordi.grid(row=1, column=2) separateur(20).grid(row=50,columnspan=5) # Sélection de la force de l'ordinateur self.choixForce = IntVar() self.f1 = Radiobutton(self, indicatoron=0, width = 20, padx = 20, text="Facile", variable=self.choixForce, value=1, command=self.define_choix) self.f1.select() self.f1.grid(row=60, columnspan=5) self.f2 = Radiobutton(self, indicatoron=0, width = 20, padx = 20, text="Moyen", variable=self.choixForce, value=2, command=self.define_choix) self.f2.grid(row=61, columnspan=5) self.f3 = Radiobutton(self, indicatoron=0, width = 20, padx = 20, text="Difficile", variable=self.choixForce, value=3, command=self.define_choix) self.f3.grid(row=62, columnspan=5) separateur(40).grid(row=70, column=0) #Button pour démarrer la partie self.bt_start = Button(text="Démarrer", font=("Arial", 12), fg="green", command=self.demarrer_jeu) self.bt_start.grid(row=80, columnspan=5) def define_choix(self): """ Fonction qui active ou désactive le nom du joueur 2 selon si on joue contre l'ordinateur ou contre un autre joueur """ if self.choixJoueur.get()==1: self.nom_joueur2.delete(0, END) self.nom_joueur2["state"]="disabled" self.f1["state"]="normal" self.f2["state"]="normal" self.f3["state"]="normal" self.f_j2.grid_remove() self.f_ordi.grid(row=40, columnspan=5, padx=5, pady=5) elif self.choixJoueur.get()==2: self.nom_joueur2["state"]="normal" self.f1["state"]="disabled" self.f2["state"]="disabled" self.f3["state"]="disabled" self.f_j2.grid(row=40, columnspan=5, padx=5, pady=5) self.f_ordi.grid_remove() def choix_pion(self): # Définition des pions if self.sel_pion.get()==1: self.pion1="X" self.pion2="O" self.label_pion2["text"]="Pion Joueur 2 = {}".format(self.pion2) self.pion_ordi["text"]="| Pion de l'ordinateur = {}".format(self.pion2) else: self.pion1="O" self.pion2="X" self.label_pion2["text"]="Pion Joueur 2 = {}".format(self.pion2) self.pion_ordi["text"]="| Pion de l'ordinateur = {}".format(self.pion2) def demarrer_jeu(self): """ Démarrer la partie avec les informations saisie. Afficher le plateau """ if self.choixJoueur.get()==1: type2 = "Ordinateur" if self.nom_joueur1.get()!='': j1 = self.nom_joueur1.get() j2 = "Colosse" else: j1 = "Joueur 1" j2 = "Colosse" elif self.choixJoueur.get()==2: type2 = "Personne" if self.nom_joueur1.get()!='' and self.nom_joueur2.get()!='': j1 = self.nom_joueur1.get() j2 = self.nom_joueur2.get() elif self.nom_joueur1.get()=='': j1 = "Joueur 1" if self.nom_joueur2.get()=='': j2 = "Joueur 2" else: j2 = self.nom_joueur2.get() else: j1 = self.nom_joueur1.get() if self.nom_joueur2.get()=='': j2 = "Joueur 2" else: j2 = self.nom_joueur2.get() p1 = self.pion1 p2 = self.pion2 force = self.choixForce.get() self.destroy() ma_fenetre = Fenetre(j1, j2, type2, p1, p2, force) ma_fenetre.mainloop()
class GUI: def __init__(self, master): """initialize GUI""" self.root = master self.on = True Tk().withdraw() self.starttime = datetime.now() # status bar, info for user self.statusString = StringVar() self.statusText = 'Ready' self.statusString.set(self.statusText) self.lvlStatus = StringVar() self.ifmStatus = StringVar() self.active = 0 # 0 - inactive state, 1 - active (in motion), 2 - steady (waiting while taking data) self.auto = 0 # COMPARATOR MOTION CONTROL self.step = StringVar() # mm self.begin = StringVar() # mm self.end = StringVar() # mm self.autoVal = IntVar() self.labelTop = StringVar() self.labelTop.set('VERTICAL COMPARATOR') # LABELS ON BUTTONS self.label10 = StringVar() # start/stop self.label21 = StringVar() # manual self.label22 = StringVar() # auto self.label31 = StringVar() # step self.label32 = StringVar() # start self.label33 = StringVar() # stop self.label51 = StringVar() # read interferometer self.label52 = StringVar() # read digi level self.autoVal.set(0) # init PLC, interferometer and level self.plc = PLC(comsettings['PLCPORT'], int(comsettings['PLCBAUD'])) self.conn = self.plc.conn self.ifm = IFM(comsettings['IFMPORT'], int(comsettings['IFMBAUD'])) self.lvl = LVL(comsettings['LVLPORT'], int(comsettings['LVLBAUD'])) self.observer = '' # operator self.label10.set({0: 'START', 1: 'STOP', 2:'STOP'}[self.active]) # start/stop self.setStatus({0: 'ready', 1: 'active', 2:'steady'}[self.active]) self.label21.set('MANUAL') # manual self.label22.set('AUTO') # auto self.label31.set('LOW') # start height self.label32.set('HIGH') # stop height self.label33.set('STEP') # step self.label51.set('READ IFM') # read interferometer self.label52.set('READ LVL') # read digi level self.timestring = StringVar() self.connstring = StringVar() # self.queue = queue.Queue() self.timerthread = threading.Thread(target=self.timer) self.timerthread.start() self.readdata = '' self.connthread = threading.Thread(target=self.checkconnection) self.connthread.start() self.statusthread = threading.Thread(target=self.checkstatus) self.statusthread.start() self.autologthread = threading.Thread(target=self.autolog) self.autologthread.start() # starttimer() # startautolog() # startautoserialcheck() # def toggleStartStop(self): # # if start then stop else otherwise # # change button and text color if possible # pass def timer(self): while self.on: dt = datetime.now() - self.starttime self.timestring.set('%-10s' % str(dt).split('.')[0]) time.sleep(1) def autolog(self, timeout=60): while self.on: print('Autolog') s, low, hi, step, ifm, lvl, obs = '', '', '', '', '', '', '' try: s = self.statusText low = self.lowEntry.get().strip() hi = self.hiEntry.get().strip() step = self.stepEntry.get().strip() ifm = IFM().read() lvl = LVL().read() obs = self.entryObserver.get().strip() except: print('problem with values') log('AUTOLOG! status: %s, low: %s, hi: %s, step: %s, ifm: %s, lvl: %s, obs: %s' % ( s, low, hi, step, ifm, lvl, obs)) time.sleep(timeout) def checkconnection(self): connection = False while self.on: if self.conn: try: d = self.conn.read(1) self.readdata += d connection = True except: self.conn.close() try: self.connect() except: connection = False else: try: self.connect() except: connection = False self.connstring.set({True: 'isConn', False: 'notConn'}[connection]) time.sleep(0.5) def checkstatus(self): st = None if self.conn: try: st = self.plc.query('status') if st == commands['ACTIVE']: self.plc.status = 'active' elif st == commands['INACTIVE']: self.status = 'ready' else: self.status = 'unknown' except: self.status = 'unknown' else: self.status = 'not connected' def evaluateEntries(self): s, b, e = self.stepEntry, self.beginEntry, self.endEntry res = [None, None, None] for i in range(3): try: res[i] = float([s, b, e][i]) except: pass # leave it None if b > e and s > 0: # if step is negative, it can move downwards (from hi to low) b, e = e, b # otherwise it begin and end must be changed if b>e elif b < e and s < 0: b, e = e, b # INPUT IN MM !! cannot recognize 0.5mm from 0.5m step or 3mm vs 3m end # input values converted to mm # [s,b,e] = [i*1000. if (i is not None and i<5.) else i for i in [s,b,e]] return s, b, e def emptyRow(self, nrow): Label(self.fr, text="", bg=bgcolor).grid(row=nrow, column=0) def setStatus(self, text): self.statusText = text self.statusString.set(self.statusText) def setLvlStatus(self, text): self.lvlStatus.set(text) def setIfmStatus(self, text): self.ifmStatus.set(text) def getIfm(self): ifm = IFM() response = ifm.read() if not response: response = "No response" self.setIfmStatus(response) return response def getLevel(self): lvl = LVL() # možno naèíta� pri __init__ response = lvl.read() if not response: response = "No response" self.setLvlStatus(response) return response # #set stop button # def setStop(self): # pass # # #set start # def setStart(self): # pass # toggle start stop def startStop(self): self.active = not self.active self.label10.set({0: 'START', 1: 'STOP'}[self.active]) self.setStatus({0: 'ready', 1: 'active'}[self.active]) self.butStartStop.configure(bg=startstopbg[self.active], fg=startstopfg[self.active]) self.observer = self.entryObserver.get().strip() if not self.active: log('CMP stopped %s' % self.observer) else: log('CMP started %s' % self.observer) if self.active: pass # action after comparator is stopped else: pass # action after comparator is started def getEntries(self): return self.stepEntry, self.beginEntry, self.endEntry def close(self): self.on = False if self.active: self.startStop() self.root.destroy() self.root.quit() def gotoLow(self): low = None self.setStatus('Going to LOW') try: low = float(self.lowEntry.get().strip()) except: pass pass # move carriage to set low return low def gotoHi(self): hi = None self.setStatus('Going to HIGH') try: hi = float(self.hiEntry.get().strip()) except: pass pass # move carriage to set low return hi def moveStep(self): pos = self.plc.getPos() step = 0 try: step = float(self.stepEntry.get().strip()) except: pass targetpos = pos + step if step != 0: self.setStatus('Moving to %f' % targetpos) self.plc.moveto(targetpos) return targetpos def resetLvlStatus(self): self.lvlStatus.set('') def resetIfmStatus(self): self.ifmStatus.set('') def mainDialog(self): self.basicframe = Frame(self.root) self.basicframe.grid() self.basicframe.configure(bg=bgcolor) self.fr = Frame(self.basicframe) self.fr.grid(row=0, column=0, sticky='new') # , sticky='W') self.fr.configure(bg=bgcolor) # Grid.rowconfigure(root, 0, weight=1) Grid.columnconfigure(root, 0, weight=1) self.emptyRow(0) Label(self.fr, textvariable=self.labelTop, justify='center', bg=bgcolor, font=("Calibri", 24) ).grid(row=1, column=0, columnspan=3, sticky='we') self.emptyRow(2) Label(self.fr, text='STATUS:', justify='left', anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 12) ).grid(row=3, column=0, sticky='we', padx=(5, 0)) self.statusLine = Label(self.fr, textvariable=self.statusString, justify='left', anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 14, "bold") ).grid(row=3, column=1, columnspan=2, sticky='we') self.emptyRow(4) self.butStartStop = Button(self.fr, textvariable=self.label10, command=self.startStop, bg=startstopbg[self.active], fg=startstopfg[self.active], font=("Calibri", 16, "bold"), width=10) self.butStartStop.grid(row=5, column=1, sticky='nsew') # AUTO / MANUAL self.my_var.set(1) self.butManual = Radiobutton(self.fr, text="MANUAL", variable=self.auto, value=0, width=15, justify='center', # bg=buttoncolor2, bg="moccasin", indicatoron=0) # self.exit_root) self.butManual.grid(row=5, column=0, sticky='ew', padx=(0, 10)) # self.butManual.configure(state='selected') self.butAuto = Radiobutton(self.fr, text="AUTO", variable=self.auto, value=1, width=15, justify='center', # bg=buttoncolor2, bg="moccasin", indicatoron=0) # self.exit_root) self.butAuto.grid(row=5, column=2, sticky='ew', padx=(10, 0)) self.emptyRow(6) self.emptyRow(7) # put Labels here Label(self.fr, textvariable=self.label31, justify='center', bg=bgcolor, fg=statuscolor, font=("Calibri", 10) ).grid(row=8, column=0, sticky='we') Label(self.fr, textvariable=self.label32, justify='center', bg=bgcolor, fg=statuscolor, font=("Calibri", 10) ).grid(row=8, column=1, sticky='we') Label(self.fr, textvariable=self.label33, justify='center', bg=bgcolor, fg=statuscolor, font=("Calibri", 10) ).grid(row=8, column=2, sticky='we') # input boxes: step start stop (mm) self.lowEntry = Entry(self.fr, width=20, bd=3, justify='right', bg=inputbox, fg=statuscolor) self.lowEntry.grid(row=9, column=0, sticky='we') # , columnspan=2) # SET DEFAULT LOW # self.lowEntry.delete(0,END) # self.lowEntry.insert(0, MINPOS) self.hiEntry = Entry(self.fr, width=20, bd=3, justify='right', bg=inputbox, fg=statuscolor) self.hiEntry.grid(row=9, column=1, sticky='we') # , columnspan=2) # SET DEFAULT HIGH # self.hiEntry.delete(0,END) # self.hiEntry.insert(0, MAXPOS) self.stepEntry = Entry(self.fr, width=20, bd=3, justify='right', bg=inputbox, fg=statuscolor) self.stepEntry.grid(row=9, column=2, sticky='we') # , columnspan=2) # put buttons for GOTO and MOVE self.butGotoLow = Button(self.fr, text="Go To Low", justify='center', bg=buttoncolor, command=self.gotoLow) self.butGotoLow.grid(row=10, column=0, sticky='we') self.butGotoHi = Button(self.fr, text="Go To High", justify='center', bg=buttoncolor, command=self.gotoHi) self.butGotoHi.grid(row=10, column=1, sticky='we') self.butMoveStep = Button(self.fr, text="Move a Step", justify='center', bg=buttoncolor, command=self.moveStep) self.butMoveStep.grid(row=10, column=2, sticky='we') self.emptyRow(11) Label(self.fr, text='EXTERNAL SENSORS', justify='left', anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 12) ).grid(row=12, column=0, columnspan=3, sticky='we', padx=(5, 0)) # function buttons # RIadok 12: Externals butIFM = Button(self.fr, text="Read IFM", width=15, justify='center', bg=buttoncolor, command=self.getIfm) # self.exit_root) butIFM.grid(row=13, column=0, sticky='we') self.labIfmStatus = Label(self.fr, textvariable=self.ifmStatus, justify='left', anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 12)) self.labIfmStatus.grid(row=13, column=1, columnspan=2, sticky='we', padx=(15, 0)) self.labIfmStatus.bind('<Button-1>', self.resetIfmStatus) butLVL = Button(self.fr, text="Read level", width=15, justify='center', bg=buttoncolor, command=self.getLevel) # self.exit_root) butLVL.grid(row=14, column=0, sticky='we') self.labLvlStatus = Label(self.fr, textvariable=self.lvlStatus, justify='left', anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 12)) self.labLvlStatus.grid(row=14, column=1, columnspan=2, sticky='we', padx=(15, 0)) self.labLvlStatus.bind('<Button-1>', self.resetLvlStatus) self.emptyRow(15) Label(self.fr, text='OBSERVER:', anchor='w', justify='left', bg=bgcolor, fg=statuscolor, font=("Calibri", 12) ).grid(row=16, column=0, sticky='we', padx=(5, 0)) self.entryObserver = Entry(self.fr, textvariable=self.observer, bg=inputbox, fg=statuscolor, font=("Calibri", 12), justify='left') self.entryObserver.grid(row=16, column=1, columnspan=2, sticky='we') # row 18> empty (or test connection) self.emptyRow(18) self.timeLabel = Label(self.fr, textvariable=self.timestring, anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 9)) self.timeLabel.grid(row=19, column=0) self.connLabel = Label(self.fr, textvariable=self.connstring, anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 9)) self.connLabel.grid(row=19, column=1) butexit = Button(self.fr, text="EXIT", width=15, justify='center', bg="black", fg="yellow", command=self.close, font=("Calibri", 14, "bold")) butexit.grid(row=19, column=2)
class testGUI: def __init__(self, master): """initialize GUI""" self.root = master self.on = True self.connection = None Tk().withdraw() self.basicframe = Frame(self.root) self.basicframe.grid() self.basicframe.configure(bg=bgcolor) self.fr = Frame(self.basicframe) self.fr.grid(row=0, column=0, sticky='new') # , sticky='W') self.fr.configure(bg=bgcolor) Grid.columnconfigure(self.root, 0, weight=1) self.port = None self.baud = None # self.inputTypes = ['ascii', 'bin', 'hex', 'mix'] self.inputType = StringVar() self.inputType.set('ascii') self.input = 'ascii' self.labelPort = Label(self.fr, width=10, text='PORT', justify='left', anchor='w', bg=bgcolor, fg=fgcolor, font=("Calibri", 12)) self.entryPort = Entry(self.fr, width=20, bd=3, justify='left', bg=inputbox, fg=fgcolor) self.labelBaud = Label(self.fr, text='BAUD', justify='left', anchor='w', bg=bgcolor, fg=fgcolor, font=("Calibri", 12)) self.entryBaud = Entry(self.fr, width=20, bd=3, justify='right', bg=inputbox, fg=fgcolor) self.labelType = Label(self.fr, text='TYPE', justify='left', anchor='w', bg=bgcolor, fg=fgcolor, font=("Calibri", 12)) self.radioType1 = Radiobutton(self.fr, text='ascii', variable=self.inputType, value='ascii', indicatoron=0) self.radioType2 = Radiobutton(self.fr, text='bin', variable=self.inputType, value='bin', width=20, indicatoron=0) self.radioType3 = Radiobutton(self.fr, text='hex', variable=self.inputType, value='hex', indicatoron=0) self.radioType4 = Radiobutton(self.fr, text='mix', variable=self.inputType, value='mix', width=20, indicatoron=0) self.labelInput = Label(self.fr, text='INPUT', justify='left', anchor='w', bg=bgcolor, fg=fgcolor, font=("Calibri", 12)) self.entryInput = Entry(self.fr, width=20, bd=3, justify='left', bg=inputbox, fg=fgcolor) self.buttonSend = Button(self.fr, text='SEND', justify='center', bg=buttoncolor, command=self.send) self.buttonRead = Button(self.fr, text='READ', justify='center', bg=buttoncolor, command=self.read) self.buttonExit = Button(self.fr, text='EXIT', justify='center', bg='red', fg='white', command=self.exit) self.response = StringVar() self.response.set('') self.responseBar = Label(self.fr, textvariable=self.response, justify='left', anchor='w', bg=bgcolor, fg=fgcolor, font=("Calibri", 12)) self.status = StringVar() self.statusBar = Label(self.fr, textvariable=self.status, justify='left', anchor='nw', bg=bgcolor, fg=fgcolor, font=("Calibri", 10)) self.status.set('Initialized') def emptyRow(self, nrow): Label(self.fr, text="", bg=bgcolor).grid(row=nrow, column=0) def configure_connection(self): self.status.set('Configuring connection') print ('Configuring connection') self.port = self.entryPort.get() self.baud = self.entryBaud.get() print ('{}:{}'.format(self.port, self.baud)) try: self.baud = int(self.baud) except: print ('Something went wrong, setting baud to 0') self.entryBaud.delete(0, END) self.entryBaud.insert(0, '0') self.baud = 0 self.connection = RS232(comport=self.port, baud=self.baud, dictionary={}, timeout=1) self.connection.connect() print ('Connection status: {}'.format(self.connection)) if self.connection and self.connection.conn: print ('Connection established, locking current settings') self.entryPort.configure(state='disabled') self.entryBaud.configure(state='disabled') else: print ('No connection') self.status.set('<No connection>') def convertInput(self): self.status.set('Converting input') typ = self.inputType.get() self.input = self.entryInput.get() if typ == 'bin': newInput = ''.join(lambda x: x in '01', self.input) self.input = chr(int(newInput, 2)) elif typ == 'hex': newInput = ''.join(lambda x: x in '0123456789ABCDEF', self.input) self.input = chr(int(newInput, 16)) elif typ == 'mix': newInput = self.input for i in re.findall('<(\d+?)>', inp): newInput = newInput.replace('<{}>'.format(i), chr(int(i))) self.input = newInput print ('Converted input: {}'.format(self.input)) def send(self): # self.input = self.entryInput.get() self.convertInput() self.status.set('Sending Data: {}'.format(self.input[:5])) if not self.connection or not self.connection.conn: # print ('Connection must be configured') self.configure_connection() if self.connection and self.connection.conn: # print ('Connection seems to be OK') stat = self.connection.send(bytes(self.input, 'utf-8')) self.status.set('') if not stat: print ('Sending not successful.') return stat else: # print ('Connection probably not established') pass return None # self.status.set('<No connection>') def read(self): self.status.set('Reading Data') print ('Read data') if not self.connection or not self.connection.conn: print ('Configuring connection') self.configure_connection() # self.input = self.entryInput.get() response = self.connection.receive() if response: print ('Response {}'.format(response)) self.response.set(response) else: print ('No response') self.response.set('<No response>') # self.status.set('') def exit(self): # for thread in (self.timerthread, self.connthread, self.statusthread, self.autologthread, self.readexternalsthread): # thread.join() # if self.active: # self.startStop() self.on = False self.connection and self.connection.disconnect() self.root.destroy() self.root.quit() def mainDialog(self): self.labelPort.grid(row=0, column=0, sticky='we', padx=(5, 0)) self.entryPort.grid(row=0, column=1, sticky='we') self.labelBaud.grid(row=1, column=0, sticky='we', padx=(5, 0)) self.entryBaud.grid(row=1, column=1, sticky='we') self.labelType.grid(row=2, column=0, sticky='we', padx=(5, 0)) self.radioType1.grid(row=2, column=1, sticky='we') self.radioType2.grid(row=2, column=2, sticky='we') self.radioType3.grid(row=3, column=1, sticky='we') self.radioType4.grid(row=3, column=2, sticky='we') self.labelInput.grid(row=4, column=0, sticky='we', padx=(5, 0)) self.entryInput.grid(row=4, column=1) self.responseBar.grid(row=5, column=1) self.statusBar.grid(row=6, column=1) Label(self.fr, text="", bg=bgcolor).grid(row=7, column=0) self.buttonSend.grid(row=8, column=0) self.buttonRead.grid(row=8, column=1) self.buttonExit.grid(row=8, column=2)
class GUI: def __init__(self, master): """initialize GUI""" self.root = master self.on = True Tk().withdraw() self.starttime = datetime.now() # status bar, info for user self.statusString = StringVar() self.statusText = 'Ready' self.statusString.set(self.statusText) self.comparatorStatus = 'inactive' # self.comparatorStatuses = ['inactive', 'active', # 'steady', 'moving', 'paused', 'finished'] # 2 manual statuses + 4 auto statuses self.levelStatus = StringVar() self.ifmStatus = StringVar() self.nivelStatus = StringVar() self.thermoStatus = StringVar() self.active = 0 # 0 - inactive state, 1 - active (in motion), 2 - steady (waiting while taking data) self.auto = 0 # COMPARATOR MOTION CONTROL self.step = StringVar() # mm self.begin = StringVar() # mm self.end = StringVar() # mm self.autoVal = IntVar() self.labelTop = StringVar() self.labelTop.set('VERTICAL COMPARATOR') # LABELS ON BUTTONS self.label10 = StringVar() # initialize self.label11 = StringVar() # start/stop self.label12 = StringVar() # pause/continue self.label21 = StringVar() # manual self.label22 = StringVar() # auto self.label31 = StringVar() # step self.label32 = StringVar() # start self.label33 = StringVar() # stop self.label51 = StringVar() # manual read interferometer self.label52 = StringVar() # manual read digi level self.label53 = StringVar() # manual read nivel (inclinometer) self.label54 = StringVar() # manual read thermometer self.autoVal.set(0) # init PLC, interferometer and level self.plc = Comparator(comsettings['COMPARATOR_PORT'], int(comsettings['COMPARATOR_BAUD'])) self.conn = self.plc.conn self.paused = None self.ifm = Interferometer(comsettings['IFM_PORT'], int(comsettings['IFM_BAUD'])) self.level = Level(comsettings['LEVEL_PORT'], int(comsettings['LEVEL_BAUD'])) self.nivel = Nivel(comsettings['NIVEL_PORT'], int(comsettings['NIVEL_BAUD'])) self.thermo = Thermometer(comsettings['THERMO_PORT'], int(comsettings['THERMO_BAUD'])) self.observer = '' # operator self.label10.set('Initialize') self.label11.set({0: 'START', 1: 'STOP', 2:'STOP'}[self.active]) # start/stop self.setStatus({0: 'ready', 1: 'active', 2:'steady'}[self.active]) self.label12.set('PAUSE') self.label21.set('MANUAL') # manual self.label22.set('AUTO') # auto self.label31.set('LOW') # start height self.label32.set('HIGH') # stop height self.label33.set('STEP') # step self.label51.set('READ IFM') # read interferometer self.label52.set('READ LVL') # read digi level self.label53.set('READ NVL') # read inclinometer self.label54.set('READ THM') # read thermometer self.chksumText = StringVar() self.responseText = StringVar() self.timestring = StringVar() self.connstring = StringVar() # self.queue = queue.Queue() self.timerthread = threading.Thread(target=self.timer, name='Timer') self.timerthread.start() self.readdata = '' self.connthread = threading.Thread(target=self.checkConnection, name='ConnChk') self.connthread.start() self.statusthread = threading.Thread(target=self.checkStatus, name='StatChk') self.statusthread.start() self.readexternalsthread = threading.Thread(target=self.readExternals, name='ReadExt') self.readexternalsthread.start() self.autologthread = threading.Thread(target=self.autolog, name='Autolog') self.autologthread.start() # starttimer() # startautolog() # startautoserialcheck() # def toggleStartStop(self): # # if start then stop else otherwise # # change button and text color if possible # pass def timer(self): while self.on: dt = datetime.now() - self.starttime self.timestring.set('%-10s' % str(dt).split('.')[0]) time.sleep(0.1) def autolog(self, timeout=60): while self.on: print('Autolog') (s, low, hi, step, ifm, lvl, nvl, thm, obs) = tuple(['']*9) try: s = self.statusText except BaseException: s = 'N/A' try: low = self.lowEntry.get().strip() except BaseException: low = 'N/A' try: hi = self.hiEntry.get().strip() except BaseException: hi = 'N/A' try: step = self.stepEntry.get().strip() except BaseException: step = 'N/A' try: ifm = self.ifm.getReading() except BaseException: ifm = 'N/A' try: lvl = self.level.getReading() except BaseException: lvl = 'N/A' try: nvl = self.nivel.getReading() except BaseException: nvl = 'N/A' try: thm = self.thermo.getReading() except BaseException: thm = 'N/A' try: obs = self.entryObserver.get().strip() except BaseException: obs = 'N/A' log('AUTOLOG! status: %s, low: %s, hi: %s, step: %s, ifm: %s, lvl: %s, nvl:%s, thm: %s, obs: %s' % ( s, low, hi, step, ifm, lvl, nvl, thm, obs)) time.sleep(timeout) def checkConnection(self): connection = False while self.on: if self.conn: try: d = self.conn.read(1) self.readdata += d connection = True except: self.conn.close() try: self.connect() except: connection = False else: try: self.connect() except: connection = False self.connstring.set({True: 'isConn', False: 'notConn'}[connection]) time.sleep(0.5) def checkStatus(self): if self.conn: moving = self.plc.query('is_moving') if moving is None: self.status = 'unknown' elif not self.auto: if moving: self.status = 'active' else: self.status = 'inactive' else: if moving: self.status = 'moving' else: if self.paused: self.status = 'paused' else: self.status = 'steady' else: self.status = 'not connected' def readExternals(self): while self.on: # self.getIfm() # self.getLevel() self.getNivel() self.getThermo() time.sleep(15) def evaluateEntries(self): s, b, e = self.stepEntry, self.beginEntry, self.endEntry res = [None, None, None] for i in range(3): try: res[i] = float([s, b, e][i]) except: pass # leave it None if b > e and s > 0: # if step is negative, it can move downwards (from hi to low) b, e = e, b # otherwise it begin and end must be changed if b>e elif b < e and s < 0: b, e = e, b # INPUT IN MM !! cannot recognize 0.5mm from 0.5m step or 3mm vs 3m end # input values converted to mm # [s,b,e] = [i*1000. if (i is not None and i<5.) else i for i in [s,b,e]] return s, b, e def emptyRow(self, nrow): Label(self.fr, text="", bg=bgcolor).grid(row=nrow, column=0) def setStatus(self, text): self.statusText = text self.statusString.set(self.statusText) def setIfmStatus(self, text): self.ifmStatus.set(text) def setLevelStatus(self, text): self.levelStatus.set(text) def setNivelStatus(self, text): self.nivelStatus.set(text) def setThermoStatus(self, text): self.thermoStatus.set(text) def getIfm(self): # log('Get Ifm reading') response = self.ifm.getReading() or "No response" self.setIfmStatus(response) return response def getLevel(self): # log('Get Level reading') response = self.level.getReading() or "No response" self.setLevelStatus(response) return response def getNivel(self): # log('Get Nivel reading') response = '-'.join(map(str,self.nivel.getReading())) if any(self.nivel.getReading()) else "No response" self.setNivelStatus(response) return response def getThermo(self): # log('Get Thermo reading') response = self.thermo.getReading() or "No response" self.setThermoStatus(response) return response # #set stop button # def setStop(self): # pass # # #set start # def setStart(self): # pass # toggle start stop def startStop(self): # ask comparator if moving, then set "not response" self.active = not self.active # self.setStatus({0: 'ready', 1: 'active'}[self.active]) self.setStatus(self.comparatorStatus) self.label10.set({0: 'START', 1: 'STOP'}[self.active]) self.buttonStartStop.configure(bg=startstopbg[self.active], fg=startstopfg[self.active]) print(self.active) self.observer = self.entryObserver.get().strip() if not self.active: log('CMP stopped %s' % self.observer) else: log('CMP started %s' % self.observer) if self.active: pass # action after comparator is stopped else: pass # action after comparator is started # CURRENT_POSITION, NEXT_POSITION, TARGET_POSITION, ITERATION def writePauseParams(self,**params): with open('.pause') as f: f.write('\n'.join([k+' '+' '.join(vals) for k, vals in params.items()])) return True def readPauseParams(self): params = {} with open('.pause','r') as f: for line in f.readlines(): key = line.split()[0] vals = line.split()[1:] params[key] = vals os.remove('.pause') return params def pauseSession(self): self.paused = True self.stop() self.writePauseParams() def continueSession(self): self.paused = False params = self.readPauseParams() self.moveto(params['NEXT_POS']) self.session(float(params['NEXT_POS']), float(params['TARGET_POS']), float(params['STEP']), int(params['NEXT_ITER'])) def session(self, **params): start = float(params.get('START_POS')) target = float(params.get('TARGET_POS')) step = float(params.get('STEP',5)) iteration = int(params.get('NEXT_ITER',0)) self.plc.moveto(start) self.paused = False op = operator.le if step > 0 else operator.ge while op(self.plc.getPosition(), target): iteration += 1 self.getMeasurement() next_position = self.plc.getPosition() + step if next_position < target: self.plc.moveto(next_position) def initialize(self): if not self.plc.isInit(): log('Initialize') else: log('Already initialized, reinitialize.') self.plc.initialize() def pause(self): # comparator status: # man/inactive, man/active, # auto/steady (measurement), auto/active, auto/paused, auto/finished #['inactive', 'active', 'steady', 'moving', 'paused', 'finished'] if self.comparatorStatus in ('moving', 'steady'): self.pauseSession() elif self.comparatorStatus == 'paused': self.continueSession() # active / inactive - button should be disabled def stop(self): self.plc.command('STOP') def getEntries(self): return self.stepEntry, self.beginEntry, self.endEntry def close(self): self.on = False # for thread in (self.timerthread, self.connthread, self.statusthread, self.autologthread, self.readexternalsthread): # thread.join() # TODO CLOSE ALL CONNECTIONS!! if self.active: self.startStop() self.root.destroy() self.root.quit() def gotoLow(self): low = None self.setStatus('Going to LOW') try: low = float(self.lowEntry.get().strip()) except: pass pass # move carriage to set low return low def gotoHi(self): hi = None self.setStatus('Going to HIGH') try: hi = float(self.hiEntry.get().strip()) except: pass pass # move carriage to set low return hi def moveStep(self): pos = self.plc.getPosition() or 0 # remove 0 when connection established step = 0 try: step = float(self.stepEntry.get().strip()) except BaseException: log('Cannot determine step entry.') targetpos = pos + step if step != 0: self.setStatus('Moving to %f' % targetpos) self.plc.moveto(targetpos) return targetpos def resetIfmStatus(self): self.ifmStatus.set('') def resetLevelStatus(self): self.levelStatus.set('') def resetNivelStatus(self): self.nivelStatus.set('') def resetThermoStatus(self): self.thermoStatus.set('') def submit(self): calculate_checksum = True port = self.portEntry.get().strip() message = self.messageEntry.get() chksumtyp = self.portChecksumType.get() from externals import RS232 from pycrc import pycrc, crc_algorithms, Crc rs = RS232() r = rs.connect(port, baud=38400) if r: print ('Successfully connected to %s' % r.name) checksum = '' if calculate_checksum: from pycrc.crc_algorithm import Crc # params = filter(lambda x: x['name']==chksumtyp, cmodels)[0] params = {'width': 16, 'poly':0x1021, 'reflect_in':True, 'xor_in':0x0000, 'reflect_out':True, 'xor_out':0x0000} crc = Crc(**params) print("{0:#x}".format(crc.bit_by_bit(message))) # crc = Crc(width=16, poly=0x8005, # reflect_in = True, xor_in = 0x0000, # reflect_out = True, xor_out = 0x0000) # >> > print("{0:#x}".format(crc.bit_by_bit("123456789"))) # >> > print("{0:#x}".format(crc.bit_by_bit_fast("123456789"))) # >> > print("{0:#x}".format(crc.table_driven("123456789"))) rs.send() # self.chksumLabel = (self.fr, textvariable = self.chksumText, anchor = 'w', # bg = bgcolor, fg = statuscolor, font = ( # "Calibri", 9)) # self.chksumLabel.grid(row=23, column=2) # # buttonSubmit = Button(self.fr, text="SUBMIT", width=15, justify='center', # bg="black", fg="yellow", command=self.submit, # font=("Calibri", 14, "bold")) # buttonSubmit.grid(row=23, column=0) # # self.responseLabel = (self.fr, textvariable = self.responseText, anchor = 'w', # bg = bgcolor, fg = statuscolor, font = ( # "Calibri", 9)) # self.responseLabel.grid(row=23, column=1) # # self.emptyRow(24) def mainDialog(self): self.basicframe = Frame(self.root) self.basicframe.grid() self.basicframe.configure(bg=bgcolor) self.fr = Frame(self.basicframe) self.fr.grid(row=0, column=0, sticky='new') # , sticky='W') self.fr.configure(bg=bgcolor) # Grid.rowconfigure(root, 0, weight=1) Grid.columnconfigure(root, 0, weight=1) self.emptyRow(0) Label(self.fr, textvariable=self.labelTop, justify='center', bg=bgcolor, font=("Calibri", 24) ).grid(row=1, column=0, columnspan=3, sticky='we') self.emptyRow(2) Label(self.fr, text='STATUS:', justify='left', anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 12) ).grid(row=3, column=0, sticky='we', padx=(5, 0)) self.statusLine = Label(self.fr, textvariable=self.statusString, justify='left', anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 14, "bold") ).grid(row=3, column=1, columnspan=2, sticky='we') self.emptyRow(4) # AUTO / MANUAL self.my_var.set(1) self.buttonManual = Radiobutton(self.fr, text="MANUAL", variable=self.auto, value=0, width=15, justify='center', # bg=buttoncolor2, bg="moccasin", indicatoron=0) # self.exit_root) self.buttonManual.grid(row=5, column=0, sticky='ew', padx=(0, 10)) # self.buttonManual.configure(state='selected') self.buttonAuto = Radiobutton(self.fr, text="AUTO", variable=self.auto, value=1, width=15, justify='center', # bg=buttoncolor2, bg="moccasin", indicatoron=0) # self.exit_root) self.buttonAuto.grid(row=5, column=2, sticky='ew', padx=(10, 0)) self.emptyRow(6) #should be disabled if initialized already self.buttonInitialize = Button(self.fr, text='Initialize', justify='center', bg=buttoncolor, command=self.initialize) self.buttonInitialize.grid(row=7, column=0, sticky='nsew') self.buttonStartStop = Button(self.fr, textvariable=self.label11, command=self.startStop, bg=startstopbg[self.active], fg=startstopfg[self.active], font=("Calibri", 16, "bold"), width=10) self.buttonStartStop.grid(row=7, column=1, sticky='nsew') self.buttonPause = Button(self.fr, textvariable=self.label12, justify='center', bg=buttoncolor, state={0: 'disabled', 1: 'enabled'}[self.auto], command=self.pause) self.buttonPause.grid(row=7, column=2, sticky='nsew') self.emptyRow(8) # put Labels here Label(self.fr, textvariable=self.label31, justify='center', bg=bgcolor, fg=statuscolor, font=("Calibri", 10) ).grid(row=8, column=0, sticky='we') Label(self.fr, textvariable=self.label32, justify='center', bg=bgcolor, fg=statuscolor, font=("Calibri", 10) ).grid(row=8, column=1, sticky='we') Label(self.fr, textvariable=self.label33, justify='center', bg=bgcolor, fg=statuscolor, font=("Calibri", 10) ).grid(row=8, column=2, sticky='we') # input boxes: step start stop (mm) self.lowEntry = Entry(self.fr, width=20, bd=3, justify='right', bg=inputbox, fg=statuscolor) self.lowEntry.grid(row=9, column=0, sticky='we') # , columnspan=2) # SET DEFAULT LOW # self.lowEntry.delete(0,END) # self.lowEntry.insert(0, MINPOS) self.hiEntry = Entry(self.fr, width=20, bd=3, justify='right', bg=inputbox, fg=statuscolor) self.hiEntry.grid(row=9, column=1, sticky='we') # , columnspan=2) # SET DEFAULT HIGH # self.hiEntry.delete(0,END) # self.hiEntry.insert(0, MAXPOS) self.stepEntry = Entry(self.fr, width=20, bd=3, justify='right', bg=inputbox, fg=statuscolor) self.stepEntry.grid(row=9, column=2, sticky='we') # , columnspan=2) # put buttons for GOTO and MOVE self.butGotoLow = Button(self.fr, text="Go To Low", justify='center', bg=buttoncolor, command=self.gotoLow) self.butGotoLow.grid(row=10, column=0, sticky='we') self.butGotoHi = Button(self.fr, text="Go To High", justify='center', bg=buttoncolor, command=self.gotoHi) self.butGotoHi.grid(row=10, column=1, sticky='we') self.butMoveStep = Button(self.fr, text="Move a Step", justify='center', bg=buttoncolor, command=self.moveStep) self.butMoveStep.grid(row=10, column=2, sticky='we') self.emptyRow(11) Label(self.fr, text='EXTERNAL SENSORS', justify='left', anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 12) ).grid(row=12, column=0, columnspan=3, sticky='we', padx=(5, 0)) # function buttons # RIadok 13-16: Externals # Interferometer buttonIfm = Button(self.fr, text="Read IFM", width=15, justify='center', bg=buttoncolor, command=self.getIfm) # self.exit_root) buttonIfm.grid(row=13, column=0, sticky='we') self.labelIfmStatus = Label(self.fr, textvariable=self.ifmStatus, justify='left', anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 12)) self.labelIfmStatus.grid(row=13, column=1, columnspan=2, sticky='we', padx=(15, 0)) self.labelIfmStatus.bind('<Button-1>', self.resetIfmStatus) # Digital level (Leica /Trimble) buttonLevel = Button(self.fr, text="Read Level", width=15, justify='center', bg=buttoncolor, command=self.getLevel) # self.exit_root) buttonLevel.grid(row=14, column=0, sticky='we') self.labelLevelStatus = Label(self.fr, textvariable=self.levelStatus, justify='left', anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 12)) self.labelLevelStatus.grid(row=14, column=1, columnspan=2, sticky='we', padx=(15, 0)) self.labelLevelStatus.bind('<Button-1>', self.resetLevelStatus) # Nivel - inclinometer buttonNivel = Button(self.fr, text="Read Nivel", width=15, justify='center', bg=buttoncolor, command=self.getNivel) # self.exit_root) buttonNivel.grid(row=15, column=0, sticky='we') self.labelNivelStatus = Label(self.fr, textvariable=self.nivelStatus, justify='left', anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 12)) self.labelNivelStatus.grid(row=15, column=1, columnspan=2, sticky='we', padx=(15, 0)) self.labelNivelStatus.bind('<Button-1>', self.resetNivelStatus) # Thermometer line buttonThermo = Button(self.fr, text="Read Thermo", width=15, justify='center', bg=buttoncolor, command=self.getThermo) # self.exit_root) buttonThermo.grid(row=16, column=0, sticky='we') self.labelThermoStatus = Label(self.fr, textvariable=self.thermoStatus, justify='left', anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 12)) self.labelThermoStatus.grid(row=16, column=1, columnspan=2, sticky='we', padx=(15, 0)) self.labelThermoStatus.bind('<Button-1>', self.resetThermoStatus) self.emptyRow(17) Label(self.fr, text='OBSERVER:', anchor='w', justify='left', bg=bgcolor, fg=statuscolor, font=("Calibri", 12) ).grid(row=19, column=0, sticky='we', padx=(5, 0)) self.entryObserver = Entry(self.fr, textvariable=self.observer, bg=inputbox, fg=statuscolor, font=("Calibri", 12), justify='left') self.entryObserver.grid(row=19, column=1, columnspan=2, sticky='we') # row 18> empty (or test connection) self.emptyRow(20) if ADMIN_MODE: # port, message, checksum_type?, resulting checksum?, submit, response self.portEntry = Entry(self.fr, width=20, bd=3, justify='left', bg=inputbox, fg=statuscolor) self.portEntry.grid(row=21, column=0, sticky='we') Label(self.fr, text='PORT', anchor='w', justify='left', bg=bgcolor, fg=statuscolor, font=("Calibri", 12) ).grid(row=22, column=0, sticky='we', padx=(5, 0)) self.messageEntry = Entry(self.fr, width=20, bd=3, justify='left', bg=inputbox, fg=statuscolor) self.messageEntry.grid(row=21, column=1, sticky='we') Label(self.fr, text='MESSAGE', anchor='w', justify='left', bg=bgcolor, fg=statuscolor, font=("Calibri", 12) ).grid(row=22, column=1, sticky='we', padx=(5, 0)) self.portChecksumType = Entry(self.fr, width=20, bd=3, justify='left', bg=inputbox, fg=statuscolor) self.portChecksumType.grid(row=21, column=2, sticky = 'we') Label(self.fr, text='CHKSUM TYPE', anchor='w', justify='left', bg=bgcolor, fg=statuscolor, font=("Calibri", 12) ).grid(row=22, column=2, sticky='we', padx=(5, 0)) self.chksumLabel = Label(self.fr, textvariable=self.chksumText, anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 9)) self.chksumLabel.grid(row=23, column=2) buttonSubmit = Button(self.fr, text="SUBMIT", width=15, justify='center', bg="black", fg="yellow", command=self.submit, font=("Calibri", 14, "bold")) buttonSubmit.grid(row=23, column=0) self.responseLabel = Label(self.fr, textvariable=self.responseText, anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 9)) self.responseLabel.grid(row=23, column=1) self.emptyRow(24) lastLine = 21 if not ADMIN_MODE else 25 self.timeLabel = Label(self.fr, textvariable=self.timestring, anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 9)) self.timeLabel.grid(row=lastLine, column=0) self.connLabel = Label(self.fr, textvariable=self.connstring, anchor='w', bg=bgcolor, fg=statuscolor, font=("Calibri", 9)) self.connLabel.grid(row=lastLine, column=1) butexit = Button(self.fr, text="EXIT", width=15, justify='center', bg="black", fg="yellow", command=self.close, font=("Calibri", 14, "bold")) butexit.grid(row=lastLine, column=2)
def _popupsearchcondwindow(self, index=-1): if index < 0: cond = ValueSearchCondition("", "") else: cond = self._getselectedfile().searchconds[index] window = Toplevel(self) title = Label(window, text="New Search Condition") title.grid(row=0, column=0, padx=5, pady=5, sticky=W + N) fieldlabel = Label(window, text="Field Name: ") fieldlabel.grid(row=1, column=0, padx=5, pady=5, sticky=W) fields = csvhandler.getfields(self._getselectedfile().filename) fieldvar = StringVar(window) fieldinput = Combobox(window, textvariable=fieldvar, values=fields, width=20) fieldinput.grid(row=1, column=1, columnspan=2, padx=5, pady=5, sticky=W) valuelabel = Label(window, text="Value: ") valuelabel.grid(row=3, column=0, padx=5, pady=5, sticky=W) valueinput = Entry(window) valueinput.grid(row=3, column=1, columnspan=2, padx=5, pady=5, sticky=W) minlabel = Label(window, text="Min Value: ") minlabel.grid(row=4, column=0, padx=5, pady=5, sticky=W) mininput = Entry(window) mininput.grid(row=4, column=1, columnspan=2, padx=5, pady=5, sticky=W) maxlabel = Label(window, text="Max Value: ") maxlabel.grid(row=5, column=0, padx=5, pady=5, sticky=W) maxinput = Entry(window) maxinput.grid(row=5, column=1, columnspan=2, padx=5, pady=5, sticky=W) sarchkind = IntVar() def _enablesingle(): valueinput.config(state=NORMAL) mininput.config(state=DISABLED) maxinput.config(state=DISABLED) singlebutton.select() def _enablejoin(): valueinput.config(state=DISABLED) mininput.config(state=NORMAL) maxinput.config(state=NORMAL) joinbutton.select() typelabel = Label(window, text="Search Type: ") typelabel.grid(row=2, column=0, padx=5, pady=5, sticky=W) singlebutton = Radiobutton(window, text="Single", variable=sarchkind, value=1, command=_enablesingle) singlebutton.grid(row=2, column=1, columnspan=1, padx=5, pady=5, sticky=W) joinbutton = Radiobutton(window, text="Range", variable=sarchkind, value=2, command=_enablejoin) joinbutton.grid(row=2, column=2, columnspan=1, padx=5, pady=5, sticky=W) # init value fieldvar.set(cond.field) if isinstance(cond, ValueSearchCondition): valueinput.insert(0, cond.val) _enablesingle() elif isinstance(cond, RangeSearchCondition): mininput.insert(0, cond.valmin) maxinput.insert(0, cond.valmax) _enablejoin() def _newcond(): '''create new condition ''' if sarchkind.get() == 1: cond = ValueSearchCondition(fieldvar.get(), valueinput.get()) else: cond = RangeSearchCondition(fieldvar.get(), mininput.get(), maxinput.get()) selectedfile = self._getselectedfile() if index < 0: selectedfile.searchconds.append(cond) else: del selectedfile.searchconds[index] selectedfile.searchconds[index:index] = [cond] self._inflatesearchcondlist(selectedfile) window.destroy() okbtn = Button(window, text="Confirm", width=7, command=_newcond) okbtn.grid(row=6, column=1, rowspan=1, columnspan=1, sticky=E, padx=5, pady=5) clsbtn = Button(window, text="Close", width=7, command=lambda: window.destroy()) clsbtn.grid(row=6, column=2, rowspan=1, columnspan=1, sticky=E, padx=5, pady=5)
def init_gui(self): """init helper""" # setting up frames top_frame = Frame(self.root) mid_frame = Frame(self.root) radio_frame = Frame(self.root) res_frame = Frame(self.root) msg_frame = Frame(self.root) check_frame = Frame(self.root) history_frame = Frame(self.root) btn_frame = Frame(self.root) rating_frame = Frame(self.root) top_frame.pack(side=TOP, fill=X) mid_frame.pack(side=TOP, fill=X) history_frame.pack(side=TOP, fill=BOTH, expand=True) radio_frame.pack(side=TOP, fill=BOTH, expand=True) rating_frame.pack(side=TOP, fill=BOTH, expand=True) res_frame.pack(side=TOP, fill=BOTH, expand=True) check_frame.pack(side=TOP, fill=BOTH, expand=True) msg_frame.pack(side=TOP, fill=BOTH, expand=True) btn_frame.pack(side=TOP, fill=X) # Message ListBox rightscrollbar = Scrollbar(msg_frame) rightscrollbar.pack(side=RIGHT, fill=Y) bottomscrollbar = Scrollbar(msg_frame, orient=HORIZONTAL) bottomscrollbar.pack(side=BOTTOM, fill=X) self.lbMessages = Listbox( msg_frame, yscrollcommand=rightscrollbar.set, xscrollcommand=bottomscrollbar.set, bg="white" ) self.lbMessages.pack(expand=True, fill=BOTH) rightscrollbar.config(command=self.lbMessages.yview) bottomscrollbar.config(command=self.lbMessages.xview) # History ListBoxes rightscrollbar2 = Scrollbar(history_frame) rightscrollbar2.pack(side=RIGHT, fill=Y) bottomscrollbar2 = Scrollbar(history_frame, orient=HORIZONTAL) bottomscrollbar2.pack(side=BOTTOM, fill=X) self.showhistory = Listbox( history_frame, yscrollcommand=rightscrollbar2.set, xscrollcommand=bottomscrollbar2.set, bg="white" ) self.showhistory.pack(expand=True, fill=BOTH) rightscrollbar2.config(command=self.showhistory.yview) bottomscrollbar2.config(command=self.showhistory.xview) self.showhistory.bind("<Double-Button-1>", self.select_recent_file) self.set_history_window() # status bar self.status = Label(self.root, text="", bd=1, relief=SUNKEN, anchor=W) self.status.pack(side=BOTTOM, fill=X) # labels self.lblRatingLabel = Label(rating_frame, text="Rating:") self.lblRatingLabel.pack(side=LEFT) self.lblRating = Label(rating_frame, textvariable=self.rating) self.lblRating.pack(side=LEFT) Label(mid_frame, text="Recently Used:").pack(side=LEFT) Label(top_frame, text="Module or package").pack(side=LEFT) # file textbox self.txtModule = Entry(top_frame, background="white") self.txtModule.bind("<Return>", self.run_lint) self.txtModule.pack(side=LEFT, expand=True, fill=X) # results box rightscrollbar = Scrollbar(res_frame) rightscrollbar.pack(side=RIGHT, fill=Y) bottomscrollbar = Scrollbar(res_frame, orient=HORIZONTAL) bottomscrollbar.pack(side=BOTTOM, fill=X) self.results = Listbox( res_frame, yscrollcommand=rightscrollbar.set, xscrollcommand=bottomscrollbar.set, bg="white", font="Courier" ) self.results.pack(expand=True, fill=BOTH, side=BOTTOM) rightscrollbar.config(command=self.results.yview) bottomscrollbar.config(command=self.results.xview) # buttons Button(top_frame, text="Open", command=self.file_open).pack(side=LEFT) Button(top_frame, text="Open Package", command=(lambda: self.file_open(package=True))).pack(side=LEFT) self.btnRun = Button(top_frame, text="Run", command=self.run_lint) self.btnRun.pack(side=LEFT) Button(btn_frame, text="Quit", command=self.quit).pack(side=BOTTOM) # radio buttons self.information_box = IntVar() self.convention_box = IntVar() self.refactor_box = IntVar() self.warning_box = IntVar() self.error_box = IntVar() self.fatal_box = IntVar() i = Checkbutton( check_frame, text="Information", fg=COLORS["(I)"], variable=self.information_box, command=self.refresh_msg_window, ) c = Checkbutton( check_frame, text="Convention", fg=COLORS["(C)"], variable=self.convention_box, command=self.refresh_msg_window, ) r = Checkbutton( check_frame, text="Refactor", fg=COLORS["(R)"], variable=self.refactor_box, command=self.refresh_msg_window ) w = Checkbutton( check_frame, text="Warning", fg=COLORS["(W)"], variable=self.warning_box, command=self.refresh_msg_window ) e = Checkbutton( check_frame, text="Error", fg=COLORS["(E)"], variable=self.error_box, command=self.refresh_msg_window ) f = Checkbutton( check_frame, text="Fatal", fg=COLORS["(F)"], variable=self.fatal_box, command=self.refresh_msg_window ) i.select() c.select() r.select() w.select() e.select() f.select() i.pack(side=LEFT) c.pack(side=LEFT) r.pack(side=LEFT) w.pack(side=LEFT) e.pack(side=LEFT) f.pack(side=LEFT) # check boxes self.box = StringVar() # XXX should be generated report = Radiobutton( radio_frame, text="Report", variable=self.box, value="Report", command=self.refresh_results_window ) rawMet = Radiobutton( radio_frame, text="Raw metrics", variable=self.box, value="Raw metrics", command=self.refresh_results_window ) dup = Radiobutton( radio_frame, text="Duplication", variable=self.box, value="Duplication", command=self.refresh_results_window ) ext = Radiobutton( radio_frame, text="External dependencies", variable=self.box, value="External dependencies", command=self.refresh_results_window, ) stat = Radiobutton( radio_frame, text="Statistics by type", variable=self.box, value="Statistics by type", command=self.refresh_results_window, ) msgCat = Radiobutton( radio_frame, text="Messages by category", variable=self.box, value="Messages by category", command=self.refresh_results_window, ) msg = Radiobutton( radio_frame, text="Messages", variable=self.box, value="Messages", command=self.refresh_results_window ) report.select() report.grid(column=0, row=0, sticky=W) rawMet.grid(column=1, row=0, sticky=W) dup.grid(column=2, row=0, sticky=W) msg.grid(column=3, row=0, sticky=E) stat.grid(column=0, row=1, sticky=W) msgCat.grid(column=1, row=1, sticky=W) ext.grid(column=2, row=1, columnspan=2, sticky=W) # dictionary for check boxes and associated error term self.msg_type_dict = { "I": lambda: self.information_box.get() == 1, "C": lambda: self.convention_box.get() == 1, "R": lambda: self.refactor_box.get() == 1, "E": lambda: self.error_box.get() == 1, "W": lambda: self.warning_box.get() == 1, "F": lambda: self.fatal_box.get() == 1, } self.txtModule.focus_set()
class MyGUI: rate1 = 60 def __init__(self, master): self.master = master master.title("ICP WaveForm Control") master.geometry("480x320") self.modelone = Radiobutton(master, text = "Normal", bg = 'seashell3', indicatoron = 0, value =1, variable = 1, command = self.modelone) ## self.modelone.pack(fill = X, expand = 1) self.modelone.grid(row = 1, column = 0, sticky ='WNS', padx = 0, pady = 10) self.modeltwo = Radiobutton(master, text = "Leveled",indicatoron = 0, value = 2, variable = 1, bg = 'seashell3',command = self.modeltwo) ## self.modeltwo.pack(fill = X, expand = 1) self.modeltwo.grid(row=2, column=0,sticky = 'WNS', padx =0, pady = 10) ## mi = PhotoImage(" ## self.modeltwo.config( self.modelthree = Radiobutton(master, text = "Abnormal", indicatoron = 0, value = 3, variable = 1, bg = 'seashell3', command = self.modelthree) ## self.modelthree.pack(fill = X, expand = 1) self.modelthree.grid(row=3, column=0, sticky ='WNS', padx = 0, pady = 10) self.donebutton = Radiobutton(master, text = "Zero", indicatoron = 0, variable = 1, value = 4, bg = 'seashell3', command = self.done) ## self.donebutton.pack(fill = X, expand = 1) self.donebutton.grid(row=4, column=0, sticky ='WNS', padx = 0, pady = 10) self.quitbutton = Radiobutton(master, text = "Quit", indicatoron = 0, value = 5, variable = 1, bg = 'seashell3', command = self.quit) ## self.quitbutton.pack(fill = X, expand = 1) self.quitbutton.grid(row=5, column=0, sticky ='EWNS', padx = 0, pady = 10) Label(master, text = "", width = 5, height = 5).grid(row = 2, column = 4, sticky = "WNS") self.DisplayButton = Button(master, text = self.rate1) self.DisplayButton.grid(column = 1, row = 2, sticky = "WNS") self.Plus1Button = Button(master, text = "+1", command=self.plus1, bg="green") self.Plus1Button.grid(column = 1, row = 1, sticky = "WNS") self.Neg1Button = Button(master, text = "-1", command=self.neg1, bg="green") self.Neg1Button.grid(column = 1, row = 3, sticky = "WNS") self.pid = -1 def plus1(self): self.done() self.rate1 += 5 self.DisplayButton["text"]=str(self.rate1) def neg1(self): self.done() self.rate1 -= 5 self.DisplayButton["text"]=str(self.rate1) def modelone(self): self.done() self.process = subprocess.Popen('python modelone.py {}'.format(self.rate1), shell=True, preexec_fn=os.setsid) self.pid = self.process.pid def modeltwo(self): self.done() self.process = subprocess.Popen('python modeltwo.py {}'.format(self.rate1), shell=True, preexec_fn=os.setsid) self.pid = self.process.pid def modelthree(self): self.done() self.process = subprocess.Popen('python modelthree.py {}'.format(self.rate1), shell=True, preexec_fn=os.setsid) self.pid = self.process.pid def done(self): if self.pid > 0: os.killpg(os.getpgid(self.pid), signal.SIGTERM) self.pid = -1 def quit(self): self.done() self.master.quit()
class Main: def __init__(self, master): # we will define everything in the UI below logger.info("Program start") self.master = master self.master.wm_title("Lautaloader v.1.03") # title of window self.master.resizable(width=FALSE, height=FALSE) # window is not resizable self.master.geometry('420x240') # resolution of the window in pixels self.master.grid_propagate(False) # window will not resize in any case self.r_selection = IntVar() # these are radiobuttons and checkbuttons self.c1_selection = IntVar() self.c2_selection = IntVar() self.c1_selection.set(0) # checkbuttons will be off at launch self.c2_selection.set(0) self.r_selection.set(1) # we need one radiobutton selected at start self.status_text = StringVar() # status text is visible at the bottom of GUI self.status_text.set('Ready to work') # we can (and will) set the status text like this self.save_folder = '' # we will save into this folder self.filenames = [] # this is our folder filenames list self.url_text = StringVar() self.num_pics = 0 self.num_mp4 = 0 self.num_mp3 = 0 self.image_url = '' self.name_of_file = '' self.res = '' self.imagefile = '' self.filesize = '' self.imagewritten = False self.read_timeout = 1.0 self.headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) ' 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36', 'Upgrade-Insecure-Requests': '1', 'Referer': '', 'DNT': '1', 'Accept-Language': 'fi-FI,fi;q=0.8,en-US;q=0.6,en;q=0.4', 'Accept-Encoding': 'gzip, deflate, sdch', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' } # need to send some headers or server refuses connection self.lf = LabelFrame(master, text=' Get ') self.lf.grid(row=1, column=1, rowspan=4) self.lf2 = LabelFrame(master, text=' Options ') self.lf2.grid(row=1, column=2) self.R1 = Radiobutton(self.lf, text="All", variable=self.r_selection, value=1) self.R1.grid(row=1, column=1, sticky=W) self.R2 = Radiobutton(self.lf, text="only img", variable=self.r_selection, value=2) self.R2.grid(row=2, column=1, sticky=W) self.R3 = Radiobutton(self.lf, text="only mp4", variable=self.r_selection, value=3) self.R3.grid(row=3, column=1, sticky=W) self.R4 = Radiobutton(self.lf, text="only mp3", variable=self.r_selection, value=4) self.R4.grid(row=4, column=1, sticky=W) self.C1 = Checkbutton(self.lf2, text="Create new filenames", variable=self.c1_selection, state=NORMAL, onvalue=1, offvalue=0) self.C1.grid(row=1, column=2, sticky=W) self.C2 = Checkbutton(self.lf2, text="Overwrite if found", variable=self.c2_selection, state=NORMAL, onvalue=1, offvalue=0) self.C2.grid(row=2, column=2, sticky=W) self.folder_label = Label(master, text="Folder: ") self.folder_label.grid(row=5, sticky=E) self.url_label = Label(root, text="URL: ") self.url_label.grid(row=6, sticky=E) self.folder_entry = Entry(master, textvariable=self.save_folder, state="readonly", width=50) self.folder_entry.grid(row=5, column=1, columnspan=2) self.url_entry = Entry(master, textvariable=self.url_text, width=50) self.url_entry.grid(row=6, column=1, columnspan=2) self.selectbutton = Button(master, text="Select..", state=NORMAL, command=self.get_folder) self.selectbutton.grid(row=5, column=3, sticky=W) self.openfolderbutton = Button(master, text="Open folder", state=DISABLED, command=self.openfolder) self.openfolderbutton.grid(row=3, column=2, sticky=W, padx=22) self.urlbutton = Button(master, text="Download", state=DISABLED, command=self.logic) self.urlbutton.grid(row=6, column=3, sticky=W) self.status = Label(master, textvariable=self.status_text, wraplength=300) self.status.grid(row=9, columnspan=4, sticky=W) self.progressbar = Progressbar(master, orient="horizontal", length=100, mode="determinate") self.progressbar.grid(row=8, sticky='we', columnspan=3, pady=3) self.manage_config() # process through config file self.url_1 = config.get('basic_config', 'url_1') logging.debug("url_1 set to %s" % self.url_1) self.url_2 = config.get('basic_config', 'url_2') logging.debug("url_2 set to %s" % self.url_2) if self.save_folder != '': # if save folder is not empty, we probably have a valid folder self.urlbutton['state'] = 'normal' # so we can enable urlbutton already self.openfolderbutton['state'] = 'normal' # and we can also enable open folder button def manage_config(self): if not os.path.isfile(os.path.expanduser("~\\documents\\lloader_cfg.ini")): with open((os.path.expanduser("~\\documents\\lloader_cfg.ini")), 'w') as cfgfile: config.add_section('basic_config') # cfg file not exists so we make it config.set('basic_config', 'save_folder', self.save_folder) config.set('basic_config', 'html_tag1', ".filecontainer figcaption a") config.set('basic_config', 'html_tag2', ".filecontainer .file a") config.set('basic_config', 'url_1', "ylilauta.org") config.set('basic_config', 'url_2', "www.ylilauta.org") # .filecontainer .file a = ALL images (np included) but not mp4 # .filecontainer figcaption a = not np images, but all uploaded images & mp4 config.write(cfgfile) logger.debug("Created a config file") else: try: config.read(os.path.expanduser('~\\documents\\lloader_cfg.ini')) self.folder_entry['state'] = 'normal' # make the folder field writable self.folder_entry.delete(0, END) self.save_folder = config.get('basic_config', 'save_folder') # get save folder from file self.folder_entry.insert(0, self.save_folder) # write to folder field self.folder_entry['state'] = 'readonly' # make it read-only again logger.debug("Read from config") except (IOError, OSError): logger.exception("Config error") except (configparser.MissingSectionHeaderError, configparser.NoSectionError): # correct section not found from file os.remove(os.path.expanduser("~\\documents\\lloader_cfg.ini")) self.manage_config() # delete file and try to create it from start def get_folder(self): dir_opt = options = {} # define options for get folder function options['initialdir'] = self.save_folder options['mustexist'] = False options['parent'] = self.master options['title'] = 'Choose a directory' self.save_folder = filedialog.askdirectory(**dir_opt) # actual function to get the folder name with open((os.path.expanduser("~\\documents\\lloader_cfg.ini")), 'w') as cfgfile: config.set('basic_config', 'save_folder', self.save_folder) config.write(cfgfile) # write new save folder to config file self.folder_entry['state'] = 'normal' # make the folder field writable self.folder_entry.delete(0, END) self.folder_entry.insert(0, self.save_folder) # update folder field self.folder_entry['state'] = 'readonly' # make it read-only again self.clear_savefolder_list() self.openfolderbutton['state'] = 'normal' # we can now press the open folder and url buttons self.urlbutton['state'] = 'normal' # because we have defined a save folder def openfolder(self): os.startfile(self.save_folder) # opens the save folder def clear_savefolder_list(self): del self.filenames[:] # clears the list of files in a folder self.filenames.append(next(os.walk(self.save_folder))[2]) # adds every file in folder to list def check_for_url(self): parse = urlparse(self.url_texti.lower()) # checks if url is ylilauta logging.debug("url started with %s" % parse.netloc) if (parse.netloc.startswith(self.url_1) or parse.netloc.startswith(self.url_2)): return True else: return False def is_image(self): if (self.image_url.lower().endswith(".jpg") or self.image_url.lower().endswith(".jpeg") or self.image_url.lower().endswith(".png")): # link seems to be image return True else: return False def is_mp4(self): if self.image_url.lower().endswith(".mp4"): # link ends in mp4 so its mp4 return True else: return False def is_mp3(self): if self.image_url.lower().endswith(".mp3"): # link ends in mp3 so its mp3 return True else: return False def we_want_it_anyway(self): if self.c2_selection.get() == 1: # checkbutton2 is selected so we want all files return True else: return False def getting_both(self): if self.r_selection.get() == 1: # first radio button is selected so dl both return True else: return False def getting_img(self): if self.r_selection.get() == 2: # second radio button is selected so dl images only return True else: return False def getting_mp4(self): if self.r_selection.get() == 3: # third radio button is selected so dl mp4 only return True else: return False def getting_mp3(self): if self.r_selection.get() == 4: # fourth radio button is selected so we get mp3 only return True else: return False def rename_file(self): get_filetype = os.path.splitext(os.path.basename(self.image_url))[1] # get filetype new_file_name_start = '' for i in range(0, 15): new_file_name_start += str(random.randint(0, 9)) # create random string of numbers self.name_of_file = (new_file_name_start + get_filetype) # create the whole new name def write_file(self): self.status_text.set('Downloading %s' % self.name_of_file) logger.info('Downloading %s' % self.name_of_file) self.master.update() self.res = requests.get(self.image_url) self.res.raise_for_status() try: with open(os.path.join(self.save_folder, self.name_of_file), 'wb') as self.imagefile: for chunk in self.res.iter_content(100000): self.imagefile.write(chunk) self.imagewritten = True except IOError: logger.exception("Exception with file write") self.status_text.set('File error') self.master.update() def file_get_logic(self): self.clear_savefolder_list() # need to update this list between files self.imagewritten = False # need to change this here because if same thread has same pictures if self.c1_selection.get() == 1: # if want new random name self.rename_file() else: self.name_of_file = os.path.basename(self.image_url) # using default filename if self.name_of_file in self.filenames[0]: # file exists if self.c2_selection.get() == 1: # we want to overwrite self.write_file() else: pass elif self.name_of_file not in self.filenames[0]: # file does not exist in folder self.write_file() # so we take it in self.master.update() def connect_logic(self): try: self.res = requests.get(self.url_texti, headers=self.headers, timeout=(10.0, self.read_timeout)) self.res.raise_for_status() except (requests.exceptions.ReadTimeout, requests.exceptions.HTTPError): logger.exception("Connection exception") self.status_text.set("Network error %s" % self.res.status_code) self.master.update() def logic(self): self.clear_savefolder_list() self.num_pics = 0 # make these 0 because we just called the function self.num_mp4 = 0 self.num_mp3 = 0 self.imagewritten = False self.url_texti = '' self.progressbar["value"] = 0 done = False if self.url_text != '': self.url_texti = (self.url_text.get()) # if url text is not empty we will set it to variable if not self.url_text or self.check_for_url() is False: # if url is wrong or empty self.status_text.set('URL not supported') logger.debug("URL is false: %s" % self.url_texti) while not done and self.check_for_url() is True: self.urlbutton['state'] = 'disabled' # disable buttons so they cant be pressed while run self.selectbutton['state'] = 'disabled' # we will enable them again in the end self.R1['state'] = 'disabled' self.R2['state'] = 'disabled' self.R3['state'] = 'disabled' self.R4['state'] = 'disabled' self.C1['state'] = 'disabled' self.C2['state'] = 'disabled' self.url_entry['state'] = 'readonly' self.status_text.set(("Getting from %s" % self.url_texti)) self.progressbar['value'] = 0 self.master.update() self.connect_logic() soup = bs4.BeautifulSoup(self.res.text, 'html.parser') # create soup total_stuff = 0 html_tag1 = config.get('basic_config', 'html_tag1') # we will fetch from these tags html_tag2 = config.get('basic_config', 'html_tag2') list_of_links = [] for imglink in soup.select(html_tag1): # grab items from tags and put them to list if imglink.get('href') not in list_of_links: list_of_links.append(str(imglink.get('href'))) for imglink in soup.select(html_tag2): if imglink.get('href') not in list_of_links: list_of_links.append(str(imglink.get('href'))) try: list_of_links = [x for x in list_of_links if x != "None"] # clear "none"s from list except ValueError: # there is no "none" in list pass total_stuff = len(list_of_links) # variable helps with progressbar logger.debug("total stuff is: %s" % total_stuff) for link in list_of_links: # iterate through list of links link = 'http:' + link # make item a valid link self.image_url = link # file get logic still uses global variable lol if (link.lower().endswith('.jpg') or link.lower().endswith('png') or link.lower().endswith('jpeg')): # we have an image if self.getting_both() or self.getting_img(): # we want an image self.file_get_logic() # we get an image if self.imagewritten: # logic is complete and image is written self.num_pics += 1 if link.lower().endswith('.mp4'): # same as above but with mp4 if self.getting_both() or self.getting_mp4(): self.file_get_logic() if self.imagewritten: self.num_mp4 += 1 if link.lower().endswith('.mp3'): if self.getting_both() or self.getting_mp3(): self.file_get_logic() if self.imagewritten: self.num_mp3 += 1 self.progressbar['value'] += 100 / total_stuff # progressbar fills self.status_text.set('Downloaded %s images, %s mp4, %s mp3.' % (self.num_pics, self.num_mp4, self.num_mp3)) self.urlbutton['state'] = 'normal' self.url_entry['state'] = 'normal' self.selectbutton['state'] = 'normal' self.R1['state'] = 'normal' self.R2['state'] = 'normal' self.R3['state'] = 'normal' self.R4['state'] = 'normal' self.C1['state'] = 'normal' self.C2['state'] = 'normal' # we have enabled all buttons to be used again logger.info("Done.") break logging.shutdown()
class Nim(Tk): def __init__(self): Tk.__init__(self) self.title("Nim") self.kamen = PhotoImage(file = './kamen.ppm') self.nacin = BooleanVar() #0 is ai, 1 is human self.nacin = 0 self.zahtevnost = DoubleVar() #0, 1, 2 are (easy, medium hard) self.vnos_nacina = Entry(self, textvariable = "način") ni = Button(self, text="Nova igra", command=self.nova_igra) ni.grid(column = 2, row = 0) self.platno = Canvas(self, width=700, height = 500, bg='white') self.platno.grid(row= 3, column = 0, columnspan=4) self.vrhovi = [] self.z1 = Radiobutton(self, text = "Skoraj Nepremagljivo!", variable = self.zahtevnost, value=1) self.z2 = Radiobutton(self, text = "Srednje zahtevno ", variable = self.zahtevnost, value=2) self.z3 = Radiobutton(self, text = "Za majhne punčke ", variable = self.zahtevnost, value=3) self.z1.grid(column = 0, row = 0) self.z2.grid(column = 0, row = 1) self.z3.grid(column = 0, row = 2) self.z1.select() self.konec = Label() self.mainloop() def nova_igra(self): # print(self.zahtevnost.get()) if self.vrhovi != []: self.unici_kamne() self.k1.destroy() self.k2.destroy() self.k3.destroy() self.ligralec.destroy() # print(self.vrhovi) self.vrhovi = [randint(1, 5), randint(1, 5), randint(1, 5)] self.kamni = [[],[],[]] self.narisi_kamne(1) self.ligralec = Label(self, text='Na vrsti ste vi!', bg='white', font=("Calibri",21)) self.lracunalnik = Label(self, text='Na vrsti je računalnik', bg='white', font=("Calibri",21)) self.k1 = Label(self, text="Prvi kupček", bg='white') self.k1.place(x = 10, y=220) self.k2 = Label(self, text="Drugi kupček", bg='white') self.k2.place(x = 10, y=330) self.k3 = Label(self, text="Tretji kupček", bg='white') self.k3.place(x = 10, y=440) self.ligralec.place(x=300, y=130) self.konec.destroy() def preveri_zmagovalca(self, igralec): if max(self.vrhovi)<1: self.ligralec.destroy() self.lracunalnik.destroy() if igralec == 0: self.konec = Label(text='Čestitamo, zmagali ste!', bg = 'white', font=("Calibri", 24)) else: self.konec = Label(text = 'Več sreče prihodnjič!', bg = 'white', font=("Calibri",24)) self.konec.place(x=150, y=250) self.k1.destroy() self.k2.destroy() self.k3.destroy() def sestevek(self): s = 0 for i in range(len(self.vrhovi)): s = s^self.vrhovi[i] return s def sestevki(self): return [a^self.X < a for a in self.vrhovi] def naredi_potezo_AI(self): #Ta del kode sem dobil tako, da sem priredil kodo iz wikipedije #vir: http://en.wikipedia.org/wiki/Nim self.X = self.sestevek() S = self.sestevki() odstranjenih = 0 if self.X == 0: if max(self.vrhovi) >1: print("Can't win") for i, vrh in enumerate(self.vrhovi): if vrh>0: izbrani, odstranjenih = i, vrh else: izbrani = S.index(True) odstranjenih = self.vrhovi[izbrani] - (self.vrhovi[izbrani]^self.X) dva_alivec = 0 for i, vrh in enumerate(self.vrhovi): if i == izbrani: if vrh-odstranjenih > 1: dva_alivec += 1 else: if vrh > 1: dva_alivec += 1 if dva_alivec == 0: izbrani = self.vrhovi.index(max(self.vrhovi)) vrhov_z1 = sum(v == 1 for v in self.vrhovi) if vrhov_z1%2 == 1: odstranjenih = self.vrhovi[izbrani]-1 else: odstranjenih = self.vrhovi[izbrani] if odstranjenih == 0: odstranjenih = 1 izbrani = self.vrhovi.index(True) x = 10*(1-(1/self.zahtevnost.get())) v = randint(1, 10) if v < x: neprazni = [] for i, vr in enumerate(self.vrhovi): if vr>0: neprazni.append(i) izbrani = choice(neprazni) odstranjenih = randint(1, self.vrhovi[izbrani]) self.vrhovi[izbrani] -= odstranjenih self.unici_kamne() self.narisi_kamne(b=1) self.lracunalnik.place_forget() self.ligralec.place(x=300, y=130) self.preveri_zmagovalca(1) # print("Odstranil sem " + str(odstranjenih+1) + " kamenčkov iz " + str(izbrani+1) + " vrha.") def narisi_kamne(self, b=0): # print("narisi kamne") self.kamni = [[],[],[]] for i, j in enumerate(self.vrhovi): for k in range(j): self.kamni[i].append(Label(self, image=self.kamen, bd=0)) self.kamni[i][k].place(x=(100+110*k), y=(200+110*i)) par = (k+1, i+1) if b == 1: self.kamni[i][k].bind('<Button-1>', partial(self.izberi_kamen, par)) def unici_kamne(self): for vrh in self.kamni: for kamen in vrh: kamen.destroy() def naredi_potezo_clovek_text(self): izbrani = int(input("Izberi vrh: ")) odstranjenih = int(input("Stevilo kamenckov: ")) self.vrhovi[izbrani] -= odstranjenih # print(self.vrhovi) def izberi_kamen(self, par, j): # print("izbrali ste kamen ", par[0], " iz ", par[1], " vrha.") self.vrhovi[par[1]-1] = par[0]-1 # print(self.vrhovi) self.unici_kamne() self.narisi_kamne(0) self.ligralec.place_forget() self.lracunalnik.place(x=300, y=130) self.preveri_zmagovalca(0) self.after(1000, self.naredi_potezo_AI)
labelSrcPath.grid(row=0, column=0, sticky=W) entrySrcPath = Entry(root, textvariable=srcPath, width=60) entrySrcPath.grid(row=0, column=1, columnspan=2, sticky=E) buttonSrcPath = Button(root, text="目录选择", width=10, command=selectSrcPath) buttonSrcPath.grid(row=0, column=3, sticky=E) labelDesPath = Label(root, text="输出目录:") labelDesPath.grid(row=1, column=0, sticky=W) entryDesPath = Entry(root, textvariable=desPath, width=60) entryDesPath.grid(row=1, column=1, columnspan=2, sticky=E) buttonDesPath = Button(root, text="目录选择", width=10, command=selectDesPath) buttonDesPath.grid(row=1, column=3, sticky=E) RadioYM = Radiobutton( root, text="按月分类", variable=radioVar, value=1) RadioYM.grid(row=2, column=1, sticky=W) RadioYM.select() RadioYMD = Radiobutton( root, text="按天分类", variable=radioVar, value=2) RadioYMD.grid(row=2, column=2, sticky=W) buttonSort = Button(root, text="开始", width=10, command=sort) buttonSort.grid(row=2, column=3, sticky=E) logText = ScrolledText(root) logText.grid(row=3, columnspan=4, sticky=W) logText.insert(END, '\n\n') logText.insert( END, ' ================说明====================\n\n\n\n') logText.insert(END, '1、把待整理目录下所有文件按时间分类,并拷贝到输出目录下按(月/天)分目录保存\n\n')
def create_voices(self): voice_ids = ['1', '2', '3', '4'] SCALES = OrderedDict([ ('pan_pos', {'min': -1, 'max': 1, 'start': 0.5, 'res': 0.001}), ('volume', {'min': 0, 'max': 1, 'start': 0.666, 'res': 0.001}), ('slide_duration_msecs', {'min': 0, 'max': 2000, 'start': 60, 'res': 1}), ('slide_duration_prop', {'min': 0, 'max': 2, 'start': 0.666, 'res': 0.001}), ('binaural_diff', {'min': 0, 'max': 66, 'start': 0.2, 'res': 0.01}) ]) for vid in voice_ids: counter = 0 for sca in SCALES: name = 'voice_' + vid + '_' + sca setattr(self, 'min_' + name, SCALES[sca]['min']) setattr(self, 'max_' + name, SCALES[sca]['max']) this_sca = Scale(self, label=sca, orient=HORIZONTAL, from_=getattr(self, 'min_' + name), to=getattr(self, 'max_' + name), resolution=SCALES[sca]['res']) this_sca.enable = ('enable' in list(SCALES[sca].keys()) and SCALES[sca]['enable'] or None) this_sca.disable = ('disable' in list(SCALES[sca].keys()) and SCALES[sca]['disable'] or None) this_sca.grid(column=int(2 + int(vid)), row=counter, sticky=E + W) this_sca.bind("<ButtonRelease>", self.scale_handler) this_sca.ref = name counter += 1 CHECK_BUTTONS = OrderedDict( [('mute', False), ('automate_binaural_diffs', True), ('automate_note_duration_prop', True), ('use_proportional_slide_duration', {'val': True, 'label': 'proportional slide'}), ('automate_pan', True), ('automate_wavetables', True)]) for vid in voice_ids: counter = 0 cb_frame = LabelFrame(self, text="Voice {0} - Automation".format(vid)) setattr(self, 'voice_' + vid + '_cb_frame', cb_frame) for cb in CHECK_BUTTONS: options = CHECK_BUTTONS[cb] name = 'voice_' + vid + '_' + cb if isinstance(options, dict) and 'label' in list(options.keys()): label = options['label'] else: label = cb[9:] if cb[:9] == 'automate_' else cb setattr(self, name, IntVar( value=type(options) == dict and options['val'] or options)) self.this_cb = Checkbutton(cb_frame, text=label, variable=getattr(self, name)) self.this_cb.bind('<Button-1>', self.check_boxes_handler) self.this_cb.disable = None self.this_cb.grid(sticky=W, column=0, row=counter) self.this_cb.ref = name counter += 1 # add trigger wavetable-button trigWavetableButton = Button(cb_frame, text='Next Wavetable') trigWavetableButton.bind('<Button-1>', self.trigger_waveform_handler) trigWavetableButton.ref = 'voice_' + vid + "_trigger_wavetable" trigWavetableButton.grid(row=counter) cb_frame.grid(column=int(vid) + 2, row=5, sticky=E + W + N, rowspan=8) for vid in voice_ids: generation_types = ["random", "random_harmonic", "harmonic"] partial_pools = ["even", "odd", "all"] prefix = 'voice_' + vid + '_' types_name = prefix + 'wavetable_generation_type' pools_name = prefix + 'partial_pool' setattr(self, types_name, StringVar()) getattr(self, types_name).set("random") setattr(self, pools_name, StringVar()) getattr(self, pools_name).set("all") target_frame = getattr(self, 'voice_' + vid + '_cb_frame') gen_typ_frame = LabelFrame(target_frame, text="type") gen_typ_frame.grid(row=len(target_frame.winfo_children()), sticky=W) for gen_t in generation_types: gen_t_entry = Radiobutton(gen_typ_frame, value=gen_t, text=gen_t, anchor=W, variable=getattr(self, types_name)) gen_t_entry.bind('<ButtonRelease-1>', self.wt_handler) gen_t_entry.ref = types_name gen_t_entry.grid(row=len(gen_typ_frame.winfo_children()), sticky=W) pp_frame = LabelFrame(target_frame, text="harmonics") for pp in partial_pools: pp_entry = Radiobutton(pp_frame, value=pp, text=pp, anchor=W, variable=getattr(self, pools_name)) pp_entry.bind('<ButtonRelease-1>', self.wt_handler) pp_entry.ref = pools_name pp_entry.grid(row=len(pp_frame.winfo_children()), sticky=E + W) this_num_partials = Scale(pp_frame, label='number of harmonics', orient=HORIZONTAL, from_=1, to=24, resolution=1) this_num_partials.ref = prefix + 'num_partials' this_num_partials.grid(column=0, row=len(pp_frame.winfo_children()), sticky=E + W) this_num_partials.bind("<ButtonRelease>", self.scale_handler) pp_frame.grid(row=len(target_frame.winfo_children()), sticky=E + W)