def draw_automata(turing_machine=None): w = len(turing_machine.states) h = len(turing_machine.rules) root = Tk() frame = Frame(root, width=800, height=600) frame.grid(row=0, column=0) canvas = Canvas(frame, bg='#FFFFFF', width=800, height=600, scrollregion=(0, -h * 15, w * 100, h * 15*3)) hbar = Scrollbar(frame, orient=HORIZONTAL) hbar.pack(side=BOTTOM, fill=X) hbar.config(command=canvas.xview) vbar = Scrollbar(frame, orient=VERTICAL) vbar.pack(side=RIGHT, fill=Y) vbar.config(command=canvas.yview) canvas.config(width=800, height=600) canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) canvas.pack(side=LEFT, expand=True, fill=BOTH) for position, state in enumerate(turing_machine.states): state_position[state] = position loop_occurrences[position] = 0 canvas_id = canvas.create_text(10 + 80 * position, 400, anchor="nw") canvas.itemconfig(canvas_id, text="state-") canvas.insert(canvas_id, 12, "%d" % state) counter = 1 for rule in turing_machine.rules: counter = draw_arrow(state_position[rule.current_state], state_position[rule.next_state], canvas, counter, rule) root.mainloop()
class Widget_: def __init__(self, parent_frame, row, column, width=50, height=50): self.widget_frame = Frame(parent_frame, width=width, height=height) self.widget_frame.grid(row=row, column=column) self.width, self.height = width, height return def add_tag(self, tag_library, string): tag_library[string] = self def delete_widget(self): for child in self.widget_frame.winfo_children(): child.destroy() self.widget_frame.destroy() def hide_widget(self): self.widget_frame.grid_forget() def get_info(self): return def set_field(self): return pass
def _initjoincondpanel(self): frame = Frame(self) frame.grid(row=0, column=2, sticky=E + W + S + N, padx=5) label = Label(frame, text="Join Condition: ") label.grid(sticky=N + W) self.joincondlist = Listbox(frame) self.joincondlist.grid(row=1, rowspan=1, columnspan=3, sticky=E + W + S + N) vsl = Scrollbar(frame, orient=VERTICAL) vsl.grid(row=1, column=3, rowspan=1, sticky=N + S + W) hsl = Scrollbar(frame, orient=HORIZONTAL) hsl.grid(row=2, column=0, columnspan=3, sticky=W + E + N) self.joincondlist.config(yscrollcommand=vsl.set, xscrollcommand=hsl.set) hsl.config(command=self.joincondlist.xview) vsl.config(command=self.joincondlist.yview) newbtn = Button(frame, text="New", width=7, command=self._addjoincondition) newbtn.grid(row=3, column=0, padx=5, pady=5, sticky=E) delbtn = Button(frame, text="Delete", width=7, command=self._deletejoincondition) delbtn.grid(row=3, column=1, sticky=E) modbtn = Button(frame, text="Update", width=7, command=self._modifyjoincondition) modbtn.grid(row=3, column=2, padx=5, pady=5, sticky=W)
def showPlotTools(self): f2= Frame(self.frame, relief=FLAT,bg='#FADC46') f2.grid(row=1,column=0,rowspan=2,columnspan=3,sticky=N+S+E+W,padx=10,pady =10) b1 = Button(f2,text='3D K',relief=RAISED,command= lambda:self.plotButtonPressed(1)) b1.grid(row=0, column=0,sticky=N+S+E+W,padx=5,pady =5) b2 = Button(f2,text='3D Dist',relief=RAISED,command=lambda:self.plotButtonPressed(2)) b2.grid(row=0, column=1,sticky=N+S+E+W,padx=5,pady =5) b3 = Button(f2,text='3D DP',relief=RAISED,command=lambda:self.plotButtonPressed(3)) b3.grid(row=0, column=2,sticky=N+S+E+W,padx=5,pady =5) b4 = Button(f2,text='2D K',relief=RAISED,command=lambda:self.plotButtonPressed(4)) b4.grid(row=1, column=0,sticky=N+S+E+W,padx=5,pady =5) b5 = Button(f2,text='2D Dist',relief=RAISED,command=lambda:self.plotButtonPressed(5)) b5.grid(row=1, column=1,sticky=N+S+E+W,padx=5,pady =5) b6 = Button(f2,text='2D DP',relief=RAISED,command=lambda:self.plotButtonPressed(6)) b6.grid(row=1, column=2,sticky=N+S+E+W,padx=5,pady =5) f2.columnconfigure(0, weight=1) f2.columnconfigure(1, weight=1) f2.columnconfigure(2, weight=1) f2.rowconfigure(0, weight=1) f2.rowconfigure(1, weight=1)
def _initfilepanel(self): frame = Frame(self) frame.grid(row=0, column=0, sticky=E + W + S + N) label = Label(frame, text="File List: ") label.grid(sticky=N + W) self.filelist = Listbox(frame, width=40) self.filelist.grid(row=1, column=0, rowspan=2, columnspan=3) vsl = Scrollbar(frame, orient=VERTICAL) vsl.grid(row=1, column=3, rowspan=2, sticky=N + S + W) hsl = Scrollbar(frame, orient=HORIZONTAL) hsl.grid(row=3, column=0, columnspan=3, sticky=W + E + N) self.filelist.config(yscrollcommand=vsl.set, xscrollcommand=hsl.set) self.filelist.bind('<<ListboxSelect>>', self._onfilelistselection) hsl.config(command=self.filelist.xview) vsl.config(command=self.filelist.yview) upbtn = Button(frame, text="Up", width=7, command=self._upfile) upbtn.grid(row=1, column=4, padx=5, pady=5) downbtn = Button(frame, text="Down", width=7, command=self._downfile) downbtn.grid(row=2, column=4, padx=5, pady=5) newbtn = Button(frame, text="New", width=7, command=self._addfile) newbtn.grid(row=4, column=1, pady=5, sticky=E + S) delbtn = Button(frame, text="Delete", width=7, command=self._deletefile) delbtn.grid(row=4, column=2, padx=5, pady=5, sticky=W + S)
class ProgramWidget(Frame): def __init__(self, parent, client): super(ProgramWidget, self).__init__(parent) self.client = client self.client.onProgramChange = self.programChanged self.programLabel = Label(self, text = 'Program:') self.programLabel.grid(row = 0, column = 0) self.programEntry = Entry(self, text = 'Program name', state = 'readonly') self.programEntry.grid(row = 0, column = 1) self.buttonPanel = Frame(self) self.buttonPanel.grid(row = 1, column = 0, columnspan = 2, sticky = W) self.newButton = Button(self.buttonPanel, text='New', command = self.newProgram) self.newButton.pack(side = LEFT) def programChanged(self): self.__setProgramText(str(self.client.state)) def __setProgramText(self, text): self.programEntry.configure(state = NORMAL) self.programEntry.delete(0) self.programEntry.insert(0, text) self.programEntry.configure(state = 'readonly') def newProgram(self): self.client.makeNewProgram()
def home_page(self, master): frame = Frame(master) frame.grid(row=0, column=0) image = PhotoImage(file="img/guido.gif") bg = Label(frame, image=image) bg.image = image bg.grid(row=0, column=0, rowspan=4, columnspan=2) index = 0 while index < 3: frame.grid_columnconfigure(index, minsize=200) frame.grid_rowconfigure(index, minsize=80) index += 1 summary_button = HomeButton(frame, self.to_summary, 'img/summary.png') summary_button.grid(row=0, column=0, sticky='w') edit_button = HomeButton(frame, self.to_edit, 'img/edit.png') edit_button.grid(row=0, column=1, sticky='e') momentary_button = HomeButton(frame, self.to_momentary, 'img/momentary.png') momentary_button.grid(row=1, column=0, sticky='w') preferences_button = HomeButton(frame, self.to_pref, 'img/preferences.png') preferences_button.grid(row=1, column=1, sticky='e') music = HomeButton(frame, self.to_summary, 'img/music.png') music.grid(row=2, column=0, sticky='w') info = HomeButton(frame, self.to_summary, 'img/info.png') info.grid(row=2, column=1, sticky='e') return frame
def __init__(self, root, title): self.root = root self.root.title(title) # Variable that stores file handle (may be unnecessary) self.file_handle = "" master_frame = Frame(root) master_frame.pack(expand="yes", fill="both") # Create left button frame and buttons button_frame = Frame(master_frame) self.open_button = Button(button_frame, text="Choose File", command=self.load_file) self.open_button.pack(expand="yes", fill="both") self.apply_button = Button(button_frame, text="Apply", command=self.apply_consistent, state="disabled") self.apply_button.pack(expand="yes", fill="both") self.save_button = Button(button_frame, text="Save File", command=self.save_file, state="disabled") self.save_button.pack(expand="yes", fill="both") # Create text frame and initialize text widget text_frame = Frame(master_frame) self.text_box = Text(text_frame, height=10, width=50, state="disabled") self.text_box.pack(side="top", expand="yes", fill="both") # Configure weights for grid elements master_frame.columnconfigure(0, weight=1) master_frame.columnconfigure(1, weight=5) for i in range(3): master_frame.rowconfigure(i, weight=1) # Position button and text frames button_frame.grid(row=0, column=0, rowspan=3, sticky="nsew") text_frame.grid(row=0, column=1, rowspan=3, sticky="nsew") self.root.minsize(500, 200)
def __init__(self): Toplevel.__init__(self) self.focus_set() self.grab_set() self.result = None self.module_data = None self.mod_applis = None self.title(ugettext("Instance editor")) self.grid_columnconfigure(0, weight=1) self.grid_rowconfigure(0, weight=1) self.ntbk = ttk.Notebook(self) self.ntbk.grid(row=0, column=0, columnspan=1, sticky=(N, S, E, W)) self.frm_general = Frame(self.ntbk, width=350, height=150) self.frm_general.grid_columnconfigure(0, weight=0) self.frm_general.grid_columnconfigure(1, weight=1) self._general_tabs() self.ntbk.add(self.frm_general, text=ugettext('General')) self.frm_database = Frame(self.ntbk, width=350, height=150) self.frm_database.grid_columnconfigure(0, weight=0) self.frm_database.grid_columnconfigure(1, weight=1) self._database_tabs() self.ntbk.add(self.frm_database, text=ugettext('Database')) btnframe = Frame(self, bd=1) btnframe.grid(row=1, column=0, columnspan=1) Button(btnframe, text=ugettext("OK"), width=10, command=self.apply).grid( row=0, column=0, sticky=(N, S, E)) Button(btnframe, text=ugettext("Cancel"), width=10, command=self.destroy).grid( row=0, column=1, sticky=(N, S, W))
def create_region_frame(self, tid): """ Initiliases a frame on the map for region with id tid. """ x = int(tid.split("_")[1]) N = int(sqrt(len(self.board))) my_frame = Frame(self.frame_map, height=3 * self.size - 1, width=3 * self.size - 1, bd=2, relief="flat") my_frame.grid(row=int((x - 1) / N), column=(x - 1) % N) self.board_regions[tid] = my_frame
def make_frame(self,labeltext=None): "Return gridded labeled Frame for option or other buttons." if labeltext: l = Label(self.top, text=labeltext) l.grid(row=self.row, column=0, sticky="nw") f = Frame(self.top) f.grid(row=self.row, column=1, columnspan=1, sticky="nwe") self.row = self.row + 1 return f
def __create_app_frame(self): """ This function creates and pack (using grid) the main app frame (The left toolbar (users list) and the canvas """ app_frame = Frame(self.__master_splinter) self.create_game_canvas(app_frame) self.create_left_toolbar(app_frame) app_frame.grid(row=1)
def __init__(self, master): column0_padx = 24 row_pady = 36 #Label 1 lbl_testcase_exec = Label(master, text="Test case execution", wraplength=100, anchor='w', justify='left') lbl_results_cmp = Label(master, text="Results comparison", wraplength=100, justify='left') lbl_tolerance = Label(master, text="Tolerance (5%)", wraplength=100) testcase_exec = Checkbutton(master) results_cmp = Checkbutton(master) tolerance = Entry(master, width=4) lbl_analysis = Label(master, text="Analysis Library") analysis_lib = Entry(master, width=30) lbl_testcase_exec.grid(row=0, column=2, padx=20, pady=12, sticky='w') lbl_results_cmp.grid(row=0, column=3, pady=12, sticky='w') lbl_tolerance.grid(row=0, column=4, padx=20, pady=12, sticky='wn') lbl_analysis.grid(row=1, column=0, sticky='w', padx=column0_padx) analysis_lib.grid(row=1, column=1, sticky='w') testcase_exec.grid(row=1, column=2, padx=20, sticky='w') results_cmp.grid(row=1, column=3, sticky='w') tolerance.grid(row=1, column=4, padx=20, sticky='w') #Label 2 lbl_ref_analysis = Label( master, text="Reference Analysis Libary Version", wraplength=150, justify='left', pady=row_pady) ref_analysis_lib = Entry(master, width=30) lbl_ref_analysis.grid(row=2, column=0, sticky='w', padx=column0_padx) ref_analysis_lib.grid(row=2, column=1, sticky='w') # version lbl_version = Label(master, text="Version under Test") version = Label(master, text="vA.B.C.D") lbl_version.grid(row=3, column=0, sticky='w', padx=column0_padx) version.grid(row=3, column=1, sticky='w') # test all lbl_testall = Label(master, text="Test All") testall = Checkbutton(master) lbl_testall.grid(row=4, column=0, pady=row_pady, padx=column0_padx, sticky='w') testall.grid(row=4, column=1, sticky='w') # buttons bottom_frame = Frame(master) bottom_frame.grid(row=5, column=1, columnspan=3, sticky='w') btn_start = Button(bottom_frame, text = "Go", width=7) btn_start.pack(side='left') btn_commit = Button(bottom_frame, text="Commit", width=7) btn_commit.pack(side='left', padx=80) btn_exit = Button(bottom_frame, text="Exit", width=7) btn_exit.pack(side='left')
def __init__(self): """ À completer !. """ super().__init__() # Nom de la fenêtre. self.title("Ultimate Tic-Tac-Toe") # La partie de ultimate Tic-Tac-Toe self.partie = Partie() # Un ditionnaire contenant les 9 canvas des 9 plateaux du jeu self.canvas_uplateau = {} Button(self.canvas_uplateau, text ='Débuter la partie', command =self.demande_confirmation).\ grid(row =0, column =4) self.var = IntVar() Checkbutton(self, text= 'VS ordinateur', variable=self.var, onvalue =1, offvalue =0).grid(row =0, column =2) # L'entrée du joueur1 est automatiquement demandé Label(self.canvas_uplateau, text ="Nom du Joueur 1:").\ grid(row =0, column =0, sticky=E) self.joueur1 = Entry(self.canvas_uplateau, width =14) self.joueur1.grid(row =0, column =1, padx=5, pady=5, sticky=E+W) # Label (self.canvas_uplateau, text="Le tour: {}".format(self.partie.joueur_courant.nom)).grid(row=3, column=3) # L'entrée du joueur2 est selon la checkbox (peut etre l'ordinateur Label(self.canvas_uplateau, text ="Nom du Joueur 2:").\ grid(row =1, column =0, sticky=E) self.joueur2 = Entry(self.canvas_uplateau, width =14) self.joueur2.grid(row =1, column =1, padx=5, pady=5, sticky=E+W) Button(self.canvas_uplateau, text = 'Quitter', command = self.quit).\ grid (row = 5, column = 4, sticky = E) # Création des frames et des canvas du jeu for i in range(0, 3): for j in range(0, 3): cadre = Frame(self, borderwidth=5, relief=GROOVE, background = '#e1e1e1') cadre.grid(row=i+3, column=j, padx=5, pady=5) cadre.bind('<Enter>', self.entrer_frame) cadre.bind('<Leave>', self.sortir_frame) self.canvas_uplateau[i,j] = CanvasPlateau(cadre, self.partie.uplateau[i,j]) self.canvas_uplateau[i,j].grid() # On lie un clic sur le Canvas à une méthode. self.canvas_uplateau[i,j].bind('<Button-1>', self.selectionner) # Ajout d'une étiquette d'information. self.messages = Label(self) self.messages.grid(columnspan=3)
class AddRestrictionDialog: def __init__(self, parent): self.parent = parent self.gui = Toplevel(parent.guiRoot) self.gui.grab_set() self.gui.focus() self.gui.columnconfigure(0, weight=1) self.gui.columnconfigure(1, weight=1) Label(self.gui, text="Enzyme:").grid(row=0, column=0, sticky="e", padx=5) self.entryEnzyme = Entry(self.gui) self.entryEnzyme.grid(row=0, column=1, sticky="w", padx=5, pady=10) self.frameButtonGroup = Frame(self.gui) self.frameButtonGroup.grid(row=1, column=0, columnspan=2, pady=10) self.buttonOK = Button(self.frameButtonGroup, text=" OK ") self.buttonCancel = Button(self.frameButtonGroup, text=" Cancel ") self.buttonOK.grid(row=0, column=1, sticky="w", padx=5) self.buttonCancel.grid(row=0, column=0, sticky="e", padx=5) # Set (minimum + max) Window size self.gui.update() self.gui.minsize(self.gui.winfo_width(), self.gui.winfo_height()) self.gui.maxsize(self.gui.winfo_width(), self.gui.winfo_height()) self.entryEnzyme.focus() self.buttonOK.bind("<ButtonRelease>", self.actionOK) self.buttonCancel.bind("<ButtonRelease>", self.actionCancel) self.entryEnzyme.bind("<Return>", self.actionOK) self.gui.mainloop() # self.gui.grab_release() # self.gui.destroy() def actionOK(self, event): enzymeString = self.entryEnzyme.get() if enzymeString in rest_dict.keys(): if enzymeString in self.parent.optimizer.restrictionEnzymeList: showinfo("", (enzymeString + " was already added to the list")) return self.parent.optimizer.restrictionEnzymeList.append(enzymeString) self.parent.guiRoot.event_generate("<<Update>>", when="tail") self.gui.destroy() else: showinfo("", (enzymeString + " is not a valid restriction enzyme")) def actionCancel(self, event): self.gui.destroy()
def addActionFrame(self): frame=Frame(self,relief=tk.RAISED,borderwidth=1) frame.pack(fill=tk.X,side=tk.TOP,\ expand=0,padx=8,pady=5) #label=tk.Label(frame,text='Actions:',bg='#bbb') #label.grid(row=0,column=0,sticky=tk.W,padx=8) #---------------Action checkbuttons--------------- frame.columnconfigure(0,weight=1) #---------------------2nd row--------------------- subframe=Frame(frame) subframe.grid(row=1,column=0,columnspan=6,sticky=tk.W+tk.E,\ pady=5) #-------------------Album options------------------- albumlabel=tk.Label(subframe,text=dgbk('专辑:'),\ bg='#bbb') albumlabel.pack(side=tk.LEFT, padx=8) self.album=tk.StringVar() self.albumnames=['All',] self.albummenu=Combobox(subframe,textvariable=\ self.album,values=self.albumnames,state='readonly') self.albummenu.current(0) self.albummenu.bind('<<ComboboxSelected>>',self.setAlbum) self.albummenu.pack(side=tk.LEFT,padx=8) #-------------------Quit button------------------- quit_button=tk.Button(subframe,text=dgbk('退出'),\ command=self.quit) quit_button.pack(side=tk.RIGHT,padx=8) #-------------------Stop button------------------- ''' self.stop_button=tk.Button(subframe,text='Stop',\ command=self.stop) self.stop_button.pack(side=tk.RIGHT,padx=8) ''' #-------------------Start button------------------- self.start_button=tk.Button(subframe,text=dgbk('开始'),\ command=self.start,state=tk.DISABLED) self.start_button.pack(side=tk.RIGHT,pady=8) #-------------------Help button------------------- self.help_button=tk.Button(subframe,text=dgbk('帮助'),\ command=self.showHelp) self.help_button.pack(side=tk.RIGHT,padx=8)
def _build_cell(self, row: int, col: int) -> Frame: cell = Frame(self._content, borderwidth=5, relief=const.SUNKEN, height=50, width=50) cell._canvas = Canvas(master=cell, height=50, width=50) cell.row = row cell.col = col cell.bound = False cell.grid(row=row, column=col, sticky="nsew") cell.columnconfigure(0, weight=1) cell.rowconfigure(0, weight=1) cell._canvas.grid(row=0, column=0, sticky="nsew") return cell
def _init_game(self) -> None: # Make some game constants more easily accessible self.rows = self.game.board.rows self.columns = self.game.board.cols # # Main window # self._root = Tk() self._root.title("Othello") self._root.columnconfigure(0, weight=1) self._root.rowconfigure(2, weight=1) self._root.minsize(50 * self.columns + 100, 50 * self.rows + 100) # # Score Label # score_frame = Frame(self._root) self._score_label = ttk.Label(score_frame, background="white", foreground="black", text="TEMPORARY LABEL") #TODO: compute label text score_frame.grid(row=0, column=0, sticky="ew") self._score_label.grid(row=0, column=0, sticky="ew", padx=5, pady=5) score_frame.columnconfigure(0, weight=1) # # Info Label # info_frame = Frame(self._root) self._info_label = ttk.Label(info_frame, text="", background="white", foreground="black") info_frame.grid(row=1, column=0, sticky="ew") self._info_label.grid(row=0, column=0, sticky="ew", padx=5, pady=5) info_frame.columnconfigure(0, weight=1) # # Game content (Othello board) # self._content = Frame(self._root) self._content.grid(row=2, column=0, sticky="nsew") self.cells = [] for row in range(self.rows): for col in range(self.columns): self.cells.append(self._build_cell(row, col)) self._content.columnconfigure(col, weight=1) self._content.rowconfigure(row, weight=1)
def dessiner_canvas(self, parent): # Création d'un frame qui contient le plateau de jeu self.frame_plateau = Frame(parent) self.frame_plateau.grid(row = 10, column=0, padx=5, pady=5) # Création des frames et des canvas du jeu for i in range(0, 3): for j in range(0, 3): cadre = Frame(self.frame_plateau, borderwidth=5, relief=GROOVE) cadre.grid(row=i, column=j, padx=5, pady=5) self.canvas_uplateau[i,j] = CanvasPlateau(cadre, self.partie.uplateau[i,j]) self.canvas_uplateau[i,j].grid() # On lie un clic sur le Canvas à une méthode. self.canvas_uplateau[i,j].bind('<Button-1>', self.selectionner)
def make_frame(self,labeltext=None): '''Return (frame, label). frame - gridded labeled Frame for option or other buttons. label - Label widget, returned for testing. ''' if labeltext: label = Label(self.top, text=labeltext) label.grid(row=self.row, column=0, sticky="nw") else: label = '' frame = Frame(self.top) frame.grid(row=self.row, column=1, columnspan=1, sticky="nwe") self.row = self.row + 1 return frame, label
def create_region(self, tid): """ create and fill frame-region inside frame """ region_owner = self.board[tid]["owner"] if region_owner is None: owner_text = "Unoccupied" tile_color = None own_tile = False else: own_tile = True if region_owner == game.player.name else False owner_text = "Owner: " + str(region_owner) tile_color = COLOURS[self.player_names.index(region_owner)] my_frame = Frame(self.frame_map, height=3 * self.size - 1, width=3 * self.size - 1, bd=1, relief="flat", bg = tile_color) x = int(tid.split("_")[1]) N = int(sqrt(len(self.board))) my_frame.grid(row=int((x - 1)/ N),column=(x - 1) % N) counter_text = "Troops: " + str(game.board[tid]["counters"]) button_pic = Button(my_frame, image = self.gifs[game.board[tid]["terrain"]], name = tid, command = lambda: self.conquer_region(tid)) label_owner = Label(my_frame, text=owner_text, bg = tile_color) label_counters = Label(my_frame, text=counter_text, bg = tile_color) if own_tile: button_plus = Button(my_frame, image = self.gifs["plus"], command=lambda: self.reinforce(tid, 1)) button_minus = Button(my_frame, image = self.gifs["minus"], command=lambda: self.reinforce(tid, -1)) button_plus.grid(row = 0, column=0) button_pic.grid(row = 0, column=1) button_minus.grid(row=0, column=2) label_owner.grid(row=1, columnspan=3) label_counters.grid(row=2, columnspan=3) else: button_pic.grid(row=0, column=1) label_owner.grid(row=1, column=1) label_counters.grid(row=2, column=1) if tid in game.player.adjacent_regions: my_frame.config(relief = "raised")
def create_left_toolbar(self, app_frame): """ This function creates and pack the left toolbar :param app_frame: root for this toolbar.. (Frame obj) :return: """ left_toolbar = Frame(app_frame) self.lb_users = Listbox(left_toolbar) self.lb_users.config(height=30) self.lb_users.grid(row=0, column=0) scroll_bar = Scrollbar(left_toolbar) scroll_bar.config(command=self.lb_users.yview) scroll_bar.grid(row=0, column=1, sticky='ns') left_toolbar.propagate("false") left_toolbar.grid(column=0, row=0) self.lb_users.config(yscrollcommand=scroll_bar.set) self.debug_event("Left toolbar was generated")
def __init__(self, runner): self.runner = runner self.messages = {} Screen.destroy() Screen.reinit() super().__init__() Screen.title("NaOH: PocketMine-MP Console") # GUI initialization fstframe = Frame(Screen.root) fstframe.grid(row=0, rowspan=1, columnspan=8) sndframe = Frame(Screen.root) sndframe.grid(row=0, rowspan=1, column=8, columnspan=2) self.scrollbar = Scrollbar(fstframe) self.listbox = Listbox(fstframe, yscrollcommand=self.scrollbar.set, width=120, height=25) self.listbox.grid(row=0, column=0, rowspan=1, columnspan=7, sticky='nswe') self.scrollbar.config(command=self.listbox.yview) self.scrollbar.grid(row=0, column=7, rowspan=1, sticky='nse') self.scrolllock = False Button(fstframe, text='나가기 (주의: 강제 종료됩니다)', command=self.runner.killAll).grid(row=1, column=0, sticky='nwse') self.slbutton = Button(fstframe, text='ScrollLock Off', command=self.togglesl) self.slbutton.grid(row=1, column=1, sticky='new') Label(fstframe, text='명령어: /', justify='right').grid(row=1, column=2) self.cmdentry = Entry(fstframe) self.cmdentry.bind('<Return>', self.put_cmd) self.cmdentry.grid(row=1, column=3, columnspan=5, sticky='nwe') fstframe.rowconfigure(1, weight=1) fstframe.columnconfigure(3, weight=1) fstframe.columnconfigure(4, weight=20) sndframe.rowconfigure(0, weight=1) Button(sndframe, text='서버 상태', command=lambda: statusScreen(self)).grid(row=0, sticky='n') Button(sndframe, text='설정 편집', command=lambda: propertiesScreen(self.runner.workdir + sep + 'server.properties')).grid(row=1, sticky='n') Button(sndframe, text='덤프 삭제', command=self.removeDumps).grid(row=2, sticky='n') self.cmdentry.focus() Screen.root.focus_force() # GUI initialization done self.thread = threading.Thread(target=lambda: asyncStream(self)).start() Screen.root.protocol("WM_DELETE_WINDOW", self.runner.killAll) Screen.root.mainloop() try: Screen.root.destroy() except: self.runner.killAll()
def createWidgets(self): canvas = CanvasImage(640, 480) self.img = canvas.draw(Makaronina(40, 200, 0, 0)) self.photo1 = ImageTk.PhotoImage(self.img) self.label1 = Label(self, image=self.photo1) self.label1.grid(row=0, column=0) frame = Frame(self) frame.grid(row=1, column=0) rotateRight = Button(frame, text="Rotate right", command=self.rotateRight) rotateRight.grid(row=1, column=1) rotateLeft = Button(frame, text="Rotate left", command=self.rotateLeft) rotateLeft.grid(row=1, column=0) rotateUp = Button(frame, text="Rotate up", command=self.rotateUp) rotateUp.grid(row=2, column=1) rotateDown = Button(frame, text="Rotate down", command=self.rotateDown) rotateDown.grid(row=2, column=0)
def __init__(self): Tk.__init__(self) self.minsize(200, 250) self.result = None self._model_name = '' self._icon_name = '' self.title("Viewer generator") self.grid_columnconfigure(0, weight=0) self.grid_columnconfigure(1, weight=1) self.grid_rowconfigure(0, weight=0) self.grid_rowconfigure(1, weight=1) self.resizable(True, True) Label(self, text='Model').grid(row=0, column=0, sticky=(N, E)) self.models = ttk.Combobox( self, textvariable=StringVar(), state='readonly') self.models.grid(row=0, column=1, sticky=(N, W, E, S), padx=3, pady=3) mainframe = Frame(self, bd=1, relief=SUNKEN) mainframe.grid( row=1, column=0, columnspan=2, sticky=(N, S, E, W), padx=3, pady=3) current_row = 0 current_col = 0 self.check = [] for value in ('add', 'list', 'edit', 'search', 'modify', 'listing', 'show', 'label', 'delete', 'print'): chkbtn_val = IntVar() chkbtn = Checkbutton(mainframe, text=value, variable=chkbtn_val) chkbtn.grid( row=current_row, column=current_col, sticky=W, padx=3, pady=3) self.check.append((value, chkbtn_val)) current_col += 1 if current_col == 2: current_col = 0 current_row += 1 Label(mainframe, text='Icon').grid( row=(current_row + 1), column=0, columnspan=2, sticky=(N, W, E, S), padx=3) self.icons = ttk.Combobox( mainframe, textvariable=StringVar(), state='readonly') self.icons.grid( row=(current_row + 2), column=0, columnspan=2, sticky=(N, W, E, S), padx=3) btnframe = Frame(self, bd=1) btnframe.grid(row=2, column=0, columnspan=2) Button(btnframe, text="OK", width=10, command=self.cmd_ok).grid( row=1, column=0, sticky=(N, S, E, W), padx=5, pady=3) Button(btnframe, text="Cancel", width=10, command=self.cmd_cancel).grid( row=1, column=1, sticky=(N, S, E, W), padx=5, pady=3)
def init_grid(self): background = Frame(self, bg=c.BACKGROUND_COLOR_GAME, width=c.SIZE, height=c.SIZE) background.grid() for i in range(c.GRID_LEN): grid_row = [] for j in range(c.GRID_LEN): cell = Frame(background, bg=c.BACKGROUND_COLOR_CELL_EMPTY, width=c.SIZE / c.GRID_LEN, height=c.SIZE / c.GRID_LEN) cell.grid(row=i, column=j, padx=c.GRID_PADDING, pady=c.GRID_PADDING) t = Label(master=cell, text="", bg=c.BACKGROUND_COLOR_CELL_EMPTY, justify=CENTER, font=c.FONT, width=5, height=2) t.grid() grid_row.append(t) self.grid_cells.append(grid_row)
def createContent(self): # Top Panel: --------------------------------- pnlTop = Frame(self) pnlTop.pack(side="top", fill="both", pady=10, padx=10) self.btnDB = Button(pnlTop, text=_("Open Data Base..."), command=lambda cmd='OPEN': self.onCommand(cmd)) self.btnDB.grid(row=1, column=2, padx=5) # Query Panel: ----------------------------------- self.pnlQuery = Frame(self) self.pnlQuery.pack(side="right", fill="both", expand=True, padx=10) #-- SQL Panel: pnlSQL = Frame(self.pnlQuery) pnlSQL.pack(side="top", fill="both") Label(pnlSQL, text = "SQL:").grid(row=1, column=1, padx=5) self.txtSQL = TextSQL(pnlSQL, height=10, width = 60) self.txtSQL.grid(row=1, column=2, padx=5, pady=10) Button(pnlSQL, text = _("Run"), command=lambda cmd='RUN': self.onCommand(cmd)).grid(row=1, column=3, padx=5) #-- Buttons Panel pnlBtns = Frame(pnlSQL) pnlBtns.grid(row=2, column=2) Button(pnlBtns, text='INSERT', width = 12, command=lambda cmd='QUERY',query='INSERT': self.onCommand(cmd,query=query)).grid(row=1, column=1) Button(pnlBtns, text='SELECT', width = 12, command=lambda cmd='QUERY',query='SELECT': self.onCommand(cmd,query=query)).grid(row=1, column=2) Button(pnlBtns, text='UPDATE', width = 12, command=lambda cmd='QUERY',query='UPDATE': self.onCommand(cmd,query=query)).grid(row=1, column=3) Button(pnlBtns, text='DELETE', width = 12, command=lambda cmd='QUERY',query='DELETE': self.onCommand(cmd,query=query)).grid(row=1, column=4) #-- Result Panel: self.pnlResult = Frame(self.pnlQuery) self.pnlResult.pack(side="top", fill="both", expand=True, pady=10, padx=10) self.resultGrid = TextResult(self.pnlResult) self.resultGrid.pack(side="top", fill="both", expand=True) #Table List Panel: --------------------------------------- self.pnlTables = Frame(self) self.pnlTables.pack(side="left", fill="both", pady=10, padx=10) #---Tables Buttons Panel: self.pnlTableList = Frame(self.pnlTables) self.pnlTableList.pack(side="top", fill="both", pady=10) #---Panel Nueva: Button pnlNewTable = Frame(self.pnlTables) pnlNewTable.pack(side="bottom", pady=10, padx=10) Button(pnlNewTable, text=_("New Table"), command=lambda cmd='QUERY',query='CREATE': self.onCommand(cmd,query=query,table='<table>')).grid(row=1, column=2, padx=5)
def create_widgets(self): self.status_text = StringVar() self.status_text.set("Not Started") self.grid() for r in range(6): self.rowconfigure(r, weight=1) for c in range(2): self.columnconfigure(c, weight=1) #Button(self, text="Button {0}".format(c)).grid(row=6,column=c,sticky=E+W) frame1 = Frame(self) #, bg="red" frame1.grid(row = 0, column = 0, rowspan = 6, columnspan = 1, sticky = W+E+N+S) title_label = ttk.Label(frame1, text=self.title, font=self.TITLE_FONT) title_label.pack(fill=BOTH, padx=25, pady=20) for input_model in self.input_models: input_view = FileInputView(frame1, input_model) input_view.pack(fill=BOTH) input_model.location_text.trace("w", self.check_processing_possible) process_button_style = ttk.Style() process_button_style.configure("Bold.TButton", font = ('Sans','20')) self.process_button = ttk.Button(frame1, text="PROCESS", width=20, style="Bold.TButton", state='disabled', command=self.start_processing) self.process_button.pack(side=BOTTOM, padx=5, pady=50) status_view = Frame(self, bg="white") status_view.grid(row = 3, column = 1, rowspan = 3, columnspan = 1, sticky = W+E+N+S) status_label = Label(status_view, text="Status: ", font=self.TITLE_FONT, bg="white") status_label.pack(side=LEFT, padx=5, pady=5) current_status_label = Label(status_view, textvariable=self.status_text, bg="white", font=self.STATUS_FONT) current_status_label.pack(side=LEFT, padx=5, pady=5)
def showPlotTools(self): f2= Frame(self.selectPlotFrame, relief=FLAT,bg='#FADC46') f2.grid(row=1,column=0,sticky=N+S+E+W,padx=10,pady =10) b1 = Button(f2,text='3D K',relief=RAISED,command= lambda:self.plotButtonPressed(1)) b1.grid(row=0, column=0,sticky=N+S+E+W,padx=5,pady =5) b2 = Button(f2,text='3D Dist',relief=RAISED,command=lambda:self.plotButtonPressed(2)) b2.grid(row=0, column=1,sticky=N+S+E+W,padx=5,pady =5) b3 = Button(f2,text='3D DP',relief=RAISED,command=lambda:self.plotButtonPressed(3)) b3.grid(row=0, column=2,sticky=N+S+E+W,padx=5,pady =5) b4 = Button(f2,text='2D K',relief=RAISED,command=lambda:self.plotButtonPressed(4)) b4.grid(row=1, column=0,sticky=N+S+E+W,padx=5,pady =5) b5 = Button(f2,text='2D Dist',relief=RAISED,command=lambda:self.plotButtonPressed(5)) b5.grid(row=1, column=1,sticky=N+S+E+W,padx=5,pady =5) b6 = Button(f2,text='2D DP',relief=RAISED,command=lambda:self.plotButtonPressed(6)) b6.grid(row=1, column=2,sticky=N+S+E+W,padx=5,pady =5) b1.config(state=EguanaModel().machine.plot3DKButtonState) b2.config(state=EguanaModel().machine.plot3DDstButtonState) b3.config(state=EguanaModel().machine.plot3DDpButtonState) b4.config(state=EguanaModel().machine.plot2DKButtonState) b5.config(state=EguanaModel().machine.plot2DDstButtonState) b6.config(state=EguanaModel().machine.plot2DDpButtonState) f2.columnconfigure(0, weight=1) f2.columnconfigure(1, weight=1) f2.columnconfigure(2, weight=1) f2.rowconfigure(0, weight=1) f2.rowconfigure(1, weight=1)
def openBL3Hotfixfile(): def open_file(): """Open a file for editing.""" filepath = askopenfilename(filetypes=[("BL3HotFix File", "*.bl3hotfix")]) if not filepath: return txt_edit.delete(1.0, END) with open(filepath, "r") as input_file: text = input_file.read() txt_edit.insert(END, text) window.title(f"Text Editor Application - {filepath}") def save_file(): """Save the current file as a new file.""" filepath = asksaveasfilename( defaultextension="txt", filetypes=[("BL3HotFix File", "*.bl3hotfix")], ) if not filepath: return with open(filepath, "w") as output_file: text = txt_edit.get(1.0, END) output_file.write(text) window.title(f"Text Editor Application - {filepath}") def find(): i = 0 content_list = [] txt_edit.tag_remove('found', '1.0', END) s = Find_String.get() hold = txt_edit.get("1.0", "end") content_list = hold.split("\n") if len(Search_List) > 0: Search_List.clear( ) # Clears out the list so we don't geta data contamination while i < len(content_list): if s in content_list[i]: Search_List.append(content_list[i]) i += 1 ListBoxWindow(5) window = Tk() window.title("Text Editor Application") window.rowconfigure(0, minsize=800, weight=1) window.columnconfigure(1, minsize=800, weight=1) fr_buttons = Frame(window, relief=RAISED, bd=2) txt_edit = Text(window) btn_open = Button(fr_buttons, text="Open", command=open_file) btn_save = Button(fr_buttons, text="Save As...", command=save_file) Find_Text_Button = Button(fr_buttons, text='Find', command=find) Find_String = Entry(fr_buttons) btn_open.grid(row=0, column=0, sticky="ew", padx=5, pady=5) btn_save.grid(row=1, column=0, sticky="ew", padx=5) Find_String.grid(row=2, column=0, sticky="ew", padx=5) Find_Text_Button.grid(row=3, column=0, sticky="ew", padx=5) fr_buttons.grid(row=0, column=0, sticky="ns") txt_edit.grid(row=0, column=1, sticky="nsew") window.mainloop()
"""Right click context menu. Stand-alone example from Tk Assistant. stevepython.wordpress.com""" from tkinter import Frame, Menu, Tk root = Tk() root.title('Right Click Menu example') main_frame = Frame(root, width=250, height=250, bg='green') main_frame.grid() def paste(): """Called when Paste selected from right click menu.""" print('Paste selected') def copy(): """Called when Copy selected from right click menu.""" print('Copy selected') def popup(event): """On right click display popup menu at mouse position.""" rc_menu.post(event.x_root, event.y_root) # Bind mouse right click to frame. main_frame.bind('<Button-3>', popup)
def diffie_hellman_page(): global g_number, n_number, alice_number, bob_number, g_number_error, n_number_error, alice_number_error, bob_number_error, alice_key, bob_key alice_number = StringVar(mainframe) bob_number = StringVar(mainframe) g_number = StringVar(mainframe) n_number = StringVar(mainframe) clear_screen(mainframe) # ? Title Label(mainframe, text="Diffie Hellman Key Exchange", font=h1_font, bg=main_colour).grid(row=0, column=0, columnspan=5) # ? # ? Alice Frame alice_frame = Frame(mainframe, bg=main_colour) alice_frame.grid(row=1, column=0, rowspan=3) Label(alice_frame, text="Alice", font=h2_font, bg=main_colour).grid(row=0, column=0, columnspan=2) Label(alice_frame, text="Any random number:", font=h3_font, bg=main_colour).grid(row=1, column=0) Entry(alice_frame, width=10, font=h3_font, relief="solid", textvariable=alice_number).grid(row=1, column=1) alice_key = Label(alice_frame, width=box_width, font=h3_font, bg=main_colour, wraplength=350) alice_key.grid(row=2, column=0, columnspan=2, pady=(10, 0)) # ? Bob Frame bob_frame = Frame(mainframe, bg=main_colour) bob_frame.grid(row=1, column=3, rowspan=3) Label(bob_frame, text="Bob", font=h2_font, bg=main_colour).grid(row=0, column=0, columnspan=2) Label(bob_frame, text="Any random number:", font=h3_font, bg=main_colour).grid(row=1, column=0) Entry(bob_frame, width=10, font=h3_font, relief="solid", textvariable=bob_number).grid(row=1, column=1) bob_key = Label(bob_frame, width=box_width, font=h3_font, bg=main_colour, wraplength=350) bob_key.grid(row=2, column=0, columnspan=2, pady=(10, 0)) # ? Shared Number Frame shared_number_frame = Frame(mainframe, bg=main_colour) shared_number_frame.grid(row=1, column=1, padx=30, pady=20) Label(shared_number_frame, text="G (any prime number):", font=h3_font, bg=main_colour).grid(row=0, column=0) Entry(shared_number_frame, width=8, font=h3_font, relief="solid", textvariable=g_number).grid(row=0, column=1) Label(shared_number_frame, text="N (any prime number):", font=h3_font, bg=main_colour).grid(row=1, column=0) Entry(shared_number_frame, width=8, font=h3_font, relief="solid", textvariable=n_number).grid(row=1, column=1) # ? Button Frame button_frame = Frame(mainframe, bg=main_colour) button_frame.grid(row=2, column=1, pady=(10, 0)) Button(button_frame, text="Generate Key", font=(font_family, 12), bg=button_colour, command=Diffie_hellman.generate_key).grid(row=0, column=0) # ? Error Frame error_frame = Frame(mainframe, bg=main_colour) error_frame.grid(row=3, column=0, columnspan=5) g_number_error = Label(error_frame) n_number_error = Label(error_frame) alice_number_error = Label(error_frame) bob_number_error = Label(error_frame) list_of_label_error = [ g_number_error, n_number_error, alice_number_error, bob_number_error ] i = 0 for label_error in list_of_label_error: label_error.config(font=error_font, fg="red", background=main_colour) label_error.grid(row=i, column=0) i += 1
l1 = Label(bottom_frame, textvariable=g_units, anchor=W) l1.grid(row=1, column=2) ########################################################################### # List of GIVEN prefixes prefix_list1_frame = Frame(bottom_frame) prefix_list1 = Listbox(prefix_list1_frame, height=8, width=8) prefix_list1.pack(side=LEFT, fill=Y) # Scroll bar for GIVEN prefixes prefix_sb1 = Scrollbar(prefix_list1_frame) prefix_sb1.pack(side=RIGHT, fill=Y) prefix_list1.configure(yscrollcommand=prefix_sb1.set) prefix_sb1.configure(command=prefix_list1.yview) prefix_list1_frame.grid(row=1, column=3, rowspan=2, columnspan=3) # List of GIVEN units list1_frame = Frame(bottom_frame) units_list1 = Listbox(list1_frame, height=8, width=8) units_list1.pack(side=LEFT, fill=Y) # Scroll bar for GIVEN units units_sb1 = Scrollbar(list1_frame) units_sb1.pack(side=RIGHT, fill=Y) units_list1.configure(yscrollcommand=units_sb1.set) units_sb1.configure(command=units_list1.yview) list1_frame.grid(row=1, column=6, rowspan=8, columnspan=3) # Inserts a frame in the middle of the bottom frame to allow an arrow to be created to show the direction of conversion.
class MainGUI: def __init__(self,player_filename=""): ############### load data and save settings self.save_on = True if not player_filename: player_filename = "data/character_template.json" self.save_on = False self.player_filename = player_filename with open(player_filename, 'r') as f: self.playerdata = json.load(f) self.player_class_data = data["classes"][self.playerdata["class"]] ########## self.root = Tk() ### variables self.levelvar = IntVar() self.levelvar.set(self.playerdata["level"]) self.namevar = StringVar() self.namevar.set(self.playerdata["name"]) self.goldvar = IntVar() self.goldvar.set(self.playerdata["gold"]) self.background_text = self.playerdata["background"] self.journal_text = self.playerdata["journal"] ############################## #add widgets self.GUIMenu() self.GUIHeader() self.GUIBody() ############################## ### configure root self.root.grid_rowconfigure(0, weight=0) self.root.grid_rowconfigure(1, weight=1,minsize=400) self.root.grid_columnconfigure(0, weight=1,minsize=400) self.root.title("RPG Leveler") self.root.protocol("WM_DELETE_WINDOW", self.on_close) self.root.mainloop() ############################## # Constructor functions # ############################## ### add menu def GUIMenu(self): self.menubar = Menu(self.root) self.fileMenu = Menu(self.menubar, tearoff=0) self.fileMenu.add_command(label="Open", command=self.open_file) self.fileMenu.add_command(label="Save", command=self.save) self.fileMenu.add_separator() self.fileMenu.add_command(label="Exit", command=self.root.quit) self.menubar.add_cascade(label="File", menu=self.fileMenu) self.spellMenu = Menu(self.menubar, tearoff=0) self.spellMenu.add_command(label="Add Spell", command=OpenGUI) self.spellMenu.add_command(label="Edit Spell", command=self.hello) self.menubar.add_cascade(label="Spells", menu=self.spellMenu) self.itemMenu = Menu(self.menubar, tearoff=0) self.itemMenu.add_command(label="Add Item", command=self.hello) self.itemMenu.add_command(label="Edit Item", command=self.hello) self.menubar.add_cascade(label="Items", menu=self.itemMenu) self.root.config(menu=self.menubar) ### add header def GUIHeader(self): self.header = Frame(self.root,pady=5) self.header_name = Label(self.header,text="Name: ") self.header_namevar = Label(self.header,textvariable=self.namevar) self.header_level = Label(self.header,text="Level: ") self.header_levelvar = Label(self.header,textvariable=self.levelvar) self.header_gold = Label(self.header,text="Gold: ") self.header_goldvar = Label(self.header,textvariable=self.goldvar) self.header.grid(row=0,column=0,sticky="NSEW") self.header_name.grid(row=0,column=0,sticky="NSEW") self.header_namevar.grid(row=0,column=1,sticky="NSEW") self.header_level.grid(row=0,column=3,sticky="NSEW") self.header_levelvar.grid(row=0,column=4,sticky="NSEW") self.header_gold.grid(row=0,column=6,sticky="NSEW") self.header_goldvar.grid(row=0,column=7,sticky="NSEW") ### configure header grid self.header.grid_columnconfigure(2,minsize=30,weight=2) self.header.grid_columnconfigure(5,minsize=30,weight=2) self.header.grid_columnconfigure(8,weight=5) def GUIBody(self): #notebook self.body = ttk.Notebook() self.tabAbilities = Frame(self.root) self.tabClass = Frame(self.root) self.tabSkills = Frame(self.root) self.tabItems = Frame(self.root) self.tabBackground = Frame(self.root) self.tabJournal = Frame(self.root) ########################### #add tabs self.GUIAbilitiesTab() self.GUIBackgroundTab() self.GUIClassTab() self.GUIItemsTab() self.GUIJournalTab() self.GUIOverviewTab() self.GUISkillsTab() # ########################### self.body.add(self.tabAbilities,text="Abilities") self.body.add(self.tabClass,text=self.player_class_data["tab_name"]) self.body.add(self.tabSkills,text="Skills") self.body.add(self.tabItems,text="Items") self.body.add(self.tabBackground,text="Background") self.body.add(self.tabJournal,text="Journal") self.body.grid(row=1,column=0,sticky="NSEW") ################################## # tabs # ################################## def GUIBackgroundTab(self): self.background_box = Text(self.tabBackground,width=10,height=10,font="TkFixedFont",wrap=WORD) self.background_box.insert(END,self.background_text) self.background_box.grid(row=0,column=0,sticky="NSEW") self.tabBackground.grid_rowconfigure(0, weight=1) self.tabBackground.grid_columnconfigure(0, weight=1) def GUIJournalTab(self): self.journal_box = Text(self.tabJournal,width=10,height=10,font="TkFixedFont",wrap=WORD) self.journal_box.insert(END,self.journal_text) self.journal_box.grid(row=0,column=0,sticky="NSEW") self.tabJournal.grid_rowconfigure(0, weight=1) self.tabJournal.grid_columnconfigure(0, weight=1) def GUIAbilitiesTab(self): self.Attributes = {} self.i=0 self.Abilities_pointsLeftvar = IntVar() self.Abilities_pointsLeftvar.set(self.playerdata["points"]["attributes"]) #header self.tabAbilities_abil = Frame(self.tabAbilities,padx=10,pady=10) self.tabAbilities_pointsLeft = Label(self.tabAbilities,text="Points Left:") self.tabAbilities_pointsLeftvar = Label(self.tabAbilities,textvariable=self.Abilities_pointsLeftvar) #attributes for attribute in self.playerdata["stats"]["attributes"]: #print(attribute) self.Attributes[attribute] = {} self.Attributes[attribute]["value"] = IntVar() self.Attributes[attribute]["value"].set(self.playerdata["stats"]["attributes"][attribute]) self.Attributes[attribute]["button+"] = Button(self.tabAbilities_abil,text="+",command=lambda attribute=attribute: self.change_attribute(attribute,1)) self.Attributes[attribute]["button-"] = Button(self.tabAbilities_abil,text="-",command=lambda attribute=attribute: self.change_attribute(attribute,-1)) self.Attributes[attribute]["valueLabel"] = Label(self.tabAbilities_abil,textvariable=self.Attributes[attribute]["value"],font=("Ariel", 25)) self.Attributes[attribute]["atributeLabel"] = Label(self.tabAbilities_abil,text=attribute.upper()+" ",font=("Ariel", 25)) self.Attributes[attribute]["spacerLabel"] = Label(self.tabAbilities_abil,text="",height=1) self.Attributes[attribute]["atributeLabel"].grid(row=self.i,column=0,sticky="NSEW",rowspan=2) self.Attributes[attribute]["button-"].grid(row=self.i+1,column=4,sticky="NSEW") self.Attributes[attribute]["valueLabel"].grid(row=self.i,column=2,sticky="NSEW",rowspan=2) self.Attributes[attribute]["button+"].grid(row=self.i,column=4,sticky="NSEW") self.Attributes[attribute]["spacerLabel"].grid(row=self.i+2,column=3,sticky="NSEW") self.i+=3 self.tabAbilities_pointsLeftvar.grid(row=0,column=2) self.tabAbilities_pointsLeft.grid(row=0,column=1) self.tabAbilities_abil.grid(row=1,column=0) def GUISkillsTab(self): self.Skills = {} self.sk_x=0 self.sk_y=0 #attributes for skill in data["stats"]["skills"]: #print(skill) self.Skills[skill["name"]] = {} self.Skills[skill["name"]]["frame"] = Frame(self.tabSkills,relief="sunken",bd=1) self.Skills[skill["name"]]["isTrained"] = IntVar() self.Skills[skill["name"]]["isTrained"].set(self.playerdata["stats"]["skills"][skill["name"]]) self.Skills[skill["name"]]["value"] = IntVar() self.Skills[skill["name"]]["value"].set((self.Attributes[skill["base"]]["value"].get()-10)//2+self.Skills[skill["name"]]["isTrained"].get()*2) #print (self.Skills[skill["name"]]["value"].get()) self.Skills[skill["name"]]["check"] = Checkbutton(self.Skills[skill["name"]]["frame"],variable=self.Skills[skill["name"]]["isTrained"],state=DISABLED,command=lambda skill=skill: print(skill)) self.Skills[skill["name"]]["valueLabel"] = Label(self.Skills[skill["name"]]["frame"],textvariable=self.Skills[skill["name"]]["value"],font=("Ariel", 12)) self.Skills[skill["name"]]["atributeLabel"] = Label(self.Skills[skill["name"]]["frame"],text=skill["name"]+" ",font=("Ariel", 12)) self.Skills[skill["name"]]["frame"].grid(row=self.sk_y,column=self.sk_x,sticky="we") self.Skills[skill["name"]]["check"].pack(side="left") self.Skills[skill["name"]]["atributeLabel"].pack(side="left") self.Skills[skill["name"]]["valueLabel"].pack(side="right") self.sk_x+=1 if self.sk_x > 1: self.sk_y+=1 self.sk_x=0 ######## Items def GUIItemsTab(self): self.itemSFrame = FrameScrollbar(self.tabItems) self.itemid=0 self.Items = [] for item in self.playerdata["items"]: self.Items.append({}) self.Items[self.itemid]["id"]=self.itemid self.Items[self.itemid]["frame"] = Frame(self.itemSFrame.frame,relief=RIDGE,bg="grey",padx=1,pady=1) self.Items[self.itemid]["button_delete"] = Button(self.Items[self.itemid]["frame"],text="X",fg="white",bg="red",command=lambda Itemid=self.itemid:delItem(Itemid)) self.Items[self.itemid]["name"] = Entry(self.Items[self.itemid]["frame"]) self.Items[self.itemid]["name"].insert(END, item["name"]) self.Items[self.itemid]["description"] = Text(self.Items[self.itemid]["frame"],width=10,height=5,wrap=WORD) self.Items[self.itemid]["description"].insert(END,item["description"]) self.Items[self.itemid]["name"].grid(row=0,column=0) self.Items[self.itemid]["button_delete"].grid(row=0,column=0,sticky="E") self.Items[self.itemid]["description"].grid(row=1,column=0,sticky="NSEW") self.Items[self.itemid]["frame"].grid(padx=10,pady=10,sticky="EW") self.Items[self.itemid]["frame"].grid_columnconfigure(0, weight=1) self.itemid+=1 def addItem(): item={} item["id"]=self.itemid item["frame"] = Frame(self.itemSFrame.frame,relief=RIDGE,bg="grey",padx=1,pady=1) item["button_delete"] = Button(item["frame"],text="X",fg="white",bg="red",command=lambda Itemid=self.itemid:delItem(Itemid)) item["name"] = Entry(item["frame"]) item["description"] = Text(item["frame"],width=10,height=5,wrap=WORD) item["name"].grid(row=0,column=0) item["button_delete"].grid(row=0,column=0,sticky="E") item["description"].grid(row=1,column=0,sticky="NSEW") item["frame"].grid(padx=20,pady=10,sticky="EW") item["frame"].grid_columnconfigure(0, weight=1) self.itemSFrame.frame.update_idletasks() self.itemSFrame.onCanvasConfigure(None) self.Items.append(item) self.itemid+=1 def delItem(Itemid): item="" index=0 for item in self.Items: if item["id"]==Itemid: index=self.Items.index(item) break else: item="" if item: self.Items[index]["frame"].grid_remove() self.Items.remove(item) self.itemSFrame.frame.update_idletasks() self.itemSFrame.onCanvasConfigure(None) self.addItemButton = Button(self.itemSFrame.canvas_frame,text="+",bg="grey",command=addItem).place(rely=1.0, relx=0.0, x=5, y=-5, anchor="sw") ######## Class def GUIClassTab(self): pass ######## Overview def GUIOverviewTab(self): pass ####################################### # functions # ####################################### def hello(self): pass def change_attribute(self,attribute,amount): if amount>0: if self.Abilities_pointsLeftvar.get()>0: self.Attributes[attribute]["value"].set(self.Attributes[attribute]["value"].get()+amount) self.Abilities_pointsLeftvar.set(self.Abilities_pointsLeftvar.get()-1) else: if self.Attributes[attribute]["value"].get()>self.playerdata["stats"]["base_attributes"][attribute]: self.Attributes[attribute]["value"].set(self.Attributes[attribute]["value"].get()+amount) self.Abilities_pointsLeftvar.set(self.Abilities_pointsLeftvar.get()+1) self.updateSkills() def on_close(self): if self.save_on and messagebox.askyesno("RPG","Do you want to save changes?"): self.save() self.root.destroy() def save(self): if self.save_on: for attribute in self.playerdata["stats"]["attributes"]: self.playerdata["stats"]["attributes"][attribute] = self.Attributes[attribute]["value"].get() self.playerdata["items"]=[] for item in self.Items: ditem = {} ditem["name"]=item["name"].get() ditem["description"]=item["description"].get(1.0,END)[:-1] self.playerdata["items"].append(ditem) self.playerdata["level"] = self.levelvar.get() self.playerdata["name"] = self.namevar.get() self.playerdata["gold"] = self.goldvar.get() self.playerdata["background"] = self.background_box.get(1.0,END)[:-1] self.playerdata["journal"] = self.journal_box.get(1.0,END)[:-1] self.playerdata["points"]["attributes"] = self.Abilities_pointsLeftvar.get() print(self.playerdata) with open(self.player_filename, 'w') as player_file: json.dump(self.playerdata, player_file, indent=4) def updateSkills(self): for skill in data["stats"]["skills"]: self.Skills[skill["name"]]["value"].set((self.Attributes[skill["base"]]["value"].get()-10)//2+self.Skills[skill["name"]]["isTrained"].get()*2) def open_file(self): p_fn = openFileName() if p_fn: self.root.destroy() openGUI(p_fn)
class CrosstalkDropdown(Frame): def __init__(self, tab, style, dye_li): Frame.__init__(self, tab) self.tab = tab self.number = 3 self.style = style self.dye_li = dye_li self.initUI() def initUI(self): self.frameTwo = Frame(self.tab) self.frameTwo.grid(row=0, column=0) self.canvas = Canvas(self.frameTwo) self.listFrame = Frame(self.canvas) self.initialize() self.put_text() self.divider() self.choice_algorithm() self.single_well_analysis() def initialize(self): # Dropdown Menu optionList = ['Dye'] for dye in self.dye_li: for temp_sub in ['_L', '_H']: optionList.append(dye + temp_sub) self.entry_li = [] for i in range(self.number): dropVar1 = StringVar() dropVar1.set('Dye') # default choice dropMenu1 = ttk.OptionMenu(self.tab, dropVar1, *optionList) dropMenu1.config(width=13) dropMenu1.grid(column=1, row=i+2, padx=10) dropVar2 = StringVar() dropVar2.set('Dye') # default choice dropMenu2 = ttk.OptionMenu(self.tab, dropVar2, *optionList) dropMenu2.config(width=13) dropMenu2.grid(column=3, row=i+2, padx=10) ct_drfu = ttk.Entry(self.tab, width=8) ct_drfu.insert(0, 0) ct_drfu.grid(row=i+2, column=4, padx=10) ct_thrd = ttk.Entry(self.tab, width=8) ct_thrd.insert(0, 0) ct_thrd.grid(row=i+2, column=5) self.entry_li.append([dropVar1, dropVar2, ct_drfu, ct_thrd]) def divider(self): blank = Label(self.tab, text='', width=16) blank.grid(row=5, column=1, columnspan=2) ttk.Separator(self.tab, orient=HORIZONTAL).grid(row=6, columns=1, columnspan=10, sticky='we') blank = Label(self.tab, text='', width=16) blank.grid(row=11, column=1, columnspan=2) ttk.Separator(self.tab, orient=HORIZONTAL).grid(row=12, columns=1, columnspan=10, sticky='we') def put_text(self): label = Label(self.tab, text='CROSSTALK') label.grid(row=0, column=0) label = Label(self.tab, text='Target 1 (from)') label.grid(row=1, column=1) label = Label(self.tab, text='Target 2 (to)') label.grid(row=1, column=3) label = Label(self.tab, text='DRFU') label.grid(row=1, column=4) label = Label(self.tab, text='Ct Thrd') label.grid(row=1, column=5) for i in range(self.number): label = ttk.Label(self.tab, text=f'crosstalk {i+1}', justify="left") label.grid(row=i+2, column=0) label = ttk.Label(self.tab, text='➜', justify='left') label.grid(row=i+2, column=2) def get_entry(self): return self.entry_li, self.algoritm_entry_li, self.singlewell_entry_li def product_selection(self): label = Label(self.tab, text='제품별 알고리즘') label.grid(row=10, column=0, columnspan=2) products = ['Defualt', 'Defualt', 'GI-V (cross-talk)', 'GI-BI (2-CR)', 'GI-P (Q670 PC)'] product_choice = StringVar() product_choice.set('Default') # default choice dropMenu1 = ttk.OptionMenu(self.tab, product_choice, *products) dropMenu1.config(width=18) dropMenu1.grid(column=2, row=10, padx=10, columnspan=2) return product_choice def _algorithm_dropdown(self, rw, col, txt): label = Label(self.tab, text=txt) label.grid(row=rw, column=col, columnspan=2) algorithm_li = ['Default (latest ver.)', 'Default (latest ver.)', 'Old ver.'] algorithm_choice = StringVar() algorithm_choice.set('Default (latest ver.)') # default choice dropMenu1 = ttk.OptionMenu(self.tab, algorithm_choice, *algorithm_li) dropMenu1.config(width=18) dropMenu1.grid(column=col+2, row=rw, padx=10, columnspan=2) sample_kind_li = ['All', 'All', 'PC only', 'Sample only'] sample_choice = StringVar() sample_choice.set('All') dropMenu2 = ttk.OptionMenu(self.tab, sample_choice, *sample_kind_li) dropMenu2.config(width=18) dropMenu2.grid(column=col+4, row=rw, padx=10, columnspan=2) return [algorithm_choice, sample_choice] def choice_algorithm(self): label = Label(self.tab, text='Algorithm'.upper()) label.grid(row=7, column=0) absd_corrector_switch = self._algorithm_dropdown( 8, 0, '과도한 CR에 대한 보정') asymm_sigfit_switch = self._algorithm_dropdown(9, 0, 'Ct값 보정') product_choice = self.product_selection() self.algoritm_entry_li = [absd_corrector_switch, asymm_sigfit_switch, product_choice] def single_well_analysis(self): label = Label(self.tab, text='single well'.upper()) label.grid(row=13, column=0) check_single = Checkbar(self.tab, ['On'], self.style) check_single.grid(row=13, column=1) label = Label(self.tab, text='Dye') label.grid(row=14, column=0) dye_choice = StringVar() dye_choice.set('Choose dye') # default choice dye_options = ['Choose dye'] dye_options.extend(self.dye_li) dropMenu1 = ttk.OptionMenu(self.tab, dye_choice, *dye_options) dropMenu1.config(width=14) dropMenu1.grid(column=1, row=14, padx=10, columnspan=2) label = Label(self.tab, text='Well') label.grid(row=14, column=3) well_entry = ttk.Entry(self.tab, width=8) well_entry.insert(0, '') well_entry.grid(row=14, column=4) self.singlewell_entry_li = [check_single.vars[0], dye_choice, well_entry]
def main(token): ''' Main event loop, draw the image and text to tkinter window ''' root = Tk() root.configure(bg="black", cursor="none") root.attributes('-fullscreen', True) f = Frame(root, bg="black", width=MONITOR_WIDTH, height=MONITOR_HEIGHT) f.grid(row=0, column=0, sticky="NW") f.grid_propagate(0) f.update() most_recent_song = "" while True: redraw = True time.sleep(5) current_song = get_current_playing(token) if current_song["name"] != most_recent_song: redraw = True else: redraw = False if redraw: artist = current_song["artist"] name = current_song["name"] most_recent_song = name hd_img = itunes_search(current_song["name"], current_song["artist"]) if hd_img != None: pi = convert_image(hd_img) else: pi = convert_image(current_song["img_src"]) img_x = MONITOR_WIDTH / 3 img_y = MONITOR_HEIGHT / 2 label = Label(f, image=pi, highlightthickness=0, bd=0) label.place(x=img_x, y=img_y, anchor="center") artist_label = Label(f, text=artist, bg="black", fg="white", font=("Courier New", 30)) artist_x = MONITOR_WIDTH - (MONITOR_WIDTH / 5) artist_y = (MONITOR_HEIGHT / 2) - 50 artist_label.place(x=artist_x, y=artist_y, anchor="center") song_label = Label( f, text=name, bg="black", fg="white", font=("Courier New", 50), ) song_x = MONITOR_WIDTH - (MONITOR_WIDTH / 5) song_y = (MONITOR_HEIGHT / 2) + 50 song_label.place(x=song_x, y=song_y, anchor="center") root.update() label.destroy() artist_label.destroy() song_label.destroy()
class CardAuthor(Frame): def __init__(self, parent, author: Author, clickable=False, on_click=None): super().__init__(master=parent) self.author = author self.clickable = clickable self.on_click = on_click self._init_components() def get_default_background(self): return WHITE def get_foreground(self): return BLACK def _init_components(self, ): """ Khởi tạo các thành phần trên nút """ icon_size = (BUTTON[1] + PADDING * 2) * 3 self.config(background=self.get_default_background(), ) self.icon_researcher = RBGAImage(ICON_RESEARCHER, size=icon_size) self.label_icon = Label(self, image=self.icon_researcher) self.label_icon.config(background=self.get_default_background(), highlightthickness=0) self.frame_content = Frame(self) self.frame_content.config(background=self.get_default_background()) self.label_name = Label(self.frame_content) self.label_name.config( text=self.author.name, font=TITLE_SCREEN, background=self.get_default_background(), foreground=self.get_foreground(), anchor="nw", justify="left", wraplengt=300 # highlightthickness=BORDER_WITH, # highlightbackground=DARK_GREY, ) text_similarity = None if (self.author.similarity is not None): text_similarity = "Similarity: %.2f" % self.author.similarity self.label_similarity = Label(self.frame_content) self.label_similarity.config( text=text_similarity, font=BUTTON, background=self.get_default_background(), foreground=self.get_foreground(), anchor="nw", justify="left" # highlightthickness=BORDER_WITH, # highlightbackground=DARK_GREY, ) self.frame_status = Frame(self) self.frame_status.config(background=self.get_default_background()) self.label_status_prediction = Label(self.frame_status) self.label_status_prediction.config( text="", font=BODY, background=self.get_default_background(), foreground=WHITE, anchor="nw", justify="left") self.label_status_acquaintance = Label(self.frame_status) self.label_status_acquaintance.config( text="", font=BODY, background=self.get_default_background(), foreground=WHITE, anchor="nw", justify="left") self._add_logic() self._add_animations() def _show_label_status_acquaintance(self, enable=False): if (enable == True): if (self.author.isAcquantaince is True): self.label_status_acquaintance.config( text="Acquantaince", background=DARK_BLUE, ) else: self.label_status_acquaintance.config( text="", background=self.get_default_background(), ) def _show_label_status_prediction(self, enable=False): if (enable == True): if (self.author.isCollaborated is True): self.label_status_prediction.config( text="True-positive", background=GREEN, ) elif (self.author.isCollaborated is False): self.label_status_prediction.config( text="False-negative", background=RED, ) else: self.label_status_prediction.config( text="", background=self.get_default_background(), ) def show_valuation(self, enable=False): self._show_label_status_acquaintance(enable) self._show_label_status_prediction(enable) def _add_logic(self): if (self.clickable == True): self.bind("<Button-1>", self._on_click) self.label_similarity.bind("<Button-1>", self._on_click) self.label_icon.bind("<Button-1>", self._on_click) self.label_name.bind("<Button-1>", self._on_click) self.frame_content.bind("<Button-1>", self._on_click) def _on_enter(self, event, **kw): if (self.clickable == True): color = GREY self.config(background=color) self.label_similarity.config(background=color) self.label_icon.config(background=color) self.label_name.config(background=color) self.frame_content.config(background=color) self.frame_status.config(background=color) if (self.label_status_acquaintance['bg'] == self.get_default_background()): self.label_status_acquaintance.config(background=color) if (self.label_status_prediction['bg'] == self.get_default_background()): self.label_status_prediction.config(background=color) def _on_leave(self, event, **kw): if (self.clickable == True): color = self.get_default_background() self.config(background=color) self.label_similarity.config(background=color) self.label_icon.config(background=color) self.label_name.config(background=color) self.frame_content.config(background=color) self.frame_status.config(background=color) if (self.label_status_acquaintance['bg'] == GREY): self.label_status_acquaintance.config(background=color) if (self.label_status_prediction['bg'] == GREY): self.label_status_prediction.config(background=color) def _add_animations(self): if (self.clickable == True): self.bind("<Enter>", self._on_enter) self.bind("<Leave>", self._on_leave) def _on_click(self, event, **kw): if (self.on_click is not None): self.on_click(self.author) def show_components(self, ): """ Khởi tạo các thành phần trên nút """ colIdx_left = 0 colIdx_label_icon = 1 colIdx_content = 2 colIdx_right = colIdx_content + 1 rowIdx_header = 0 rowIdx_frame_content = 1 rowIdx_frame_status = 2 rowIdx_footer = rowIdx_frame_status + 1 rowIdx_name = 1 rowIdx_similarity = 2 rowIdx_works = 3 colIdx_similarity = 0 rowIdx_acquantaince = 0 rowIdx_status_prediction = 0 colIdx_status_prediction = 0 colIdx_acquantaince = 1 self.grid_columnconfigure(colIdx_left, weight=1) self.grid_columnconfigure(colIdx_right, weight=1) self.grid_rowconfigure(rowIdx_header, weight=1) self.grid_rowconfigure(rowIdx_footer, weight=1) grid_default = { "sticky": "news", "pady": (0, PADDING), "padx": (PADDING, PADDING), } # self.label_text.pack(fill="both", expand=1) self.label_icon.grid(row=rowIdx_frame_content, column=colIdx_label_icon, **grid_default) self.frame_content.grid(row=rowIdx_frame_content, column=colIdx_content, **grid_default) self.label_name.grid(row=rowIdx_name, column=0, **grid_default) self.label_similarity.grid(row=rowIdx_similarity, column=colIdx_similarity, **grid_default) self.frame_status.grid(row=rowIdx_frame_status, column=colIdx_content, **grid_default) self.label_status_acquaintance.grid(row=rowIdx_acquantaince, column=colIdx_acquantaince, **grid_default) self.label_status_prediction.grid(row=rowIdx_status_prediction, column=colIdx_status_prediction, **grid_default)
class MainWindow(Frame): __slots__ = ( "_app", "_ctrl_frame", "_ctrl_new_button", "_master", "_puzzle_row_groups", "_puzzle_row_frames", ) def __init__(self, master: Optional[tkinter.Tk] = None, *, app: "Application") -> None: if master is None: self._master = tkinter.Tk() else: self._master = master super().__init__(self._master) self._app = app self._master.title( "Talos EvilSeed - randomizer full control configurator") self.grid() self._build_puzzle_rows() self._build_control_pane() def _build_puzzle_rows(self) -> None: self._puzzle_row_groups: List[List[PuzzleRow]] = [] self._puzzle_row_frames: List[Frame] = [] MATCHERS: Sequence[Callable[[str], bool]] = [ lambda name: (name.startswith("A") or name.startswith("B")) and name != "ADev", lambda name: (name.startswith("C") or name.startswith("N")) or name == "ADev", ] for frame_idx, f_matcher in enumerate(MATCHERS): frame = Frame(self) frame.grid(row=0, padx=20, ipady=20, column=frame_idx, sticky=tkinter.N) self._puzzle_row_frames.append(frame) puzzle_rows = [ PuzzleRow( frame, app=self._app, level_name=level_name, level=level, row=i, ) for i, ( level_name, level, ) in enumerate(sorted(list(schema.PUZZLES.items()))) if f_matcher(level_name) ] self._puzzle_row_groups.append(puzzle_rows) def _build_control_pane(self) -> None: self._control_pane_frame = Frame(self) self._control_pane_frame.grid( row=1, column=0, columnspan=2, sticky=tkinter.S + tkinter.W + tkinter.E, ) self._ctrl_new_button = Button( self._control_pane_frame, text="New seed", ) self._ctrl_new_button.grid(column=0, row=0, ipadx=20, ipady=10)
def checkEnc(self): if Functions().analyseEncryption(self.filesAddress) == True: self.displaySelectedFiles.config(text = "Files Can be Encrypted",bg = "light green" ,font=('calibri',12,'bold')) userIDFrame = Frame(self.root) self.root.update() askIDLable = Label(userIDFrame,text = " Enter Your Username:"******" Enter Your Password:"******" Confirm Password: "******"Select only Unencrypted files ... !", bg = "red",font=('calibri',12,'bold')) self.root.update()
class Driver(): """ This class contains all the member funcions that are related with tkinter library so all the user interactable elements are defined here. """ # def updateProgressBar(self,value): # self.progressBar['value'] = value def getAddress(self): """ "getAddress" function is used to fetch all the address of the selected files and diaplays the selected files inside a frame """ self.filesAddress = Functions().getFilesAddress() self.displaySelectedFiles.config(text = "") self.root.update() displayFrame1 =Frame(self.root) for i in range(len(self.filesAddress)): Label(displayFrame1,text=self.filesAddress[i]).grid(column = 0, row = i+1) self.root.update() displayFrame1.grid(column = 0 , row = 3) def doEnc(self): if self.userPwd.get() == self.confirmUserPwd.get(): pwdMatched = Label(self.confirmFrame,text="Password Matched",font=('calibri',8),bg='green') pwdMatched.grid(column = 0, row=0 ) self.root.update() # Encrypt Files here and Delete the old file Functions().encryptFile(self.filesAddress,self.userName.get(),self.userPwd.get()) print("Files Encrypted Syccessfully") displaySuccess= Label(self.confirmFrame,text='Encryption Successfull',font=('calibri',20,'bold'),bg='green',foreground='white') displaySuccess.grid(column = 0, row= 2) self.root.update() else: pwdMatched = Label(self.confirmFrame,text="Password Not Matched",font=('calibri',8),bg='red') pwdMatched.grid(column = 0, row=0 ) self.root.update() def doDec(self): if Functions().verify(self.filesAddress,self.userName.get(),self.userPwd.get()) == True: pwdMatched = Label(self.confirmFrame,text="Password Matched",font=('calibri',8),bg='green') pwdMatched.grid(column = 0, row=0 ) self.root.update() # Decrypt Files here and delete the old ones Functions().decryptFile(self.filesAddress,self.userName.get(),self.userPwd.get()) # progressDisplay.config(text= str(percent) + "%",font= ("calibri",12,"bold"),bg='yellow') displaySuccess= Label(self.confirmFrame,text='Decryption Successfull',font=('calibri',20,'bold'),bg='green',foreground='white') displaySuccess.grid(column = 0, row= 2) print("Files Decrypted Successfully") self.root.update() else: pwdMatched = Label(self.confirmFrame,text="Incorrect Password",font=('calibri',8),bg='red') pwdMatched.grid(column = 0, row=0 ) self.root.update() def checkEnc(self): if Functions().analyseEncryption(self.filesAddress) == True: self.displaySelectedFiles.config(text = "Files Can be Encrypted",bg = "light green" ,font=('calibri',12,'bold')) userIDFrame = Frame(self.root) self.root.update() askIDLable = Label(userIDFrame,text = " Enter Your Username:"******" Enter Your Password:"******" Confirm Password: "******"Select only Unencrypted files ... !", bg = "red",font=('calibri',12,'bold')) self.root.update() def checkDec(self): if Functions().analyseDecryption(self.filesAddress) == True: self.displaySelectedFiles.config(text = "Files Can be Decrypted", bg = "light green",font=('calibri',12,'bold')) userIDFrame = Frame(self.root) askIDLable = Label(userIDFrame,text = " Enter Your Username:"******" Enter Your Password:"******"Select only Encrypted files ... !", bg = "red",font=('calibri',12,'bold')) self.root.update() def userInterface(self): self.root = Tk() self.root.title('Uencryptor - File Encryptor') self.root.resizable(0,0) titleFrame = Frame(self.root) # contents in titleFrame title = Label(titleFrame,text="Uencryptor",font = ('calibri',40,'bold'),padx=40,pady=5,bg='green',foreground='white') title.grid(column=0) subTitle = Label(titleFrame,text="Encrypt your personal files.",font=('calibir',10,'bold'),bg='light green',padx=103) subTitle.grid(column = 0, row = 1) titleFrame.grid(column =0,row =0) inputFrame = Frame(self.root) # contents to interact with user are here selectFile = Label(inputFrame,text = "Select Files to Encrypt/Decrypt : ",pady=10,font=('calibri',12,'bold')) selectFile.grid(column =0 , row = 0) selectFileButton = Button(inputFrame,text='Choose Files',command = self.getAddress) selectFileButton.grid(column =1 , row = 0) inputFrame.grid(column=0, row =1) displayFrame = Frame(self.root) # contents of display frame selectedFiles = Label(displayFrame,text = "Selected Files Are : ",font=('calibri',12,'bold')) selectedFiles.grid(column =0 , row = 0) blankLable = Label(displayFrame,pady = 5,text=' ') blankLable.grid(column = 1 , row = 0) displayFrame.grid(column =0, row =2) # displayframe2 for message displayFrame2 = Frame(self.root) self.displaySelectedFiles = Label(displayFrame2,text='Selected files will be displayed here.') self.displaySelectedFiles.grid(column = 0, row =0 ) displayFrame2.grid(column = 0, row = 4) buttonFrame = Frame(self.root) encryptButton = Button(buttonFrame,text='Verify Encryption',command= self.checkEnc) encryptButton.grid(column=0, row = 0) blankLable2 = Label(buttonFrame,pady = 5,text=' ') blankLable2.grid(column = 1 , row = 0) decryptButton = Button(buttonFrame,text='Verify Decryption',command= self.checkDec) decryptButton.grid(column=2,row=0) buttonFrame.grid(column = 0,row = 5) self.root.mainloop()
class WaltzGUI(lx.Lx200Commands): def __init__(self, master): """Class builds GUI to control Waltz Telescope. Uses Tkinter for GUI functionality. Inherits from lx200commands.Lx200Commands class. This class provides functionality to talk to serial connection using the lx200 protocol. """ super().__init__() self.master = master master.title("Waltz Control Panel") #Store CET and UCT self.CET = '' self.UTC = '' #Store if telescope is waiting for slew to finish self.waiting=True ## Building up GUI Widgets ## #Menubars menubar=Menu(self.master) #Connection menu connectionmenu = Menu(menubar, tearoff=0) connectionmenu.add_command(label="Open Connection", command=self.open_connection_buttonclick) connectionmenu.add_command(label="Close Connection", command=self.close_connection_buttonclick) menubar.add_cascade(label="Connection", menu=connectionmenu) #settings_menu settings_menu=Menu(menubar, tearoff=0) settings_menu.add_command(label="Enable buttons",command=self.stop_waiting) settings_menu.add_command(label="Toggle Precision",command=super().toggle_precision) menubar.add_cascade(label="Settings",menu=settings_menu) #Pointing_stars_menu pointing_stars_menu=Menu(menubar, tearoff=0) pointing_stars_menu.add_command(label="Pointing Star", command=self.save_pointing_star) menubar.add_cascade(label="Save as", menu= pointing_stars_menu) #Special_positions_menu special_positions_menu=Menu(menubar, tearoff=0) special_positions_menu.add_command(label="Slew to Primary Mirror Position",command=self.primary_mirror_pos_buttonclick) special_positions_menu.add_command(label="Slew to Secondary Mirror Position",command=self.secondary_mirror_pos_buttonclick) special_positions_menu.add_command(label="Slew to Park Position",command=self.park_telescope_buttonclick) menubar.add_cascade(label="Special Positions",menu=special_positions_menu) #Show menubar self.master.config(menu=menubar) #Output frame output_frame=Frame(master) output_frame.grid(row=0,columnspan=3) self.LST_label = Label(output_frame, font=('arial', 15, 'bold'), text="LST") self.LST_label.grid(row=0,column=0) self.LST_display = Label(output_frame, font=('arial', 20, 'bold'), bg='light green') self.LST_display.grid(row=0, column=1,padx=10, pady=10) self.local_time_label= Label(output_frame, font=('arial', 15, 'bold'), text='LT') self.local_time_label.grid(row=0, column=3) self.local_time_display = Label(output_frame, font=('arial', 20, 'bold'), bg='light green') self.local_time_display.grid(row=0, column=4,padx=10,pady=10) self.UTC_label= Label(output_frame, font=('arial', 15, 'bold'), text='UTC') self.UTC_label.grid(row=0, column=5) self.UTC_display = Label(output_frame, font=('arial', 20, 'bold'), bg='light green') self.UTC_display.grid(row=0, column=6,padx=10,pady=10) self.RA_label= Label(output_frame, font=('arial', 15, 'bold'), text= "RA") self.RA_label.grid(row=1, column =0) self.RA_display= Label(output_frame, font=('arial', 20, 'bold'), bg='light green') self.RA_display.grid(row=1, column =1) self.DEC_label= Label(output_frame, font=('arial', 15, 'bold'), text= "DEC") self.DEC_label.grid(row=1, column =3) self.DEC_display= Label(output_frame, font=('arial', 20, 'bold'), bg='light green') self.DEC_display.grid(row=1, column =4) self.HA_label= Label(output_frame, font=('arial', 15, 'bold'), text= "HA") self.HA_label.grid(row=1, column =5) self.HA_display= Label(output_frame, font=('arial', 20, 'bold'), bg='light green') self.HA_display.grid(row=1, column=6) #Interchange_frame #To interchange W<->E buttons and N<->S self.interchange_frame=Frame(master) self.interchange_frame.grid(row=1, column=0,pady=10) #Define Variables self.inter_WE=IntVar() self.inter_NS=IntVar() self.inter_NS_checkbox=Checkbutton(self.interchange_frame, text='N <> S', font=('arial', 10, 'bold'), variable=self.inter_NS, command=self.interchange_north_south) self.inter_NS_checkbox.grid(row=0,column=0,sticky='w',pady=5) self.inter_WE_checkbox=Checkbutton(self.interchange_frame, text='W <> E', font=('arial', 10, 'bold'), variable=self.inter_WE, command=self.interchange_west_east) self.inter_WE_checkbox.grid(row=1,column=0,sticky='w',pady=5) #Control frame self.control_frame=Frame(master) self.control_frame.grid(row=1,column=1,pady=10) self.south_button = Button(self.control_frame, text="S", font=('arial', 20, 'bold'), bg='LightGrey', height = 1, width = 2) self.south_button.grid(row=0,column=1) self.west_button = Button(self.control_frame, text="W", font=('arial', 20, 'bold'), bg='LightGrey', height = 1, width = 2) self.west_button.grid(row=1,column=0) self.east_button = Button(self.control_frame, text="E", font=('arial', 20, 'bold'), bg='LightGrey', height = 1, width = 2) self.east_button.grid(row=1,column=2) self.north_button = Button(self.control_frame, text="N", font=('arial', 20, 'bold'), bg='LightGrey', height = 1, width = 2) self.north_button.grid(row=2,column=1) self.stop_button = Button(self.control_frame, text="STOP", font=('arial',20, 'bold'), fg='White', bg='Red', activeforeground='Red', activebackground='White', command=super().stop_at_current_pos) self.stop_button.grid(row=3,column=0, columnspan=3, pady=10) #Radiobutton frame self.radiobutton_frame=Frame(master) self.radiobutton_frame.grid(row=1,column=2,pady=10) radiobutton_parameters=[('Slew',0,self.set_speed_max), ('Find',1, self.set_speed_find), ('Center',2, self.set_speed_center), ('Guide',3, self.set_speed_guide)] self.speed=StringVar() #Initialize speed to guiding speed self.speed.set('Guide') for keyword, position, execute in radiobutton_parameters: self.speed_radiobutton= Radiobutton(self.radiobutton_frame, text=keyword, variable=self.speed, value=keyword, command=execute, font=('arial', 10, 'bold')) self.speed_radiobutton.grid(row=position,column=0,sticky=W) #Options Frame self.options_frame=Frame(master) self.options_frame.grid(row=0,column=3,padx=20) self.sync_button = Button(self.options_frame, text="Synchronize \n with Target", font=('arial', 12, 'bold'), bg='LightGrey', command=self.sync_yes_no, state='disabled') self.sync_button.grid(row=0,column=0,padx=5) #Target Frame self.target_frame=LabelFrame(master, text='Select Target (apparent position)', font=('arial', 15)) self.target_frame.grid(row=1,rowspan=1,column=3,padx=20) self.HIP_label = Label(self.target_frame, font=('arial', 15), text="Hipparcos") self.HIP_label.grid(row=0,column=0) self.HIP_entry= Entry(self.target_frame, font=('arial', 15)) self.HIP_entry.grid(row=0, column=1,pady=10) self.target_ra_label = Label(self.target_frame, font=('arial', 15), text="RA \n [hh mm ss]") self.target_ra_label.grid(row=1,column=0) self.target_ra_entry= Entry(self.target_frame, font=('arial', 15)) self.target_ra_entry.grid(row=1, column=1,pady=10) self.target_dec_label = Label(self.target_frame, font=('arial', 15), text="""DEC \n [°° mm ss]""") self.target_dec_label.grid(row=2,column=0) self.target_dec_entry= Entry(self.target_frame, font=('arial', 15)) self.target_dec_entry.grid(row=2, column=1,pady=10) self.target_time_label= Label(self.target_frame, font=('arial', 15), text=" Obs \n Time") self.target_time_label.grid(row=0,column=2,padx=10) self.target_time_display=Label(self.target_frame, font=('arial', 15), bg='red', width=10) self.target_time_display.grid(row=0,column=3,pady=10) self.target_alt_label = Label(self.target_frame, font=('arial', 15), text="ALT") self.target_alt_label.grid(row=1,column=2,padx=10) self.target_alt_display= Label(self.target_frame, font=('arial', 15), bg='red', width=10) self.target_alt_display.grid(row=1, column=3,pady=10) self.target_az_label = Label(self.target_frame, font=('arial', 15), text="AZ") self.target_az_label.grid(row=2,column=2,padx=10) self.target_az_display= Label(self.target_frame, font=('arial', 15), bg='red', width=10) self.target_az_display.grid(row=2, column=3,pady=10) self.slew_target_button = Button(self.target_frame, text="Slew to Target", font=('arial', 15), bg='LightGrey', state='disabled', command=self.slew_to_target_buttonclick) self.slew_target_button.grid(row=3,columnspan=4) #Plot Frame self.plot_frame=Frame(master) self.plot_frame.grid(row=2,columnspan=4) #Add instance variables to store the plot and the different axes, #and positions globally self.canvas=False self.ax1=False self.star_plot=False self.traj_plot=False self.pos_plot=False self.ax2=False #At first check if serial connection is open (also contains initial commands) self._respond_to_connection_state() #Message box for Warning caution=("CAUTION: THIS IS A FIRST ATTEMPT TO CONTROL THE WALTZ TELESCOPE.\n"+ "BAD INPUTS OR CRASHES OF THE PROGRAM COULD BE HARMFUL TO THE TELESCOPE.\n"+ "DO NOT USE THIS PROGRAM ALONE AND ALWAYS PREPARE FOR STOPING MOVEMENTS "+ "OF THE TELESCOPE VIA THE EMERGENCY STOPS IN THE DOME!") messagebox.showwarning("Warning",message=caution,parent=master) def close_connection_buttonclick(self): """ Closes the connection to serial and responds properly to it """ #First check the connection state if self.connected==False: print('Connection already closed') return 0 #Close serial connection super().close_connection() #Check if connection is realy closed #this will set self.connected=False #Respond to closed connection self._respond_to_connection_state() def open_connection_buttonclick(self): """ Closes the connection to serial and responds properly to it """ #First check the connection state if self.connected==True: print('Connection already open') return 0 #Open serial connection super().open_connection() #Respond to open connection self._respond_to_connection_state() def _start_commands(self): """ Contains all functions to be executed at start of program. """ #Commands to be executed even without connection self.refresh_times() self.initialize_plot() #If connection is not open close program if not self.connected: return 0 #Commands for initial settings self.set_speed_guide() #This is the StringVar defining which initial setting the speed Radiobuttons have self.speed.set('Guide') #Commands to be executed all the time (if connection is open) self.display_coordinates() self.refresh_target_alt_az_ha() #Check for format of coordinates and toggle automatically #We always want format DEC=dd mm ss if len(self.dec)==7: super().toggle_precision() def _respond_to_connection_state(self): """ Checks connection to serial port. Print Warning if not and closes program. Enables and binds all buttons if connection is set. """ #If connection to Waltz is closed if not self.connected: #Disable all buttons self.disable_all_buttons() self.stop_button.config(state='disabled') #Message box if serial connection is not open caution=("Warning: No Connection to Waltz") messagebox.showwarning("Warning",message=caution,parent=self.master) #Start Commands #(it will take care that only the ones that do not use the serial connection are executed) self._start_commands() if self.connected: #Enable all buttons self.enable_all_buttons() #Start Commands self._start_commands() def refresh_times(self): """ Refreshs all times (LST, LT, UTC) Introduced to have only one function call in the background. Better to syn clocks """ #Refresh individual times self.refresh_LST() self.refresh_local_time() self.refresh_UTC() #Also refresh hour_angle synced to times because it will change in the same pace super().calculate_hour_angle() self.HA_display.config(text=self.ha) #Calls itself all 200 ms self.master.after(200, self.refresh_times) def refresh_local_time(self): """ Displays the current Central Eruopean Time on CET_display. Calls itself all 200ms to refresh time. """ # get the current local time from the PC local_time_now = time.strftime('%H:%M:%S') # if time string has changed, update it if local_time_now != self.CET: self.local_time = local_time_now self.local_time_display.config(text=self.local_time) def refresh_LST(self): """ Displays the current Local Sidereal Time on LST_display. Calls itself all 200ms to refresh time. """ super().get_LST() self.LST_display.config(text=self.LST) def refresh_UTC(self): """ Displays the current Coordinated Universal Time on UTC_display. Calls itself all 200 ms to refresh time. """ #Get current UTC from datetime UTC_now= datetime.datetime.utcnow() UTC_now=UTC_now.strftime("%H:%M:%S") #Check if UTC has changed since last call if UTC_now != self.UTC: #Save current UTC in self.UTC self.UTC = UTC_now #Display UTC self.UTC_display.config(text=self.UTC) def initialize_plot(self): """Refreshs Plot. """ #Close all plots for safety reasons #plt.close('all') (fig, self.ax1) = plot_traj_limits_altaz_GUI(False,False,False,False) self.canvas = FigureCanvasTkAgg(fig, master = self.plot_frame) self.canvas._tkcanvas.grid(row=0,column=0) self.plot_current_pos() def plot_current_pos(self): """Overplots current position. Plot needs to already exist. """ #First remove existing pos_plot (if it exists) if self.pos_plot: self.pos_plot.pop(0).remove() #Now add new pos_plot self.pos_plot=add_current_pos(self.ax1,self.ha_float,self.dec_float) self.canvas.draw() self.master.after(1000,self.plot_current_pos) def plot_star_and_traj(self): """Overplots star position and trajectory. Plot need to already exist. Will be called periodically with refresh_target_alt_az_ha. """ #First remove existing star_plot/traj_plot (if they exists) if self.star_plot: self.star_plot.pop(0).remove() self.traj_plot.pop(0).remove() self.ax2.remove() if not self.target_ra_float or not self.target_dec_float: return 0 #Now add new_star_plot (self.star_plot, self.traj_plot, self.ax2)=add_star_and_traj(self.ax1, self.target_ha_float, self.target_dec_float) self.canvas.draw() def display_coordinates(self): """ Displays Right ascension and Declination. Hour angle will be displayed synced to times. It should change at the same rate as LST. Look at refresh_times() """ #If connection is not open close program if not self.connected: return 0 self.get_coordinates() self.RA_display.config(text=self.ra) self.DEC_display.config(text=self.dec) if not self.connected: self._respond_to_connection_state() self.master.after(500,self.display_coordinates) def refresh_target_alt_az_ha(self,call_itself=True): """ Executes Lx200Commands.calculate_target_alt_az_ha every 500 ms. """ #Calculate target alt and az and obs time super().calculate_target_alt_az_ha() #Display alt, az and obs time self.target_alt_display.config(text=self.target_alt) self.target_az_display.config(text=self.target_az) self.target_time_display.config(text=self.target_obs_time) #Check coordinates to reply with correct colors if check_coordinates(self.target_alt_float, self.target_az_float): self.display_alt_az('light green') else: self.display_alt_az('red') #Update the plot self.plot_star_and_traj() #Optionally call itself if call_itself: self.master.after(5000,self.refresh_target_alt_az_ha) def interchange_west_east(self): """Interchanges West and East Buttons. """ #self.inter_WE.get() will return 1 if box is checked and 0 if not if self.inter_WE.get(): #Grid Positions if checkbutton is checked self.west_button.grid(row=1,column=2) self.east_button.grid(row=1,column=0) if not self.inter_WE.get(): #Grid Position in default state self.west_button.grid(row=1,column=0) self.east_button.grid(row=1,column=2) def interchange_north_south(self): """Interchanges North and South Buttons. """ #self.inter_WE.get() will return 1 if box is checked and 0 if not if self.inter_NS.get(): #Grid Positions if checkbutton is checked self.south_button.grid(row=2,column=1) self.north_button.grid(row=0,column=1) if not self.inter_NS.get(): #Grid Position in default state self.south_button.grid(row=0,column=1) self.north_button.grid(row=2,column=1) def start_move_west_buttonclick(self, event): """ Sends move west LX200 command to serial connection """ super().start_move_west() def stop_move_west_buttonclick(self, event): """ Sends stop move west LX200 command to serial connection """ super().stop_move_west() def start_move_north_buttonclick(self, event): super().start_move_north() def stop_move_north_buttonclick(self, event): super().stop_move_north() def start_move_south_buttonclick(self, event): super().start_move_south() def stop_move_south_buttonclick(self, event): super().stop_move_south() def start_move_east_buttonclick(self, event): super().start_move_east() def stop_move_east_buttonclick(self, event): super().stop_move_east() def slew_to_target_buttonclick(self): """Slews to target. Target must be set before via set_target_dec_from_string and set_target_ra_from_string """ super().set_target_coordinates() #Slew to target and wait for slew to finish super().slew_to_target() self.wait_for_slew_finish() #After slewing (and if something went wrong): #Set all valid_target entries to 0 (controller won't let you slew to #the same coordinates twice self.valid_target=[0,0] self.slew_target_button.config(state='disabled') #def continue_slew(self,initial_target_ra, initial_target_dec): """ Continues slewing after possible initial slew to medium position. Performs slewing if no slew to medium position is necessary. """ #Check if slew is finished. Default Value of slew_done=True, #so it will also be True if no slew to medium position was necessary.) #if self.slew_done: #Set the initial target coordinates as normal target coordinates again #super().set_target_ra_from_string(initial_target_ra) #super().set_target_dec_from_string(initial_target_dec) #Slew to target #super().slew_to_target() #Wait for the slew to finish (disables all buttons etc.) #self.wait_for_slew_finish() #else: #If previous slew is not finished the funcion will call itself every second. #self.master.after(1000, self.continue_slew, initial_target_ra, initial_target_dec) def park_telescope_buttonclick(self,counter=1,park=True): """Parks telescope and waits for slew to finish. counter counts if parking is executed the first or second time. park specifies if controller gets a parking command or if the function just waits until first slew has finished. """ #We need to call park telescope twice #because the tracking will change RA while DEC is still adjusting #Park telescope for the first time if counter==1: #If parking is activated if park: print('Slew to Park Position the first time') #Slew telescope to parking position super().park_telescope() self.refresh_target_alt_az_ha(call_itself=False) #Start waiting: Call wait_for_slew_finish with call_itself=False #So the funtion will just check if slew has finished if not self.wait_for_slew_finish(call_itself=False): #If slew has not yet finished print('Waiting for First Parking to finish') #Call the park funtion after 1 sec with counter=1 and slew=False #So it will be in counter=1 loop but will not send #a park command to the controller self.master.after(1000,self.park_telescope_buttonclick, 1,False) return 0 else: #If slewing has finished #Disable all buttons (need because it will otherwise wait #for one second until it disables again) self.disable_all_buttons() print('Finished First Parking') #Call park function again after 1 second but enter counter=2 loop #Also activate parking again with park=True #Useful to wait one second as safetiy that slewing has stopped self.master.after(1000,self.park_telescope_buttonclick, 2,True) return 0 #Second Parking loop if counter==2: if park: #If parking is activated print('Slew to Park Position the second time') #Slew telescope to parking position super().park_telescope() self.refresh_target_alt_az_ha(call_itself=False) #Wait again as above. But call counter=2 fpr second parking loop if not self.wait_for_slew_finish(call_itself=False): print('Waiting for Second Parking to finish') self.master.after(1000,self.park_telescope_buttonclick, 2,False) return 0 else: #When slewing is done print('Finished Second Parking') #Show message box to tell user to shut off the controller message=("Turn off the telescope controller to stop tracking"+ " and remain in park position!") messagebox.showinfo("Information",message=message,parent=self.master) return 0 def primary_mirror_pos_buttonclick(self): """Slew Telescope to Primary Mirror Cover Position. Uses LX200Commands primary_mirror_pos. """ super().primary_mirror_pos() self.refresh_target_alt_az_ha(call_itself=False) self.wait_for_slew_finish() def secondary_mirror_pos_buttonclick(self): """Slew Telescope to Secondary Mirror Cover Position. Uses LX200Commands secondary_mirror_pos. """ super().secondary_mirror_pos() self.refresh_target_alt_az_ha(call_itself=False) self.wait_for_slew_finish() def set_target_coordinates_gui(self): """ Calls set_target_coordinates() of Lx200Commands. Defines GUIs reaction to target_coordinates. """ #Call set_target_coordinates if not self.set_target_coordinates(): self.slew_target_button.config(state='disabled') self.display_alt_az('red') #Also plot target coordinates self.plot_star_and_traj() return 0 else: #Display target_alt and az self.slew_target_button.config(state='normal') self.display_alt_az('light green') #Also plot target coordinates self.plot_star_and_traj() def display_alt_az(self,color): """Displays alt and az with given color. Convenience function. """ self.target_alt_display.config(text=self.target_alt) self.target_alt_display.config(bg=color) self.target_az_display.config(text=self.target_az) self.target_az_display.config(bg=color) self.target_time_display.config(text=self.target_obs_time) self.target_time_display.config(bg=color) def set_hip_target_from_entry(self, event): """ Gets a HIP number from the HIP_entry widget and calculates the coordinates. Sets these coordinates as target_ra and target_dec and displays them in the corresponding entry widgets. """ hip_nr=self.HIP_entry.get() super().set_hip_target(hip_nr) self.target_ra_entry.delete(0, END) self.target_ra_entry.insert(0, self.target_ra) self.target_dec_entry.delete(0, END) self.target_dec_entry.insert(0, self.target_dec) self.set_target_coordinates_gui() def set_target_ra_from_entry(self, event): """ Gets a ra input from the target_ra_entry widget and sets it as target_ra. Accepted formats include hh mm ss and hh mm.t. Also tries to set set target dec from entry. Clears text of HIP_entry widget. """ #Delete hip entry self.HIP_entry.delete(0, END) #Get ra input and set as target_ra ra_input=self.target_ra_entry.get() super().set_target_ra_from_string(ra_input) self.target_ra_entry.delete(0, END) self.target_ra_entry.insert(0, self.target_ra) #Try to get dec entry also dec_input=self.target_dec_entry.get() #If dec entry is empty do not try to set target_dec if not dec_input=='': super().set_target_dec_from_string(dec_input) self.target_dec_entry.delete(0, END) self.target_dec_entry.insert(0, self.target_dec) self.set_target_coordinates_gui() def set_target_dec_from_entry(self, event): """ Gets a dec input from the target_dec_entry widget and sets it as target_ra. Accepted formats include dd mm ss and dd mm. Clears text of HIP_entry widget. """ #Delete hip entry #Get dec input and set as target_dec self.HIP_entry.delete(0, END) dec_input=self.target_dec_entry.get() super().set_target_dec_from_string(dec_input) self.target_dec_entry.delete(0, END) self.target_dec_entry.insert(0, self.target_dec) #Try to get ra entry also ra_input=self.target_ra_entry.get() #If ra entry is empty do not try to set target_ra if not ra_input=='': super().set_target_ra_from_string(ra_input) self.target_ra_entry.delete(0, END) self.target_ra_entry.insert(0, self.target_ra) self.set_target_coordinates_gui() def sync_yes_no(self): """Displays yes/no message if sync_button is clicked on. """ result=messagebox.askyesno("Synchroniziation", "Do you really want to synchronize coordinates with target coordinates?") if result: self.sync_on_target_buttonclick() def sync_on_target_buttonclick(self): """Gets target coordinates from entries. Synchronizes coordinates with target coordinates. In Case of Hipparcos target it will recalculate target coordinates at time of synchronization. """ hip_nr=self.HIP_entry.get() if hip_nr!='': super().sync_on_hip(hip_nr) self.target_ra_entry.delete(0, END) self.target_ra_entry.insert(0, self.target_ra) self.target_dec_entry.delete(0, END) self.target_dec_entry.insert(0, self.target_dec) else: #If no Hip target_ get coordinates from entries #Calling one entry is enough since always both entries are checked #None refers to no event (such as Return) self.set_target_ra_from_entry(None) if hip_nr=='' and self.target_ra and self.target_dec: super().sync_on_coordinates() else: print('No valid coordinates set. Synchronisation stopped') #After sync (and if something went wrong): #Set all valid_target entries to 0 (controller won't let you slew to #the same coordinates twice self.valid_target=[0,0] self.slew_target_button.config(state='disabled') def wait_for_slew_finish(self,call_itself=True): """Waits until coordinates equal target coordinates within tolerance. Disables all (except STOP) buttons until target coordinates are reached. call_itself determines if funtion will call itself after 1 second. This is very useful to set to False if you want to call waiting from different function that should pause until waiting is over. Can be stopped by stop_waiting. """ #Disable all buttons self.disable_all_buttons() #Check if slew has finished or self.stop_waiting parameter=True #Enable buttons if so. #self.stop_waiting parameter can be set by button in menubar #Then break the loop if super().slew_finished(): #Enable all buttons again self.enable_all_buttons() return True else: #If variable call_itself is true #Calls itself after 1 second. #After call is asigned to global variable waiting #to stop it via stop_waiting. if call_itself: global waiting waiting=self.master.after(1000,self.wait_for_slew_finish) return False def stop_waiting(self): """Stops Waiting for slew to finish and enables all buttons. Can be called in the menu. """ #First disable all buttons to avoid binding events more than once. self.disable_all_buttons() #Enable all buttons self.enable_all_buttons() #And try to stop waiting if waiting is going on. try: self.master.after_cancel(waiting) except NameError: return 0 def delete_entries(self,event): """ Deletes entries of target_ra and target_dec. Used when entering new Hipparcos Number. """ self.target_ra_entry.delete(0,END) self.target_dec_entry.delete(0,END) def disable_all_buttons(self): """ Disables all buttons and unbinds all bindings. Except of Stop Button """ #Disable all buttons #We also need to unbind the buttons which are called by events instead of commands for child in self.control_frame.winfo_children(): child.config(state='disabled') child.unbind("<ButtonPress-1>") child.unbind("<ButtonRelease-1>") #Enable Stop Button again. It should always be enabled. self.stop_button.config(state='normal') #Disable and unbind entry widgets in target_frame for child in self.target_frame.winfo_children(): child.config(state='disabled') child.unbind("<Return>") child.unbind("<Tab>") self.sync_button.config(state='disabled') #Radiobuttons for child in self.radiobutton_frame.winfo_children(): child.config(state='disabled') def enable_all_buttons(self): """ Enables all buttons and binds all bindings. Except of Stop Button. All bindings are defined here, except of commands of buttons. """ #Disable all buttons #We also need to bind the buttons which are called by events instead of commands for child in self.control_frame.winfo_children(): child.config(state='normal') #Add the bindings manually self.north_button.bind("<ButtonPress-1>",self.start_move_north_buttonclick) self.north_button.bind("<ButtonRelease-1>",self.stop_move_north_buttonclick) self.west_button.bind("<ButtonPress-1>",self.start_move_west_buttonclick) self.west_button.bind("<ButtonRelease-1>",self.stop_move_west_buttonclick) self.south_button.bind("<ButtonPress-1>",self.start_move_south_buttonclick) self.south_button.bind("<ButtonRelease-1>",self.stop_move_south_buttonclick) self.east_button.bind("<ButtonPress-1>",self.start_move_east_buttonclick) self.east_button.bind("<ButtonRelease-1>",self.stop_move_east_buttonclick) self.sync_button.config(state='normal') #Enable and bind entry widgets in target_frame for child in self.target_frame.winfo_children(): child.config(state='normal') #Do not enable slew button self.slew_target_button.config(state='disabled') #Add the bindings manually #When entering any new number or char (also when deleting), #the entries of target_ra and target_dec should be deleted #Important to bind Return and Tab after this first binding to override this functionality #Otherwise it would also just delete the entries self.HIP_entry.bind("<Key>", self.delete_entries,add='+') self.HIP_entry.bind("<Return>", self.set_hip_target_from_entry, add="+") self.HIP_entry.bind("<Tab>", self.set_hip_target_from_entry, add="+") self.target_ra_entry.bind("<Return>", self.set_target_ra_from_entry, add="+") self.target_ra_entry.bind("<Tab>", self.set_target_ra_from_entry,add="+") self.target_dec_entry.bind("<Return>", self.set_target_dec_from_entry, add="+") self.target_dec_entry.bind("<Tab>", self.set_target_dec_from_entry, add="+") #Radiobuttons for child in self.radiobutton_frame.winfo_children(): child.config(state='normal') def save_pointing_star(self): """ Saves Pointings Stars Information to file. Takes Hipparcos Number, RA, DEC LST and Date and saves to file. Also Saves Hipparcos Number, RA, DEC, HA, target_ra, target_dec, LST, UTC and Date to second file. This could lead to potentially new system of pointing_star data. This could be easier to handle. Not done yet. """ ### Traditional File ### try: hipparcos=self.HIP_entry.get() #Need integer to catch errors and for formatting hipparcos=int(hipparcos) #Format Hipparcos Number to 000123 hip_pointing="{:06d}".format(hipparcos) except ValueError: print('Invalid Hiparcos number') return 0 #Format RA to hh mm ss (RA_hours,h,rest)=self.ra.partition('h') (RA_min,m,rest)=rest.partition('m') (RA_sec,s,rest)=rest.partition('s') RA_pointing="{} {} {}".format(RA_hours, RA_min, RA_sec) #Format DEC to +dd mm ss (DEC_deg,grad,rest)=self.dec.partition('°') (DEC_min,m,rest)=rest.partition("'") (DEC_sec,s,rest)=rest.partition('"') DEC_pointing="{} {} {}".format(DEC_deg, DEC_min, DEC_sec) #Format LST to hh mm ss (LST_hours,h,rest)=self.LST.partition(':') (LST_min,m,rest)=rest.partition(':') (LST_sec,s,rest)=rest.partition(':') LST_pointing="{} {} {}".format(LST_hours, LST_min, LST_sec) #Get Date in Format dd.mm.yyyy (using locale module) today = datetime.date.today() Date_pointing=today.strftime('%d.%m.%Y') line="{} {} {} {} {}\n".format(hip_pointing, RA_pointing, DEC_pointing, LST_pointing, Date_pointing) #Filename and path using pathlib module #File is in parrent_directory/pointing_stars/pointings_stars.txt current_path=pathlib.Path.cwd() parrent_path=current_path.parent file_path=parrent_path / 'pointing_stars' / 'pointing_stars.txt' #With automatically closes the file in the end with open(str(file_path), 'a') as ps_file: print('Saving pointing star to (old format) file') ps_file.write(line) ### New Format File ### #Format HA to hh mm ss (HA_hours,h,rest)=self.ha.partition('h') (HA_min,m,rest)=rest.partition('m') (HA_sec,s,rest)=rest.partition('s') HA_pointing="{} {} {}".format(HA_hours, HA_min, HA_sec) line=("{} {} {} {} {} {} {} {} {}" " {} {} {} {} {} {}\n") line=line.format(hip_pointing, RA_pointing, self.ra_float, DEC_pointing, self.dec_float, HA_pointing, self.ha_float, self.target_ra, self.target_ra_float, self.target_dec, self.target_dec_float, self.target_ha_float, self.LST, self.UTC, Date_pointing) #Filename and path using pathlib module #File is in parrent_directory/pointing_stars/pointings_stars_new_format.txt current_path=pathlib.Path.cwd() parrent_path=current_path.parent file_path=parrent_path / 'pointing_stars' / 'pointing_stars_new_format.txt' #With automatically closes the file in the end with open(str(file_path), 'a') as ps_file: print('Saving pointing star to (new format) file') ps_file.write(line)
class Application(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.ranking = [] ## Define os três frames existentes na janela principal ## A janela principal foi dividida em 3 frames (esquerda, central e direita) self.leftframe = Frame(self) self.leftframe.grid(row=0, column=0, stick=Tk.NS + Tk.E) self.centerframe = Frame(self) self.centerframe.grid(row=0, column=1, stick=Tk.NS) self.rightframe = Frame(self) self.rightframe.grid(row=0, column=2, stick=Tk.NS + Tk.W) # Inicializei as instancias aqui porque senão self.botaoSelecionaEntrada\ # não existe quando da criação dos botoes do frame esquerdo # container 1 - contem os objetos para leitura de arquivo # container 2 - contem os objetos para entrada de dados manual # container 3 - contem os objetos para escolha aleatoria dos rankings self.container1 = LabelFrame(self.centerframe, text="Escolha o arquivo", padx=5, pady=5) self.container2 = LabelFrame(self.centerframe, text="Entrada de dados", padx=5, pady=5) self.container3 = LabelFrame(self.centerframe, text="Escolha aleatória", padx=5, pady=5) ### #### Monta frame esquerdo #### Frame dos botões ### lblframe = LabelFrame(self.leftframe, text="Selecione entrada", padx=5, pady=5) lblframe.grid(row=0, column=0) button1 = Button(lblframe, text="Arquivo", width=20, command=lambda: self.botaoSelecionaEntrada(1)) button1.grid(row=0, column=0) button2 = Button(lblframe, text="Manual", width=20, command=lambda: self.botaoSelecionaEntrada(2)) button2.grid(row=1, column=0) button3 = Button(lblframe, text="Aleatório", width=20, command=lambda: self.botaoSelecionaEntrada(3)) button3.grid(row=2, column=0) lblframe = LabelFrame(self.leftframe, text="Calculadora", padx=5, pady=5) lblframe.grid(row=3, column=0, pady=20) button1 = Button(lblframe, text="Calculadora", width=20, command=lambda: self.Calculadora()) button1.grid(row=0, column=0) button2 = Button(lblframe, text="Reset", width=20, command=lambda: self.resetDisplayResults()) button2.grid(row=1, column=0) ### ### Monta Frame central ### ### O Frame central contém 3 "containers" que serão ligados e desligados em tempo ### de execução através dos botões existentes no frame esquerdo ### ##Entrada através de arquivo ## self.mySelectionF = Tk.StringVar() labelvalue = self.mySelectionF self.container1.grid(row=0, column=0) buttonFile = Tk.Button(self.container1, text='Ler arquivo', width=10, command=self.askopenfilename) buttonFile.grid(row=0, column=0, sticky='N') self.displayRanking1() ### Desliga objeto do frame da tela self.container1.isgridded = True #self.container1.grid_forget() # # Entrada manual # #### DESISTI DE FAZER ASSIM SE DER TEMPO VOLTO A FAZER SENAO #### FAÇO DEPOIS DA ENTRAGA DA AD #### #self.mySelection = Tk.StringVar() #labelvalue = self.mySelection #self.container2 = LabelFrame(self.centerframe, text="Entrada de dados", padx=5, pady=5) ## Foi criado la em cima #self.container2.grid(row=0, column=0) # label com nome do ranking #self.label = Label(self.container2, text=labelvalue) #self.label.grid(row=0,column=1) # campo de entrada #entryA = Entry(self.container2,width=6) #criamos o campo de texto #entryA.grid(column=0,row=1,sticky='EW'+'S') # Botao #button4 = Tk.Button(self.container2, text = '->', width = 10) #button4.grid( row=2,column=0,sticky='EW'+'N') #Combobox #self.comboboxM = ttk.Combobox(self.container2, width= 15, state="readonly", textvariable = self.mySelection) #self.comboboxM["values"] = ("Ranking 1", "Ranking 2") #self.comboboxM.grid(row=0, column=0) #self.comboboxM.bind("<<ComboboxSelected>>", self.callbackFunc) #ListBox #value=["one", "two", "three", "four", "five", "six", "seven","eight","nine","ten","eleven","twelve"] ### Somente para teste #value = [] #self.listbox = Listbox(self.container2,selectmode=Tk.SINGLE) #scrollbar = Tk.Scrollbar(self.container2, orient=Tk.VERTICAL) #self.listbox.config( yscrollcommand=scrollbar.set) #scrollbar.configure(command=self.listbox.yview) #scrollbar.config(command=self.listbox.yview) #self.listbox.insert(Tk.END, None) #for item in value: # self.listbox.insert(Tk.END, item) #self.listbox.grid(row=1, column=1,stick=Tk.W) #scrollbar.grid(row=1,column=2,stick=Tk.NS+Tk.W) ### Aqui resolvi fazer assim, senão não ia dar tempo para fazer do jeito que eu queria ### Caminho mais fácil, senão nao consigo fazer os testes se é que vou conseguir self.container2.grid(row=0, column=0) self.v1 = Tk.IntVar(value=1) #self.v1 = Tk.StringVar(value="1") self.v1.set(1) self.v2 = Tk.IntVar(value=1) #self.v2 = Tk.StringVar(value="1") self.v2.set(1) self.displayEntradaManual() #self.label = Label(self.container2, text="Escolha o tipo de entrada") #self.label.grid(row=0,column=0, columnspan=2) #self.rb1 = Tk.Radiobutton(self.container2, text="Ranking", variable=self.v1, value=1,state=Tk.ACTIVE,indicatoron=1) #self.rb1.grid(row=1,column=0) #self.rb2 = Tk.Radiobutton(self.container2, text="Score", variable=self.v1, value=2,state=Tk.ACTIVE,indicatoron=1) #self.rb2.grid(row=1,column=1) #self.label = Label(self.container2, text="Ranking / Score 1") #self.label.grid(row=2,column=0) #self.entryM1 = Entry(self.container2,width=30) #criamos o campo de texto #self.entryM1.grid(row=3,column=0,sticky='EW'+'S',columnspan=2) #self.rb3 = Tk.Radiobutton(self.container2, text="Ranking", variable=self.v2, value=1,state=Tk.ACTIVE,indicatoron=1) #self.rb3.grid(row=4,column=0) #self.rb4 = Tk.Radiobutton(self.container2, text="Score", variable=self.v2, value=2,state=Tk.ACTIVE,indicatoron=1) #self.rb4.grid(row=4,column=1) #self.label = Label(self.container2, text="Ranking / Score 2") #self.label.grid(row=5,column=0) #self.entryM2 = Entry(self.container2,width=30) #criamos o campo de texto #self.entryM2.grid(row=6,column=0,sticky='EW'+'S',columnspan=2) self.container2.isgridded = False self.container2.grid_forget() ##entrada aleatoria #self.container3 = LabelFrame(self.centerframe, text="Entrada de dados", padx=5, pady=5) self.mySelectionA = Tk.StringVar() self.container3.grid(row=0, column=0) self.container3A = LabelFrame(self.container3, text="Define tamanho", padx=5, pady=5) self.container3A.grid(row=0, column=0) # label com nome do ranking self.label = Label(self.container3A, text='Selecione o tamanho dos rankings') self.label.grid(row=0, column=0, sticky="S") self.entryB = Entry(self.container3A, width=6) #criamos o campo de texto self.entryB.grid(row=1, column=0, sticky='EW' + 'S') button5 = Tk.Button(self.container3A, text='Gerar', width=10, command=self.gerarRankingAleatorio) button5.grid(row=2, column=0, sticky='EW' + 'N') self.displayRanking() #self.container3B = LabelFrame(self.container3,text="Visualiza RANKINGs", padx=5, pady=5) #self.container3B.grid(row=0, column=1) self.container3.isgridded = False self.container3.grid_forget() ####self.container3B = LabelFrame(self.container3, text="Visualiza RANKINGs", padx=5, pady=5) ####self.container3B.grid(row=0, column=1) ####self.comboboxA = ttk.Combobox(self.container3B, width= 15, state="readonly", textvariable = self.mySelectionA) ####self.comboboxA["values"] = ("Ranking 1", "Ranking 2") ####self.comboboxA.grid(row=0, column=1) ####self.comboboxA.bind("<<ComboboxSelected>>", self.callbackRandom) #value=["one", "two", "three", "four", "five", "six", "seven","eight","nine","ten","eleven","twelve"] ### Somente para teste ####value = [] ####self.listbox = Listbox(self.container3B,selectmode=Tk.SINGLE) ####scrollbar = Tk.Scrollbar(self.container3B, orient=Tk.VERTICAL) ####self.listbox.config( yscrollcommand=scrollbar.set) ####scrollbar.configure(command=self.listbox.yview) ####scrollbar.config(command=self.listbox.yview) ####self.listbox.insert(Tk.END, None) ####for item in value: #### self.listbox.insert(Tk.END, item) ####self.listbox.grid(row=1, column=1,stick=Tk.W) ####scrollbar.grid(row=1,column=2,stick=Tk.NS+Tk.W) ####self.container3.isgridded = False ####self.container3.grid_forget() ### #### Monta frame direito ### self.lblframe = LabelFrame(self.rightframe, text="RESULTADOS", padx=5, pady=5) self.lblframe.grid(row=0, column=0) self.label = Label(self.lblframe, text="Kemeny = ") self.label.grid(row=0, column=0, sticky=Tk.W) result = str(0) self.labelkemeny = Label(self.lblframe, text=result) self.labelkemeny.grid(row=0, column=1) self.label = Label(self.lblframe, text="Footrule = ") self.label.grid(row=1, column=0, sticky=Tk.W) self.labelfootrule = Label(self.lblframe, text=result) self.labelfootrule.grid(row=1, column=1) self.label = Label(self.lblframe, text="*** Inversões ***") self.label.grid(row=2, column=0) self.label = Label(self.lblframe, text="Inversões Ranking 1 = ") self.label.grid(row=3, column=0, sticky=Tk.W) self.label = Label(self.lblframe, text="Inversões Ranking 2 = ") self.label.grid(row=4, column=0, sticky=Tk.W) self.labelinv1 = Label(self.lblframe, text=result) self.labelinv1.grid(row=3, column=1) self.labelinv2 = Label(self.lblframe, text=result) self.labelinv2.grid(row=4, column=1) self.bye = Button(self.rightframe, text="Bye Bye", command=self.quit) self.bye.grid(row=5, column=0) self.pack() # Monta radiobutton no frame central container 2 def displayEntradaManual(self): """@ Show RadioButton on container2 in Application Class @example self.displayEntradaManual() """ self.label = Label(self.container2, text="Escolha o tipo de entrada") self.label.grid(row=0, column=0, columnspan=2) self.rb1 = Tk.Radiobutton(self.container2, text="Ranking", variable=self.v1, value=1, state=Tk.ACTIVE, indicatoron=1) self.rb1.grid(row=1, column=0) self.rb2 = Tk.Radiobutton(self.container2, text="Score", variable=self.v1, value=2, state=Tk.ACTIVE, indicatoron=1) self.rb2.grid(row=1, column=1) self.label = Label(self.container2, text="Ranking / Score 1") self.label.grid(row=2, column=0) self.entryM1 = Entry(self.container2, width=30) #criamos o campo de texto self.entryM1.grid(row=3, column=0, sticky='EW' + 'S', columnspan=2) self.rb3 = Tk.Radiobutton(self.container2, text="Ranking", variable=self.v2, value=1, state=Tk.ACTIVE, indicatoron=1) self.rb3.grid(row=4, column=0) self.rb4 = Tk.Radiobutton(self.container2, text="Score", variable=self.v2, value=2, state=Tk.ACTIVE, indicatoron=1) self.rb4.grid(row=4, column=1) self.label = Label(self.container2, text="Ranking / Score 2") self.label.grid(row=5, column=0) self.entryM2 = Entry(self.container2, width=30) #criamos o campo de texto self.entryM2.grid(row=6, column=0, sticky='EW' + 'S', columnspan=2) self.label = Label(self.container2, text="Formato da entrada(ranking): 5 4 3 2 1") self.label.grid(row=7, column=0, sticky='W') self.label = Label( self.container2, text="Formato da entrada(score): 0.65 0.32 0.62 0.23 0.34") self.label.grid(row=8, column=0, sticky='W') self.container2.isgridded = False self.container2.grid_forget() # Reset nos valores do frame direito def resetDisplayResults(self): """@ Reset values kemeny, footrule and Inversions and clean labels @example self.resetDisplayResults() """ del self.ranking[:] result = str(0) self.labelkemeny = Label(self.lblframe, text=result) self.labelkemeny.grid(row=0, column=1) self.labelfootrule = Label(self.lblframe, text=result) self.labelfootrule.grid(row=1, column=1) self.labelinv1 = Label(self.lblframe, text=result) self.labelinv1.grid(row=3, column=1) self.labelinv2 = Label(self.lblframe, text=result) self.labelinv2.grid(row=4, column=1) if self.buttonClick == 1: self.displayRanking1() if self.buttonClick == 2: self.entryM1.delete(0, 'end') #limpamos o campo de texto self.entryM1.grid(row=3, column=0, sticky='EW' + 'S', columnspan=2) self.entryM2.delete(0, 'end') #limpamos o campo de texto self.entryM2.grid(row=6, column=0, sticky='EW' + 'S', columnspan=2) if self.buttonClick == 3: self.displayRanking() messagebox.showinfo("Mensagem", "Kemeny, footrule e inversões zeradas!") # Metodo que retorna um evento de selecao def displayRanking(self): """@ Show combobox on screen @example self.displayRanking() """ self.container3B = LabelFrame(self.container3, text="Visualiza RANKINGs", padx=5, pady=5) self.container3B.grid(row=0, column=1) self.comboboxA = ttk.Combobox(self.container3B, width=15, state="readonly", textvariable=self.mySelectionA) self.comboboxA["values"] = ("Ranking 1", "Ranking 2") self.comboboxA.grid(row=0, column=1) self.comboboxA.bind("<<ComboboxSelected>>", self.callbackRandom) #value=["one", "two", "three", "four", "five", "six", "seven","eight","nine","ten","eleven","twelve"] ### Somente para teste self.displayRankingListbox() #####value = [] #####self.listbox = Listbox(self.container3B,selectmode=Tk.SINGLE) #####scrollbar = Tk.Scrollbar(self, orient=Tk.VERTICAL) #####self.listbox.config( yscrollcommand=scrollbar.set) #####scrollbar.configure(command=self.listbox.yview) #####scrollbar.config(command=self.listbox.yview) #####self.listbox.insert(Tk.END, None) #####for item in value: ##### self.listbox.insert(Tk.END, item) #####self.listbox.grid(row=1, column=1,stick=Tk.W) #####scrollbar.grid(row=1,column=2,stick=Tk.NS+Tk.W) #self.container3B = LabelFrame(self.container3B,text="Visualiza RANKINGs", padx=5, pady=5) #self.container3B.grid(row=0, column=1) def displayRankingListbox(self, value=[]): """@note show Ranking on display @param[in] a list @example self.displayRankingListbox([1 2 3 4 5]) """ self.value = value self.listbox = Listbox(self.container3B, selectmode=Tk.SINGLE) scrollbar = Tk.Scrollbar(self.container3B, orient=Tk.VERTICAL) self.listbox.config(yscrollcommand=scrollbar.set) scrollbar.configure(command=self.listbox.yview) scrollbar.config(command=self.listbox.yview) self.listbox.insert(Tk.END, None) for item in value: self.listbox.insert(Tk.END, item) self.listbox.grid(row=1, column=1, stick=Tk.W) scrollbar.grid(row=1, column=2, stick=Tk.NS + Tk.W) ## Segui o Caminho mais fácil ## Dupliquei displayRanking e alterei o container apenas ## Não é o correto, mas não está errado, se sobrar tempo faço da forma correta def displayRanking1(self): """@ Show combobox on screen @example self.displayRanking1() """ self.container1B = LabelFrame(self.container1, text="Visualiza RANKINGs", padx=5, pady=5) self.container1B.grid(row=0, column=1) self.comboboxF = ttk.Combobox(self.container1B, width=15, state="readonly", textvariable=self.mySelectionF) self.comboboxF["values"] = ("Ranking 1", "Ranking 2") self.comboboxF.grid(row=0, column=1) self.comboboxF.bind("<<ComboboxSelected>>", self.callbackRandom) #value=["one", "two", "three", "four", "five", "six", "seven","eight","nine","ten","eleven","twelve"] ### Somente para teste self.displayRankingListbox1() ''' value = [] self.listbox = Listbox(self.container3B,selectmode=Tk.SINGLE) scrollbar = Tk.Scrollbar(self, orient=Tk.VERTICAL) self.listbox.config( yscrollcommand=scrollbar.set) scrollbar.configure(command=self.listbox.yview) scrollbar.config(command=self.listbox.yview) self.listbox.insert(Tk.END, None) for item in value: self.listbox.insert(Tk.END, item) self.listbox.grid(row=1, column=1,stick=Tk.W) scrollbar.grid(row=1,column=2,stick=Tk.NS+Tk.W) ''' #self.container3B = LabelFrame(self.container3B,text="Visualiza RANKINGs", padx=5, pady=5) #self.container3B.grid(row=0, column=1) def displayRankingListbox1(self, value=[]): """@note show Ranking on display @param[in] a list @example self.displayRankingListbox([1 2 3 4 5]) """ self.value = value self.listbox = Listbox(self.container1B, selectmode=Tk.SINGLE) scrollbar = Tk.Scrollbar(self.container1B, orient=Tk.VERTICAL) self.listbox.config(yscrollcommand=scrollbar.set) scrollbar.configure(command=self.listbox.yview) scrollbar.config(command=self.listbox.yview) self.listbox.insert(Tk.END, None) for item in value: self.listbox.insert(Tk.END, item) self.listbox.grid(row=1, column=1, stick=Tk.W) scrollbar.grid(row=1, column=2, stick=Tk.NS + Tk.W) # # Gera dois rankings Aleatórios a partir de um inteiro # os rankings sao colocados em um vetor self.ranking def gerarRankingAleatorio(self): """@note Build a random Ranking and show on display @example self.gerarRankingAleatorio() """ self.resetDisplayResults() try: value = int(self.entryB.get()) except ValueError: messagebox.showinfo("ERRO!", "Informar o tamanho do ranking a ser gerado!") return #choice = self.mySelectionA.get() ### Não precisei a selecao acontece em displayrankinglistbox #index = self.comboboxA.current() ### nao precisei a selecao acontece em displayrankinglistbox if value < 1: messagebox.showinfo("Title", "Valor inválido ( " + value + " )") else: del self.ranking[:] for _ in range(2): self.ranking.append(Ranking(value)) messagebox.showinfo("Title", "Rankings 1 e 2 gerados") self.comboboxA.current(0) self.displayRankingListbox(getattr(self.ranking[0], 'ranking')) #self.resetDisplayResults() #def callbackFunc(self, event): # select = self.mySelection.get() # self.labelvalue = select # self.label = Label(self.container2, text=self.labelvalue) # self.label.grid(row=0,column=1) # print(select) def callbackRandom(self, event): """@note auxiliary method to gerarRankingAleatorio @example self.callbackRandom() """ #select = self.mySelection.get() try: #_ = self.ranking[0] #_ = getattr(self.ranking[0],"ranking") index = self.comboboxA.current() array = getattr(self.ranking[index], 'ranking') self.listbox.delete(0, Tk.END) self.listbox.insert(Tk.END, None) for item in array: self.listbox.insert(Tk.END, item) self.listbox.grid(row=1, column=1, stick=Tk.W) except IndexError: messagebox.showinfo("ERRO!", "Não existem Rankings gerados!") return def askopenfilename(self): """@note Open ranking file @example self.askopenfilename() """ filepath = askopenfilename() if filepath: #self.container1.filepaths.append(filepath) with open(filepath, "r+") as f: del self.ranking[:] for line in f: value = line.replace("\n", "").replace( "\r", "") # do something with the line try: value = literal_eval(value) except SyntaxError: messagebox.showinfo("ERRO!", "Arquivo incompatível!") return else: if type(value) is int: del self.ranking[:] for _ in range(2): self.ranking.append(Ranking(value)) messagebox.showinfo("Title", "Rankings 1 e 2 gerados") elif type(value) is list: self.ranking.append(Ranking(value)) elif type(value) is tuple: self.ranking.append(Ranking(value)) #for line in inputfile.readline(): ## line = line.replace("\n", "").replace("\r", "") # print(line) # #value = literal_eval(line) # #print(type(value)) self.comboboxF.current(0) self.displayRankingListbox1(getattr(self.ranking[0], 'ranking')) f.close() def botaoSelecionaEntrada(self, value): """@note Build a rank from tuple. @param[in] integer @example self.botaoSelecionaEntrada(1) """ self.buttonClick = value print("Called" + str(self.value)) self.container1.isgridded = False self.container1.grid_forget() self.container2.isgridded = False self.container2.grid_forget() self.container3.isgridded = False self.container3.grid_forget() if self.buttonClick == 1: self.container1.isgridded = True self.container1.grid(row=0, column=0) if self.buttonClick == 2: # Ativa radiobutton do ranking / score (nao esta ativando) self.v1.set(1) self.v2.set(1) # Liga container 2 self.displayEntradaManual() self.container2.isgridded = True self.container2.grid(row=0, column=0) if self.buttonClick == 3: self.container3.isgridded = True self.container3.grid(row=0, column=0) def checkType(self, lista): """@note Verify there are only digits from list @param[in] list @return Boolean @example self.checkType([1, 3, 4, 2]) """ for x in lista: if type(x) is str: return False return True def Calculadora(self): """@note Method to activate auxiliaries methods to show results @example self.Calculadora() """ try: if self.buttonClick == 1: #value1 = self.entryM1.get().split() #value2 = self.entryM2.get().split() #print("Valor 1", value1, "Valor 2",value2) #del self.ranking[:] # Adiciona a entrada 1 ao vetor self.ranking #if int(self.v1.get()) == 1: # self.ranking.append(Ranking(value1)) #else: # self.ranking.append(Ranking(tuple(value1))) # Adiciona a entrada 2 ao vetor self.ranking #if int(self.v2.get()) == 1: # self.ranking.append(Ranking(value2)) #else: # self.ranking.append(Ranking(tuple(value2))) try: #_ = self.ranking[0] _ = getattr(self.ranking[0], "ranking") except IndexError: messagebox.showinfo("ERRO!", "Não existem Rankings gerados!") return self.showKemeny() self.showFootrule() self.showInvert() print(getattr(self.ranking[0], 'ranking')) print(getattr(self.ranking[1], 'ranking')) if self.buttonClick == 2: value1 = self.entryM1.get().split() value2 = self.entryM2.get().split() print("Valor 1", value1, "Valor 2", value2) if self.checkType(value1) and self.checkType(value2) or\ not (len(value1)) or any(d is None for d in value1) or value1 is None or\ not (len(value2)) or any(d is None for d in value2) or value2 is None or\ len(value1) != len(set(value1)) or len(value2) != len(set(value2)) or\ len(set(value1)) != len(set(value2)): messagebox.showinfo( "ERRO!", "Erro na entrada de dados - Ranking inválido!") else: del self.ranking[:] # Adiciona a entrada 1 ao vetor self.ranking if int(self.v1.get()) == 1: self.ranking.append(Ranking(tuple(value1))) else: self.ranking.append(Ranking(value1)) # Adiciona a entrada 2 ao vetor self.ranking if int(self.v2.get()) == 1: self.ranking.append(Ranking(tuple(value2))) else: self.ranking.append(Ranking(value2)) self.showKemeny() self.showFootrule() self.showInvert() #print(getattr(self.ranking[0],'ranking')) #print(getattr(self.ranking[1],'ranking')) if self.buttonClick == 3: try: _ = getattr(self.ranking[0], "ranking") except (IndexError, AttributeError): messagebox.showinfo("Title", "Não existem Rankings gerados!") else: # print(len(getattr(self.ranking,"ranking"))) self.showKemeny() self.showFootrule() self.showInvert() except AttributeError: messagebox.showinfo("ERRO!", "Não existem valores a ser calculados!") return def showKemeny(self): """@note Calculate Kemeny distance from Ranking Class than show on screen @example self.showKemeny() """ value1 = Ranking(getattr(self.ranking[0], 'ranking')) value2 = Ranking(getattr(self.ranking[1], 'ranking')) print(value1, value2) result = value1.kDist(value2) self.labelkemeny = Label(self.lblframe, text=result) self.labelkemeny.grid(row=0, column=1) def showFootrule(self): """@note Calculate Footrule distance from Ranking Class than show on screen @example self.showFootrule() """ value1 = Ranking(getattr(self.ranking[0], 'ranking')) value2 = Ranking(getattr(self.ranking[1], 'ranking')) print(value1, value2) result = value1.fDist(value2) self.labelfootrule = Label(self.lblframe, text=result) self.labelfootrule.grid(row=1, column=1) def showInvert(self): """@note Calculate inversions from Ranking Class than show on screen @example self.showInvert() """ value1 = Ranking(getattr(self.ranking[0], 'ranking')) value2 = Ranking(getattr(self.ranking[1], 'ranking')) print(value1, value2) result = value1.invCount() self.labelinv1 = Label(self.lblframe, text=result) self.labelinv1.grid(row=3, column=1) result = value2.invCount() self.labelinv2 = Label(self.lblframe, text=result) self.labelinv2.grid(row=4, column=1)
class addexpense: def __init__(self): self.window = Tk() self.mainframe = Frame(self.window) self.instructionL = Label(self.mainframe, text="Please fill in the fields\nwith appropriate values. ") self.dateL = Label(self.mainframe, text="Date: ") self.electricityL = Label(self.mainframe, text="Electricity: ") self.gasL = Label(self.mainframe, text="Gas: ") self.waterL = Label(self.mainframe, text="Water: ") self.salaryL = Label(self.mainframe, text="Salary: ") self.rentL = Label(self.mainframe, text="Rent: ") self.costofgoodL = Label(self.mainframe, text="Cost of Goods: ") self.dateI = Entry(self.mainframe) self.electricityI = Entry(self.mainframe) self.gasI = Entry(self.mainframe) self.waterI = Entry(self.mainframe) self.salaryI = Entry(self.mainframe) self.rentI = Entry(self.mainframe) self.costofgoodI = Entry(self.mainframe) self.okayB = Button(self.mainframe, text="OKAY") self.cancelB = Button(self.mainframe, text="CANCEL", command=self.cancel) self.mainframe.grid(row = 0, column = 0, columnspan = 2, sticky = W + E + N +S) self.mainframe.propagate(0) self.instructionL.grid(row = 0, column = 0, columnspan = 2) self.dateL.grid(row = 1, column = 0) self.electricityL.grid(row = 2, column = 0) self.gasL.grid(row = 3, column = 0) self.waterL.grid(row = 4, column = 0) self.salaryL.grid(row = 5, column = 0) self.rentL.grid(row = 6, column = 0) self.costofgoodL.grid(row = 7, column = 0) self.dateI.grid(row=1, column=1) self.electricityI.grid(row=2, column=1) self.gasI.grid(row=3, column=1) self.waterI.grid(row=4, column=1) self.salaryI.grid(row=5, column=1) self.rentI.grid(row=6, column=1) self.costofgoodI.grid(row=7, column=1) self.okayB.grid(row = 8, column = 0) self.okayB.bind("<Button-1>", self.okayE) self.cancelB.grid(row = 8, column = 1) def cancel(self): self.window.destroy() # Date, Electricity, Gas, Water, Salary, Rent, CostofGood def okayE(self, event): info = [] date = self.dateI.get() electricity = self.electricityI.get() gas=self.gasI.get() water=self.waterI.get() salary=self.salaryI.get() rent=self.rentI.get() costofgood=self.costofgoodI.get() try: info.append(date) info.append(electricity) info.append(gas) info.append(water) info.append(salary) info.append(rent) info.append(costofgood) expense = tuple(info) QF.addExpense(expense) self.window.destroy() except: messagebox.showerror("Error", "Something is Wrong\nExpenses must be nonnegative numbers!\nCheck your input!") self.window.destroy()
class AboutWindow: def __init__(self, parent): self.aboutWindow = Toplevel(parent) self.aboutWindow.withdraw() self.aboutWindow.geometry('+{x}+{y}'.format(x=parent.winfo_x(), y=parent.winfo_y())) self.aboutWindow.wm_attributes("-topmost", 1) self.aboutWindow.focus_force() self.aboutWindow.iconbitmap("imagefiles/stIcon.ico") self.aboutWindow.title("About") self.aboutWindow.resizable(False, False) self.aboutWindow.grab_set() self.frameTop = Frame(self.aboutWindow) self.aboutImage = PhotoImage(file="imagefiles/stLogo64.png") self.aboutImageLabel = Label(self.frameTop, image=self.aboutImage, cursor="hand2") self.aboutImageLabel.bind( "<Button-1>", lambda x: webbrowser.open('https://www.go1den.com/streamticker', new=2)) self.aboutImageLabel.grid(row=0, column=0, padx=4, pady=4) self.aboutLabel = Label( self.frameTop, text="StreamTicker\n\nVersion 2.0.7\n\nReleased: 5/4/2021", justify=LEFT) self.aboutLabel.grid(row=0, column=1, sticky=W, pady=4) self.frameTop.grid(row=0, column=0, sticky=W) self.aboutSupportLabel = Label( self.aboutWindow, text= "Hello. I'm Go1den. I developed StreamTicker.\nThis program is available to use for free.\nThat being said, I devoted many hours to it.\n\nPlease consider supporting me if you enjoy it:", justify=LEFT) self.aboutSupportLabel.grid(row=1, column=0, sticky=W, padx=4, columnspan=2) self.myPaypalImage = PhotoImage(file="imagefiles/donate.png") self.myPaypalButton = Label(self.aboutWindow, image=self.myPaypalImage, cursor="hand2") self.myPaypalButton.bind( "<Button-1>", lambda x: webbrowser.open( 'https://www.paypal.com/donate/?hosted_button_id=LXMBXT59KL578', new=2)) self.myPaypalButton.grid(row=2, column=0, columnspan=2, pady=4, padx=4) self.aboutThanksLabel = Label( self.aboutWindow, text= "Thank you so much for trying my program!\nIf you enjoy it, please tell others about it.", justify=LEFT) self.aboutThanksLabel.grid(row=3, column=0, sticky=W, pady=4, padx=4) self.okButton = HoverButton(self.aboutWindow, text="OK", width=10, bd=2, relief=GROOVE, command=lambda: self.aboutWindow.destroy()) self.okButton.grid(row=4, column=0, sticky=SE, pady=4) self.aboutWindow.deiconify() self.aboutWindow.mainloop()
Label(login_w, text="Username & password:"******"*", width=14).grid(row=0, column=1) Button(login_w, text="Submit", command=login).pack() login_w.mainloop() main_w = Tk() main_w.title("Minecraft Server") main_w.resizable(0, 0) main_w.protocol("WM_DELETE_WINDOW", main_close) sid_bar = Frame(main_w) sid_bar.grid(row=0, column=0) status = LabelFrame(sid_bar, text="Status") status.pack() Label(status, text="State:").grid(row=0, column=0) online = StringVar() online.set("N/A") Label(status, textvariable=online).grid(row=0, column=1) Label(status, text="Players:").grid(row=1, column=0) players = IntVar() players.set(0) Label(status, textvariable=players).grid(row=1, column=1) Label(status, text="Latency:").grid(row=2, column=0) latency = IntVar() latency.set(0) Label(status, textvariable=latency).grid(row=2, column=1) actions = LabelFrame(sid_bar, text="Actions")
def __init__(self, tkobj): #Frame: Label + Entryfeld TiFrame = Frame(tkobj) TiFrame.grid(column=0, row=0, pady=5, padx=5, sticky=NW) #Label Titel lblTi = MyLabel(TiFrame) lblTi.set('Titel') lblTi.grid(column=0, row=1, pady=5, padx=5, sticky=NW) #Label SOPNr. lblSOP = MyLabel(TiFrame) lblSOP.set('SOP-Nr.') lblSOP.grid(column=0, row=2, pady=5, padx=5, sticky=NW) #Label Institut lblins = MyLabel(TiFrame) lblins.set('Institut') lblins.grid(column=0, row=3, pady=5, padx=5, sticky=NW) #Label Abteilung lblabt = MyLabel(TiFrame) lblabt.set('Abteilung') lblabt.grid(column=0, row=4, pady=5, padx=5, sticky=NW) #Entry Titel self.txtTitel = MyEntryfield(TiFrame) self.txtTitel.grid(column=1, row=1, pady=5, padx=5, sticky=NW) self.txtTitel.focus() #Entry SOPNr. self.txtSOPNr = MyEntryfield(TiFrame, fg='red') self.txtSOPNr.insert(INSERT, 'XX_999') self.txtSOPNr.config(width=10) self.txtSOPNr.grid(column=1, row=2, pady=5, padx=5, sticky=NW) #Entry Institut self.txtInst = MyEntryfield(TiFrame) self.txtInst.grid(column=1, row=3, pady=5, padx=5, sticky=NW) #Entry Abteilung self.txtAbt = MyEntryfield(TiFrame) self.txtAbt.grid(column=1, row=4, pady=5, padx=5, sticky=NW) #Frame Checkbox CheckFrame = Frame(tkobj) CheckFrame.grid(column=0, row=1, pady=5, padx=5, sticky=NW) #Label Name, Rolle, Datum lblName = MyLabel(CheckFrame) lblName.set('Name, Rolle') lblName.grid(column=1, row=0, pady=5, padx=5, sticky=NW) lblDatum = MyLabel(CheckFrame) lblDatum.set('Datum (YYYY.MM.DD)') lblDatum.grid(column=2, row=0, pady=5, padx=5, sticky=NW) #Label der Checkbox #Label - Erstellung lblErstellung = MyLabel(CheckFrame) lblErstellung.set('erstellt') lblErstellung.grid(column=0, row=1, pady=5, padx=5, sticky=NW) #Label - Prüfung lbl1Prüfung = MyLabel(CheckFrame) lbl1Prüfung.set('geprüft') lbl1Prüfung.grid(column=0, row=2, pady=5, padx=5, sticky=NW) #Label - Prüfung lbl2Prüfung = MyLabel(CheckFrame) lbl2Prüfung.set('geprüft') lbl2Prüfung.grid(column=0, row=3, pady=5, padx=5, sticky=NW) #Label - Genehmigung lblFreigabe = MyLabel(CheckFrame) lblFreigabe.set('freigegeben') lblFreigabe.grid(column=0, row=4, pady=5, padx=5, sticky=NW) #Label - Veröffentlichung lblRel = MyLabel(CheckFrame) lblRel.set('veröffentlicht') lblRel.grid(column=0, row=5, pady=5, padx=5, sticky=NW) #Combobox zum Check-Block self.ComNaRo = MyCombobox(CheckFrame) self.ComNaRo.grid(column=1, row=1, pady=5, padx=5, sticky=NW) self.Ch1NaRo = MyCombobox(CheckFrame) self.Ch1NaRo.grid(column=1, row=2, pady=5, padx=5, sticky=NW) self.Ch2NaRo = MyCombobox(CheckFrame) self.Ch2NaRo.grid(column=1, row=3, pady=5, padx=5, sticky=NW) self.AppNaRo = MyCombobox(CheckFrame) self.AppNaRo.grid(column=1, row=4, pady=5, padx=5, sticky=NW) self.RelNaRo = MyCombobox(CheckFrame) #RelNaRo.configure(state='readonly') self.RelNaRo.grid(column=1, row=5, pady=5, padx=5, sticky=NW) #Spinbox zum Check-Block self.ComSpin = MySpinDate(CheckFrame) self.ComSpin.grid(column=2, row=1, pady=5, padx=5, sticky=NW) self.Ch1Spin = MySpinDate(CheckFrame) self.Ch1Spin.grid(column=2, row=2, pady=5, padx=5, sticky=NW) self.Ch2Spin = MySpinDate(CheckFrame) self.Ch2Spin.grid(column=2, row=3, pady=5, padx=5, sticky=NW) self.AppSpin = MySpinDate(CheckFrame) self.AppSpin.grid(column=2, row=4, pady=5, padx=5, sticky=NW) self.RelSpin = MySpinDate(CheckFrame) self.RelSpin.grid(column=2, row=5, pady=5, padx=5, sticky=NW) #Radiobutton LangFrame = Frame(tkobj) LangFrame.grid(column=0, row=2, pady=5, padx=5, sticky=NW) lblSprache = MyLabel(LangFrame) lblSprache.set('Sprachausgabe PDF') lblSprache.grid(column=0, row=0, sticky=NW, pady=5, padx=5) self.radioSprache = MyRadioButton(LangFrame) self.radioSprache.grid(column=1, row=0, pady=5, padx=5, sticky=NW)
def __init__(self, master): """Class builds GUI to control Waltz Telescope. Uses Tkinter for GUI functionality. Inherits from lx200commands.Lx200Commands class. This class provides functionality to talk to serial connection using the lx200 protocol. """ super().__init__() self.master = master master.title("Waltz Control Panel") #Store CET and UCT self.CET = '' self.UTC = '' #Store if telescope is waiting for slew to finish self.waiting=True ## Building up GUI Widgets ## #Menubars menubar=Menu(self.master) #Connection menu connectionmenu = Menu(menubar, tearoff=0) connectionmenu.add_command(label="Open Connection", command=self.open_connection_buttonclick) connectionmenu.add_command(label="Close Connection", command=self.close_connection_buttonclick) menubar.add_cascade(label="Connection", menu=connectionmenu) #settings_menu settings_menu=Menu(menubar, tearoff=0) settings_menu.add_command(label="Enable buttons",command=self.stop_waiting) settings_menu.add_command(label="Toggle Precision",command=super().toggle_precision) menubar.add_cascade(label="Settings",menu=settings_menu) #Pointing_stars_menu pointing_stars_menu=Menu(menubar, tearoff=0) pointing_stars_menu.add_command(label="Pointing Star", command=self.save_pointing_star) menubar.add_cascade(label="Save as", menu= pointing_stars_menu) #Special_positions_menu special_positions_menu=Menu(menubar, tearoff=0) special_positions_menu.add_command(label="Slew to Primary Mirror Position",command=self.primary_mirror_pos_buttonclick) special_positions_menu.add_command(label="Slew to Secondary Mirror Position",command=self.secondary_mirror_pos_buttonclick) special_positions_menu.add_command(label="Slew to Park Position",command=self.park_telescope_buttonclick) menubar.add_cascade(label="Special Positions",menu=special_positions_menu) #Show menubar self.master.config(menu=menubar) #Output frame output_frame=Frame(master) output_frame.grid(row=0,columnspan=3) self.LST_label = Label(output_frame, font=('arial', 15, 'bold'), text="LST") self.LST_label.grid(row=0,column=0) self.LST_display = Label(output_frame, font=('arial', 20, 'bold'), bg='light green') self.LST_display.grid(row=0, column=1,padx=10, pady=10) self.local_time_label= Label(output_frame, font=('arial', 15, 'bold'), text='LT') self.local_time_label.grid(row=0, column=3) self.local_time_display = Label(output_frame, font=('arial', 20, 'bold'), bg='light green') self.local_time_display.grid(row=0, column=4,padx=10,pady=10) self.UTC_label= Label(output_frame, font=('arial', 15, 'bold'), text='UTC') self.UTC_label.grid(row=0, column=5) self.UTC_display = Label(output_frame, font=('arial', 20, 'bold'), bg='light green') self.UTC_display.grid(row=0, column=6,padx=10,pady=10) self.RA_label= Label(output_frame, font=('arial', 15, 'bold'), text= "RA") self.RA_label.grid(row=1, column =0) self.RA_display= Label(output_frame, font=('arial', 20, 'bold'), bg='light green') self.RA_display.grid(row=1, column =1) self.DEC_label= Label(output_frame, font=('arial', 15, 'bold'), text= "DEC") self.DEC_label.grid(row=1, column =3) self.DEC_display= Label(output_frame, font=('arial', 20, 'bold'), bg='light green') self.DEC_display.grid(row=1, column =4) self.HA_label= Label(output_frame, font=('arial', 15, 'bold'), text= "HA") self.HA_label.grid(row=1, column =5) self.HA_display= Label(output_frame, font=('arial', 20, 'bold'), bg='light green') self.HA_display.grid(row=1, column=6) #Interchange_frame #To interchange W<->E buttons and N<->S self.interchange_frame=Frame(master) self.interchange_frame.grid(row=1, column=0,pady=10) #Define Variables self.inter_WE=IntVar() self.inter_NS=IntVar() self.inter_NS_checkbox=Checkbutton(self.interchange_frame, text='N <> S', font=('arial', 10, 'bold'), variable=self.inter_NS, command=self.interchange_north_south) self.inter_NS_checkbox.grid(row=0,column=0,sticky='w',pady=5) self.inter_WE_checkbox=Checkbutton(self.interchange_frame, text='W <> E', font=('arial', 10, 'bold'), variable=self.inter_WE, command=self.interchange_west_east) self.inter_WE_checkbox.grid(row=1,column=0,sticky='w',pady=5) #Control frame self.control_frame=Frame(master) self.control_frame.grid(row=1,column=1,pady=10) self.south_button = Button(self.control_frame, text="S", font=('arial', 20, 'bold'), bg='LightGrey', height = 1, width = 2) self.south_button.grid(row=0,column=1) self.west_button = Button(self.control_frame, text="W", font=('arial', 20, 'bold'), bg='LightGrey', height = 1, width = 2) self.west_button.grid(row=1,column=0) self.east_button = Button(self.control_frame, text="E", font=('arial', 20, 'bold'), bg='LightGrey', height = 1, width = 2) self.east_button.grid(row=1,column=2) self.north_button = Button(self.control_frame, text="N", font=('arial', 20, 'bold'), bg='LightGrey', height = 1, width = 2) self.north_button.grid(row=2,column=1) self.stop_button = Button(self.control_frame, text="STOP", font=('arial',20, 'bold'), fg='White', bg='Red', activeforeground='Red', activebackground='White', command=super().stop_at_current_pos) self.stop_button.grid(row=3,column=0, columnspan=3, pady=10) #Radiobutton frame self.radiobutton_frame=Frame(master) self.radiobutton_frame.grid(row=1,column=2,pady=10) radiobutton_parameters=[('Slew',0,self.set_speed_max), ('Find',1, self.set_speed_find), ('Center',2, self.set_speed_center), ('Guide',3, self.set_speed_guide)] self.speed=StringVar() #Initialize speed to guiding speed self.speed.set('Guide') for keyword, position, execute in radiobutton_parameters: self.speed_radiobutton= Radiobutton(self.radiobutton_frame, text=keyword, variable=self.speed, value=keyword, command=execute, font=('arial', 10, 'bold')) self.speed_radiobutton.grid(row=position,column=0,sticky=W) #Options Frame self.options_frame=Frame(master) self.options_frame.grid(row=0,column=3,padx=20) self.sync_button = Button(self.options_frame, text="Synchronize \n with Target", font=('arial', 12, 'bold'), bg='LightGrey', command=self.sync_yes_no, state='disabled') self.sync_button.grid(row=0,column=0,padx=5) #Target Frame self.target_frame=LabelFrame(master, text='Select Target (apparent position)', font=('arial', 15)) self.target_frame.grid(row=1,rowspan=1,column=3,padx=20) self.HIP_label = Label(self.target_frame, font=('arial', 15), text="Hipparcos") self.HIP_label.grid(row=0,column=0) self.HIP_entry= Entry(self.target_frame, font=('arial', 15)) self.HIP_entry.grid(row=0, column=1,pady=10) self.target_ra_label = Label(self.target_frame, font=('arial', 15), text="RA \n [hh mm ss]") self.target_ra_label.grid(row=1,column=0) self.target_ra_entry= Entry(self.target_frame, font=('arial', 15)) self.target_ra_entry.grid(row=1, column=1,pady=10) self.target_dec_label = Label(self.target_frame, font=('arial', 15), text="""DEC \n [°° mm ss]""") self.target_dec_label.grid(row=2,column=0) self.target_dec_entry= Entry(self.target_frame, font=('arial', 15)) self.target_dec_entry.grid(row=2, column=1,pady=10) self.target_time_label= Label(self.target_frame, font=('arial', 15), text=" Obs \n Time") self.target_time_label.grid(row=0,column=2,padx=10) self.target_time_display=Label(self.target_frame, font=('arial', 15), bg='red', width=10) self.target_time_display.grid(row=0,column=3,pady=10) self.target_alt_label = Label(self.target_frame, font=('arial', 15), text="ALT") self.target_alt_label.grid(row=1,column=2,padx=10) self.target_alt_display= Label(self.target_frame, font=('arial', 15), bg='red', width=10) self.target_alt_display.grid(row=1, column=3,pady=10) self.target_az_label = Label(self.target_frame, font=('arial', 15), text="AZ") self.target_az_label.grid(row=2,column=2,padx=10) self.target_az_display= Label(self.target_frame, font=('arial', 15), bg='red', width=10) self.target_az_display.grid(row=2, column=3,pady=10) self.slew_target_button = Button(self.target_frame, text="Slew to Target", font=('arial', 15), bg='LightGrey', state='disabled', command=self.slew_to_target_buttonclick) self.slew_target_button.grid(row=3,columnspan=4) #Plot Frame self.plot_frame=Frame(master) self.plot_frame.grid(row=2,columnspan=4) #Add instance variables to store the plot and the different axes, #and positions globally self.canvas=False self.ax1=False self.star_plot=False self.traj_plot=False self.pos_plot=False self.ax2=False #At first check if serial connection is open (also contains initial commands) self._respond_to_connection_state() #Message box for Warning caution=("CAUTION: THIS IS A FIRST ATTEMPT TO CONTROL THE WALTZ TELESCOPE.\n"+ "BAD INPUTS OR CRASHES OF THE PROGRAM COULD BE HARMFUL TO THE TELESCOPE.\n"+ "DO NOT USE THIS PROGRAM ALONE AND ALWAYS PREPARE FOR STOPING MOVEMENTS "+ "OF THE TELESCOPE VIA THE EMERGENCY STOPS IN THE DOME!") messagebox.showwarning("Warning",message=caution,parent=master)
class MainGUI(): def __init__(self, root): self.root = root self.create_gui() # Create the main window def create_gui(self): '''used to create GUI elements''' self.root.title("MangaReaDex v1.2 - By Nadhif") self.root.geometry("1000x1080") # Initialize the webdriver headless options = Options() options.add_argument("--headless") self.driver = webdriver.Firefox(options=options) # Make frame for every different GUI element self.header = Frame(self.root, height=100, width=900) self.lefthead = Frame(self.header, height=80, width=465, highlightbackground="green", highlightcolor="green", highlightthickness=1) self.righthead = Frame(self.header, height=80, width=465, highlightbackground="green", highlightcolor="green", highlightthickness=1) self.prighthead = Frame(self.righthead, height=35, width=465) self.body = Frame(self.root, height=900, width=930, highlightbackground="blue", highlightcolor="blue", highlightthickness=1) self.footer = Frame(self.root, height=20, width=930, highlightbackground="red", highlightcolor="red", highlightthickness=1) # Freeze the frame so it doesn't shrink self.header.pack_propagate(False) self.body.pack_propagate(False) self.lefthead.pack_propagate(False) self.righthead.pack_propagate(False) self.footer.pack_propagate(False) # Put all the frames inside the main window self.header.pack() self.body.pack() self.footer.pack() self.lefthead.grid(row=0, column=0) self.righthead.grid(row=0, column=1) self.prighthead.pack(side=BOTTOM) # Initialize the manga object (Canvas) self.manga = Manga(self.body, width=907, height=1200, scrollregion=(0, 0, 900, 1300), driver=self.driver) # Make labels and place them inside the window manga_label = Label(self.lefthead, text="Enter your manga title", font=(22)) chapter_label = Label(self.righthead, text="Pick your chapter", font=(14)) page_label = Label(self.prighthead, text="Page :", font=(14)) manga_label.pack() chapter_label.pack() # Make boxes as Manga's attribute and place them inside the window self.manga.manga_box = Combobox(self.lefthead, width=50) self.manga.chapter_box = Combobox(self.righthead, width=50, state='readonly') self.manga.page_box = Combobox(self.prighthead, width=10, state='readonly') self.manga.manga_box.pack() self.manga.chapter_box.pack() page_label.pack(side=LEFT) self.manga.page_box.pack(side=RIGHT) # Make buttons and place them inside the window left_button = Button(self.footer, text="<-", command=self.prev_page, width=51, font=(16)) right_button = Button(self.footer, text="->", command=self.next_page, width=51, font=(16)) search_button = Button(self.lefthead, text="Search", command=self.update_manga_list) left_button.pack(side=LEFT) right_button.pack(side=RIGHT) search_button.pack() # Make a scrollbar for the canvas and pack the canvas scrollbar = Scrollbar(self.body, orient=VERTICAL) self.manga.config(yscrollcommand=scrollbar.set) self.manga.pack(side=LEFT) # Create a title screen image and show it in the canvas img = ImageTk.PhotoImage(file="mangareadex.png") self.manga.image = self.manga.create_image(450, 650, image=img) self.manga.img = img # Pack the scrollbar scrollbar.config(command=self.manga.yview) scrollbar.pack(side=RIGHT, fill=Y) # Make the controls self.controller() def controller(self): '''make the necessary keyboard and mouse controls''' # Bind the boxes to get elements self.manga.manga_box.bind('<Return>', self.update_manga_list) self.manga.manga_box.bind('<<ComboboxSelected>>', self.update_chapter_list) self.manga.chapter_box.bind('<<ComboboxSelected>>', self.update_page_list) self.manga.page_box.bind('<<ComboboxSelected>>', self.jump_to) # Bind the mouse controls self.root.bind('<MouseWheel>', self.mousewheel) self.manga.bind('<Button-1>', self.click) # Bind the keyboard controls self.root.bind('<Right>', self.next_page) self.root.bind('<Left>', self.prev_page) self.root.bind('<Up>', self.scroll_up) self.root.bind('<Down>', self.scroll_down) def mousewheel(self, event): '''event for mousewheel scroll''' self.manga.yview_scroll(-1 * (int(event.delta / 120)), 'units') def scroll_up(self, event): '''event for keyboard press up''' self.manga.yview_scroll(-1, 'units') def scroll_down(self, event): '''event for keyboard press down''' self.manga.yview_scroll(1, 'units') def update_manga_list(self, event=None): # Call find_manga in manga object and populate box self.title_dir = self.manga.find_manga(self.manga.manga_box.get()) self.manga.manga_box['values'] = [ title for title in self.title_dir.keys() ] def update_chapter_list(self, event): # Clear chapter and page box self.manga.chapter_box.set('') self.manga.page_box.set('') self.manga.page_box['values'] = [] title = self.manga.manga_box.get() href = self.title_dir[title] # Call find_chapter in manga object and populate the box self.chapter_dir = self.manga.find_chapter(href) self.manga.chapter_box['values'] = [ chapter for chapter in self.chapter_dir.keys() ] def update_page_list(self, event): # Set the page to be the first page self.manga.current_page = 1 self.manga.page_box.set(1) chapter = self.manga.chapter_box.get() cha_list = [chapter for chapter in self.chapter_dir.keys()] self.manga.current_chapter = cha_list.index(chapter) id = self.chapter_dir[chapter] # Call find_image in manga object and populate the box self.page_dir = self.manga.find_image(id) self.manga.page_box['values'] = [num for num in self.page_dir.keys()] def click(self, event): '''event for click on the page''' if int(event.x) < 465: self.prev_page() else: self.next_page() def next_page(self, event=None): '''event for keyboard press right''' try: self.manga.change_page(1) except Exception: pass def prev_page(self, event=None): '''event for keyboard press left''' try: self.manga.change_page(-1) except Exception: pass def jump_to(self, event): '''event for changing page via the page_box''' page = self.manga.page_box.get() self.manga.current_page = int(page) self.manga.change_image() def mainloop(self): # If you close the gui window self.root.protocol("WM_DELETE_WINDOW", self.quit) self.root.mainloop() def quit(self): # Destroy the driver and the root self.root.destroy() self.driver.quit()
from PIL import ImageTk, Image from tkinter import Frame root = Tk() root.title("image") root.iconbitmap( "C:/Users/kalsa/Documents/python gui codemy youtube/icon_0m1_icon.ico") root.geometry("400x400") resizeframe = Frame(root, width=10, height=10, bd=1, bg="#faa045", relief=SUNKEN) resizeframe.grid(row=0, column=1, padx=5, pady=5, sticky=NW) controllerframe = LabelFrame(root, text="sliders") controllerframe.grid(row=0, column=0, padx=10, pady=10, sticky=N) def slide(xvalue): resizeframe.configure(height=int(xvalue)) def click(): yvalue = horizontalslider.get() resizeframe.configure(width=int(yvalue))
addRecord = Button(frame1, text="Nowy Rekord", command=addRec) deleteRecord = Button(frame1, text="Usuń Rekord gdzie ->", command=delRec) record = Listbox(frame1, height=4) record.insert(1, "Id") record.insert(2, "Imię") record.insert(3, "Nazwisko") record.insert(4, "Wiek") l = Label(frame1, text="=") where = Entry(frame1) name.grid(row=0, column=0) dbName.grid(row=0, column=1) user.grid(row=0, column=2) userName.grid(row=0, column=3) surname.grid(row=0, column=4) userSurname.grid(row=0, column=5) age.grid(row=0, column=6) userAge.grid(row=0, column=7) createDb.grid(row=1, column=0) disconnect.grid(row=1, column=1) addRecord.grid(row=1, column=2) deleteRecord.grid(row=1, column=3) record.grid(row=1, column=4) l.grid(row=1, column=5) where.grid(row=1, column=6) frame1.grid(row=0) frame.grid(row=2) mainloop()
class StockGui(object): """define StockGui class""" def __init__(self, window): """Setup GUI on given window""" self.header_frame = Frame(window, bg='deepskyblue', width=600, height=70) self.header_frame.grid(row=0, column=0, columnspan=2) self.main_frame = Frame(window, bg='white', highlightbackground="white", highlightthickness=20, width=600, height=700) self.main_frame.grid(row=1, column=1, rowspan=2) # Header Frame self.header_frame.grid_propagate(0) self.header_frame.grid_rowconfigure(0, weight=1) self.header_frame.grid_columnconfigure(1, weight=1) self.label_header_text_2 = tk.Label(self.header_frame, text='ABC classification results', bg='deepskyblue', fg='white', font=("Arial", 28)) self.label_header_text_2.grid(row=0, column=1) # Main Frame self.main_frame.grid_propagate(0) self.main_frame.grid_rowconfigure(1, weight=1) self.main_frame.grid_columnconfigure(1, weight=1) #Create 2 frames inside the main frame self.top_main_frame = Frame(self.main_frame, bg='white', highlightbackground="#5f9cad", highlightthickness=2, width=560, height=120) self.top_main_frame.grid(row=0) self.top_main_frame.grid_propagate(0) self.top_main_frame.grid_rowconfigure(0, weight=1) self.top_main_frame.grid_columnconfigure(2, weight=1) self.bottom_main_frame = Frame(self.main_frame, bg='white', width=560, height=580) self.bottom_main_frame.grid(row=1, sticky='n') self.bottom_main_frame.grid_propagate(0) self.bottom_main_frame.grid_rowconfigure(0, weight=1) self.bottom_main_frame.grid_columnconfigure(2, weight=1) # create the widgets for the top_main_frame self.btn_stock_info = tk.Button(self.top_main_frame, text='See my stock status', command=self.stock_status) self.btn_stock_info.grid(row=0, column=2) self.label_stock_info = tk.Label(self.top_main_frame, text="", bg='white') self.label_stock_info.grid(row=1, column=2, sticky='n') # create the widgets for the bottom_main_frame self.label_threshold = tk.Label( self.bottom_main_frame, text='Please input your threshold for each class', bg='white') self.label_threshold.grid(row=0, column=0, pady=5) template_threshold = "For example: class A accounts for 70% of stock value (please input: 0.7),\nclass B accounts for 25% of stock value (input: 0.25) and class C accounts for the rest 5% of stock value" self.label_threshold_note = tk.Label(self.bottom_main_frame, text=template_threshold, bg='white') self.label_threshold_note.grid(row=1, column=0, pady=5) self.label_class_a = tk.Label(self.bottom_main_frame, text='Class A', bg='white') self.label_class_a.grid(row=2, column=0, pady=5) self.entry_class_a = tk.Entry(self.bottom_main_frame, width=20) self.entry_class_a.grid(row=3, column=0) self.label_class_b = tk.Label(self.bottom_main_frame, text='Class B', bg='white') self.label_class_b.grid(row=4, column=0, pady=5) self.entry_class_b = tk.Entry(self.bottom_main_frame, width=20) self.entry_class_b.grid(row=5, column=0) self.label_class_c = tk.Label(self.bottom_main_frame, text='Class C: the rest', bg='white') self.label_class_c.grid(row=6, column=0, pady=5) self.btn_ABC_classification = tk.Button(self.bottom_main_frame, text='Stock classification', command=self.ABC_results) self.btn_ABC_classification.grid(row=7, column=0, pady=5) self.label_result = tk.Label(self.bottom_main_frame, text='Results for stock classification:', bg='white') self.label_result.grid(row=8, column=0, pady=5) self.label_message = tk.Label(self.bottom_main_frame, text='', bg='white', anchor=W, justify=LEFT) self.label_message.grid(row=9, column=0) self.btn_savefile = tk.Button(self.bottom_main_frame, text='Export ABC classification file', command=self.save_file) self.btn_savefile.grid(row=16, column=0, pady=5) self.btn_plotgraph = tk.Button(self.bottom_main_frame, text='View Pareto chart', command=self.plot_graph) self.btn_plotgraph.grid(row=17, column=0, pady=10) def stock_status(self): """The event handler for clicks on the button stock_status The purpose: to see current stock status based on descriptive analysis""" stock_info = Descriptive_stats("Data_stock.csv") self.label_stock_info.configure(text=stock_info) def ABC_results(self): """The event handler for clicks on the ABC results Purpose: to get threshold values from user input and print results after classification This event handler also handling Exception in case user input wrong""" if float(self.entry_class_a.get()) >= 1 or float( self.entry_class_b.get()) > 1: self.label_message.configure( text="ERROR: Threshold value must less than 1!", fg='red') elif float(self.entry_class_a.get()) + float( self.entry_class_b.get()) > 1: self.label_message.configure( text= "ERROR: Sum of threshold values for class A, B, C must be equal to 1!", fg='red') else: ABC_stock = ABC_classification("Data_stock.csv", float(self.entry_class_a.get()), float(self.entry_class_b.get())) self.label_message.configure(text=ABC_stock, fg='blue') def save_file(self): """The event handler for clicks on the button save file The output will be a new Excel file with result of ABC classification for each item""" ABC_stock = ABC_classification("Data_stock.csv", float(self.entry_class_a.get()), float(self.entry_class_b.get())) ABC_stock.export_results() def plot_graph(self): """The event handler for clicks on the button plot_graph Purpose: to plot the Pareto chart """ import matplotlib.pyplot as plt ABC_stock = ABC_classification("Data_stock.csv", float(self.entry_class_a.get()), float(self.entry_class_b.get())) df = ABC_stock.new_dataframe() x = np.arange(0, 416) y = df["Cumulative spending percentage"] plt.plot(x, y) plt.xlabel('Number of items') plt.ylabel('Weekly spending') plt.title("Pareto chart about Accumulated amount of value") plt.legend() plt.grid(True) plt.show()
class Viewer(Frame): files = None folder = None def __init__(self, parent): Frame.__init__(self, parent) # Frame for Listbox and Scrollbar self.frm = Frame(self) self.frm.grid(row=2, sticky=NW) # Button and Labels self.file_path = Button(self, text="Choose Folder", command=self.set_dcm_files) self.file_path.grid(row=0) self.msg_label = Label( self, text="Double click the folder \n and then click OK") self.msg_label.grid(row=1) self.info = StringVar(self) self.info_label = Label(self.frm, textvariable=self.info) self.info_label.grid(row=3) # Declaring Scrollbar and Listbox self.sbar = Scrollbar(self.frm, orient='vertical') self.dcm_list = Listbox(self.frm, width=20, yscrollcommand=self.sbar.set) self.dcm_list.bind("<<ListboxSelect>>", self.view_selected_item) self.sbar.config(command=self.dcm_list.yview) self.dcm_list.grid(row=0, column=0) self.sbar.grid(row=0, column=1, sticky=NS) # Sets dcm files and populates Listbox def set_dcm_files(self): self.folder = askdirectory() self.files = os.listdir(self.folder) self.files.sort() self.populate_list() # Populates the Listbox def populate_list(self): self.dcm_list.delete(0, 'end') for f in self.files: self.dcm_list.insert(END, f) # Views the selected item from the Listbox def view_selected_item(self, event): file = self.dcm_list.get(self.dcm_list.curselection()) try: if file.split(".")[1] == 'dcm': self.show_info(file) dataset = pydicom.read_file(self.folder + "/" + file) plt.imshow(dataset.pixel_array, cmap=plt.cm.bone) plt.show() else: self.show_info(f"{file} is not a .dcm file") except IndexError: self.show_info(f'{file} is a directory') # Display info below the Listbox def show_info(self, text=""): self.info.set(text) self.info_label.grid(row=3)
class MQ(ttk.Frame): # The gui and functions. def __init__(self, parent, *args, **kwargs): ttk.Frame.__init__(self, parent, *args, **kwargs) self.movieLabeltext = StringVar() self.moviefile = "" self.outfolder = "" self.fileloaded = False self.folderloaded = False self.movieLabeltext.set("<none>") self.movieDuration = 0.0 self.root = parent userDir = os.path.expanduser('~') self.path_OSX = os.path.join(userDir, 'Library', 'Application Support', 'Movie Quantizer') self.init_gui() def on_quit(self): # Exits program. sys.exit() def go_nogo(self): # check if ffmpeg is installed if (self.checkifffmpeg() == False): answer = mbox.askyesno( "ERROR", "This application needs ffmpeg " "installed in the system!\n\n" "Do you want to install it?") if answer == True: root.update() self.tryGettingffmpeg() return self.on_quit() return # Get the movie file def loadmovie(self): opts = {} opts['filetypes'] = [ ('Supported types', ("*.mov", "*.mp4", "*.mpg", "*.avi", "*.h264", "*.mpeg", "*.mkv", "*.m4a", "*.3gp", "*.ogg", "*.wmv", "*.vob")) ] self.moviefile = filedialog.askopenfilename(**opts) if self.moviefile != "": self.movie_button['text'] = os.path.basename(self.moviefile) self.fileloaded = True self.checkDuration() self.interval_spin['state'] = 'normal' self.calculate_images() if (self.fileloaded and self.folderloaded) == True: self.action_button['state'] = 'normal' # Get informations and duration of the movie def checkDuration(self): cmd = "'" + FFMPEG_BIN + "' -i " + "'" + self.moviefile + "'" + " 2>&1 | grep Duration" c = os.popen(cmd) out = c.read() self.answer_label['text'] = "Movie info:" + out c.close() dur = out.index("Duration:") duration = out[dur + 10:dur + out[dur:].index(",")] hh, mm, ss = map(float, duration.split(":")) self.movieDuration = (hh * 60 + mm) * 60 + ss def selectFolder(self): self.outfolder = filedialog.askdirectory() if self.outfolder != "": self.folder_button['text'] = os.path.basename(self.outfolder) self.folderloaded = True if (self.fileloaded and self.folderloaded) == True: self.action_button['state'] = 'normal' def checkifffmpeg(self): global FFMPEG_BIN try: devnull = open(os.devnull) subprocess.call(['ffmpeg', '-version'], stderr=subprocess.STDOUT, stdout=devnull) FFMPEG_BIN = "ffmpeg" except (OSError, ValueError, subprocess.CalledProcessError): try: subprocess.call([self.path_OSX + '/ffmpeg.osx', '-version'], stderr=subprocess.STDOUT, stdout=devnull) FFMPEG_BIN = self.path_OSX + "/ffmpeg.osx" except (OSError, ValueError, subprocess.CalledProcessError): return False self.set_ffmpegversion() return True def tryGettingffmpeg(self): global FFMPEG_BIN self.progLabelText = "Downloading ffmpeg. Please wait.." self.progress_win() root.update() t1 = threading.Thread(target=get_ffmpeg, args=(self, )) t1.start() FFMPEG_BIN = self.path_OSX + "/ffmpeg.osx" def set_ffmpegversion(self): cmd = [FFMPEG_BIN, " -version"] p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) out, err = p.communicate() lines = out.splitlines() ver = lines[0].decode('utf8').split('version', 1)[-1].split('Copyright')[0] self.answer_label['text'] = "Movie Quantizer v." + \ VERSION + " - using ffmpeg v." + ver def calculate_images(self): images = int( float(self.movieDuration) / float(self.interval_spin.get())) self.images_nrs['state'] = 'normal' self.images_nrs.delete(0, 'end') self.images_nrs.insert(0, images) self.images_nrs['state'] = 'disabled' def execute(self): # Grab the images format = self.image_formatbox.get() result = (os.system('ls "' + self.outfolder + '"/img*.' + format)) if result == 0: answer = mbox.askyesno( "Warning", "Folder already contains image files, that will be overwritten. Proceed?" ) if answer == False: return root.update() self.progLabelText = "Processing images. Please wait.." self.progress_win() t1 = threading.Thread(target=self.exec_thread) t1.start() def exec_thread(self): format = self.image_formatbox.get() if format == "tiff": pixformat = " -pix_fmt rgb565 " else: pixformat = " " fps = float(1 / float(self.interval_spin.get())) cmd = "'"+FFMPEG_BIN + "' -i '" + self.moviefile + "'" + pixformat + "-vf fps=" +\ str(fps) + " '" + self.outfolder + "'/img%04d." + format + " 2>&1" try: subprocess.check_call(cmd, shell=True) self.popup.destroy() cnt = subprocess.check_output('ls "' + self.outfolder + '"/img*.' + format + ' | wc -l', shell=True) self.answer_label['text'] = "Result: " +\ (cnt.decode('ascii').strip()) +\ " image files have been successfully created in " + self.outfolder return except subprocess.CalledProcessError as e: self.answer_label['text'] = e.output self.popup.destroy() return def progress_win(self): self.popup = Toplevel(self) progress_bar = ttk.Progressbar(self.popup, orient='horizontal', mode='determinate', takefocus=True, length=400) progress_bar.grid(row=1, column=0, sticky="we") self.progLabel = ttk.Label(self.popup, text=self.progLabelText).grid(column=0, row=0, sticky="we") self.popup.attributes('-topmost', True) progress_bar.start(50) def init_gui(self): # Builds GUI. self.root.title('Movie Quantizer') self.root.option_add('*tearOff', 'FALSE') self.grid(column=0, row=0, sticky='nsew') self.menubar = tkinter.Menu(self.root) self.menu_file = tkinter.Menu(self.menubar) self.menu_file.add_command(label='Open Movie File...', command=self.loadmovie) self.menu_file.add_command(label='Select Output Folder...', command=self.selectFolder) self.menu_file.add_command(label='Exit', command=self.on_quit) self.menubar.add_cascade(menu=self.menu_file, label='File') self.root.config(menu=self.menubar) self.movie_button = ttk.Button(self, text='Select', command=self.loadmovie) self.movie_button.grid(column=1, row=2) self.interval_spin = Spinbox(self, from_=0.5, to=20.0, increment=0.5, width=4, fg="red", command=self.calculate_images, state='disabled') self.interval_spin.grid(column=1, row=3, sticky="e") self.folder_button = ttk.Button(self, text='Select', command=self.selectFolder) self.folder_button.grid(column=3, row=2) self.images_nrs = ttk.Entry(self, text='', width=5, state='disabled') self.images_nrs.grid(column=3, row=3, sticky="e") self.box_value = StringVar() self.image_formatbox = ttk.Combobox(self, textvariable=self.box_value, state='readonly', width=4, justify='center') self.image_formatbox['values'] = ("jpg", "tiff") self.image_formatbox.current(0) self.image_formatbox.grid(column=1, row=4, sticky="w") self.action_button = ttk.Button(self, text='Grab Images', command=self.execute, state='disabled') self.action_button.grid(column=0, row=5, columnspan=4) self.answer_frame = Frame(self, height=300, background="white") self.answer_frame.grid(column=0, row=6, columnspan=4, sticky='nesw') self.answer_label = Message(self.answer_frame, text='', justify='center', width=600) self.answer_label.grid(column=0, row=0) # Labels that remain constant throughout execution. ttk.Label(self, text=' ').grid(column=0, row=0, columnspan=4) ttk.Label(self, text='Movie File:').grid(column=0, row=2, sticky='w') ttk.Label(self, text='Output Folder:').grid(column=2, row=2, sticky='w') ttk.Label(self, text="Grab a frame each (sec.):").grid(column=0, row=3, sticky='w') ttk.Label(self, text="Nr. of images:").grid(column=2, row=3, sticky='w') ttk.Label(self, text="Images format:").grid(column=0, row=4, sticky='w') for child in self.winfo_children(): child.grid_configure(padx=7, pady=7)
draw.polygon([ST0[0], ST0[1], 0, HEIGHT - 1, WIDTH - 1, HEIGHT - 1], fill=LIGHT) draw.polygon([ST0[0], ST0[1], ST0[0], 0, 0, HEIGHT - 1], fill=DARK) draw.polygon([ST0[0], ST0[1], WIDTH - 1, HEIGHT - 1, ST0[0], 0], fill=MEDIUM) sliderp = ImageTk.PhotoImage(imp) style = Style() style.theme_settings( 'default', { 'Horizontal.Scale.trough': { "element create": ('image', trough, { 'border': 0, 'sticky': 'wes' }) }, 'Horizontal.Scale.slider': { "element create": ('image', slider, ('pressed', sliderp), { 'border': 3, 'sticky': 'n' }) } }) style.theme_use('default') fr = Frame(root) fr.grid(row=0, column=0, sticky='nsew') YiqSelect(fr) root.mainloop()
from tkinter import Tk, Frame, StringVar, Entry, Label, OptionMenu, Button, END, Spinbox import random import math root = Tk() root.title('Happy Number') root.geometry('600x400') frame = Frame(root,bd=10) frame.grid(column=0,row=0) numbers_label = Label(frame,width=25,text='The first 8 Happy Numbers are: ') number1_input = Entry(frame,width=5,justify='center') number2_input = Entry(frame,width=5,justify='center') number3_input = Entry(frame,width=5,justify='center') number4_input = Entry(frame,width=5,justify='center') number5_input = Entry(frame,width=5,justify='center') number6_input = Entry(frame,width=5,justify='center') number7_input = Entry(frame,width=5,justify='center') number8_input = Entry(frame,width=5,justify='center') numbers_label.grid(row=0,column=0) number1_input.grid(row=0,column=1) number2_input.grid(row=0,column=2) number3_input.grid(row=0,column=3) number4_input.grid(row=0,column=4) number5_input.grid(row=0,column=5) number6_input.grid(row=0,column=6) number7_input.grid(row=0,column=7) number8_input.grid(row=0,column=8)
class PiAudio(tkinter.Tk): def __init__(self): Tk.__init__(self) self.nom_carte = "sysdefault:CARD=U0x46d0x825" self.fichier_courant = None self.stop_thread = False self.options_fichier = {"filetypes": [("Fichiers .wav", ".wav")]} self.creer_composant() self.mainloop() def creer_composant(self): self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) self.frame_haut = Frame(self) self.frame_haut.grid(row=0) self.frame_bas = Frame(self) self.frame_bas.grid(row=1) self.bouton_ouvrir = Button(self.frame_haut, text="Lire\nun enregistrement", command=lambda: self.ouvrir()) self.bouton_ouvrir.grid(row=0, column=0) self.bouton_enreg_sous = Button( self.frame_haut, text="Enregistrer\ndu son", command=lambda: self.enregistrer_sous()) self.bouton_enreg_sous.grid(row=0, column=1) self.lire_image = PhotoImage(file="resources/lire.png"), self.bouton_lire = Button(self.frame_bas, image=self.lire_image, command=lambda: self.lire()) self.bouton_lire.grid(row=1, column=0) self.bouton_lire.configure(state="disabled") self.stop_image = PhotoImage(file="resources/stop.png"), self.bouton_stop = Button(self.frame_bas, image=self.stop_image, command=lambda: self.stop()) self.bouton_stop.grid(row=1, column=1) self.bouton_stop.configure(state="disabled") self.enreg_image = PhotoImage(file="resources/enreg.png"), self.bouton_enreg = Button(self.frame_bas, image=self.enreg_image, command=lambda: self.enregistrer()) self.bouton_enreg.grid(row=1, column=2) self.bouton_enreg.configure(state="disabled") self.title(self.__class__.__name__) def ouvrir(self): fichier = askopenfilename(**self.options_fichier) if fichier: self.fichier_courant = fichier self.bouton_lire.configure(state="active") self.bouton_stop.configure(state="active") self.bouton_enreg.configure(state="disabled") def enregistrer_sous(self): fichier = asksaveasfilename(**self.options_fichier) if fichier: self.fichier_courant = fichier self.bouton_lire.configure(state="disabled") self.bouton_stop.configure(state="active") self.bouton_enreg.configure(state="active") def lire(self): self.stop_thread = False t = threading.Thread(target=self._lire) t.start() def _lire(self): with wave.open(self.fichier_courant, "rb") as w: output = alsaaudio.PCM() output.setchannels(w.getnchannels()) output.setrate(w.getframerate()) output.setformat(alsaaudio.PCM_FORMAT_S16_LE) output.setperiodsize(1024) self.stop_thread = False while True: data = w.readframes(320) if not data or self.stop_thread: break output.write(data) def stop(self): self.stop_thread = True self.bouton_lire.configure(state="active") self.bouton_enreg.configure(state="active") def enregistrer(self): self.stop_thread = False self.bouton_lire.configure(state="disabled") self.bouton_enreg.configure(state="disabled") t = threading.Thread(target=self._enregistrer) t.start() def _enregistrer(self): entree = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NONBLOCK, self.nom_carte) entree.setchannels(1) entree.setrate(44100) entree.setformat(alsaaudio.PCM_FORMAT_S16_LE) entree.setperiodsize(1024) with wave.open(self.fichier_courant, "w") as w: w.setnchannels(1) w.setsampwidth(2) w.setframerate(44100) while True: _, data = entree.read() w.writeframes(data) if self.stop_thread: break
self.varYear.set(today.year) self.varMonth.set(today.month) self.varDay.set(today.day) '''Programmstart''' if __name__ == "__main__": root = Tk() root.title('Test Date') root.geometry('200x150') #myspindate = MySpinDate(root) s1 = Frame(root) s1.grid(column=0, row=0) ComSpin = MySpinDate(root, today=True) ComSpin.grid(column=2, row=1, pady=5, padx=5, sticky=NW) Ch1Spin = MySpinDate(root) Ch1Spin.grid(column=2, row=2, pady=5, padx=5, sticky=NW) Ch2Spin = MySpinDate(root) Ch2Spin.grid(column=2, row=3, pady=5, padx=5, sticky=NW) AppSpin = MySpinDate(root) AppSpin.grid(column=2, row=4, pady=5, padx=5, sticky=NW) RelSpin = MySpinDate(root) RelSpin.grid(column=2, row=5, pady=5, padx=5, sticky=NW) RelSpin.set([1999, 12, 31]) root.mainloop()
runbtn.pack(side=LEFT, padx=5) quitbtn.pack(side=LEFT, padx=5) filebtns = Frame(rightbtns) openbtn = Button(filebtns, text="Open program", command=lambda: open_program(textarea)) savebtn = Button(filebtns, text="Save program", command=lambda: save_program(textarea)) openbtn.pack(side=LEFT, padx=5) savebtn.pack(side=LEFT, padx=5) browserbuttons.pack(side=LEFT, padx=10) filebtns.pack(side=LEFT, padx=10) rightbtns.grid(row=1, column=1, sticky=S, padx=10, pady=10) csvarea = Frame(top) pluggy = Image.open(r'./pluggy.png').convert("RGBA").resize((115, 125)) img = ImageTk.PhotoImage(pluggy) plabel = Label(csvarea, image=img) plabel.img = img plabel.pack(padx=10, pady=10) loadtitle = Label(csvarea, text="CSV status", font="TkDefaultFont 16 bold") loadtitle.pack(fill="y", expand=True) #plabel.bind("<Button-1>", trap) csvstatus = Label(csvarea, textvariable=loadstatus) csvstatus.pack() availfields = Label(csvarea, textvariable=available) availfields.pack(fill="y", expand=True)
class App(Tk): def __init__(self, *args, **kwargs): ''' the ui stuff ''' super().__init__(*args, **kwargs) self.color = 'blue' self.winfo_toplevel().title('Judgy Hexagon') #Menu for a bit of documentation and help self.menu = Menu(self) self.menu.add_command(label='Change Color', command=self.change_color) self.menu.add_command(label='Help', command=self.help) self.menu.add_command(label='People', command=self.people) self.config(menu=self.menu) #the main canvas to show the hexagon self.canvas = Canvas(self, height=566, width=800) self.canvas.grid(row=1, column=1) #frame to put all the sliders in self.sf = Frame(self) self.sf.grid(row=1, column=3) #entries for the trait names (with default values) self.sl1 = Entry(self.sf) self.sl1.grid(row=0, column=0) self.sl1.insert(END, 'IQ') self.sl2 = Entry(self.sf, text='EQ') self.sl2.grid(row=1, column=0) self.sl2.insert(END, 'EQ') self.sl3 = Entry(self.sf) self.sl3.grid(row=2, column=0) self.sl3.insert(END, 'Attractiveness') self.sl4 = Entry(self.sf) self.sl4.grid(row=3, column=0) self.sl4.insert(END, 'Personality') self.sl5 = Entry(self.sf) self.sl5.grid(row=4, column=0) self.sl5.insert(END, 'Athleticism') self.sl6 = Entry(self.sf) self.sl6.grid(row=5, column=0) self.sl6.insert(END, 'Artisticness') #sliders self.t1scale = Scale(self.sf, from_=0, to=9, orient=HORIZONTAL) self.t1scale.grid(column=1, row=0) self.t2scale = Scale(self.sf, from_=0, to=9, orient=HORIZONTAL) self.t2scale.grid(column=1, row=1) self.t3scale = Scale(self.sf, from_=0, to=9, orient=HORIZONTAL) self.t3scale.grid(column=1, row=2) self.t4scale = Scale(self.sf, from_=0, to=9, orient=HORIZONTAL) self.t4scale.grid(column=1, row=3) self.t5scale = Scale(self.sf, from_=0, to=9, orient=HORIZONTAL) self.t5scale.grid(column=1, row=4) self.t6scale = Scale(self.sf, from_=0, to=9, orient=HORIZONTAL) self.t6scale.grid(column=1, row=5) #the labels to make clear which line is which trait self.l1 = Label(self, text=self.sl1.get(), font=('Calibri', 20)) self.l1.grid(row=1, column=2, sticky=E) self.l2 = Label(self, text=self.sl2.get(), font=('Calibri', 20)) self.l2.grid(row=1, column=1, sticky=SE) self.l3 = Label(self, text=self.sl3.get(), font=('Calibri', 20)) self.l3.grid(row=1, column=1, sticky=SW) self.l4 = Label(self, text=self.sl4.get(), font=('Calibri', 20)) self.l4.grid(row=1, column=0, sticky=W) self.l5 = Label(self, text=self.sl5.get(), font=('Calibri', 20)) self.l5.grid(row=1, column=1, sticky=NW) self.l6 = Label(self, text=self.sl6.get(), font=('Calibri', 20)) self.l6.grid(row=1, column=1, sticky=NE) #:) #put the person's name in here self.nameentry = Entry(self.sf) self.nameentry.grid(row=7, column=1) Label(self.sf, text='\n\nName of person\n\n').grid(row=7, column=0) self.namelabel = Label(self, text='Name', font=('Calibri', 20), fg='red') self.namelabel.grid(row=0, column=1) #6 lists of points self.listright = [(400+40*i, 200*2**0.5) for i in range(10)] self.listrightdown = [(400+20*i, 200*2**0.5+i*20*2**0.5) for i in range(10)] self.listleftdown = [(400-20*i, 200*2**0.5+i*20*2**0.5) for i in range(10)] self.listleft = [(400-40*i, 200*2**0.5) for i in range(10)] self.listleftup = [(400-20*i, 200*2**0.5-i*20*2**0.5) for i in range(10)] self.listrightup = [(400+20*i, 200*2**0.5-i*20*2**0.5) for i in range(10)] #Draw the 10 hexagons for i in range(10): self.canvas.create_polygon([self.listright[i][0], self.listright[i][1], self.listrightdown[i][0], self.listrightdown[i][1], self.listleftdown[i][0], self.listleftdown[i][1], self.listleft[i][0], self.listleft[i][1], self.listleftup[i][0], self.listleftup[i][1], self.listrightup[i][0], self.listrightup[i][1],], fill='', width=1, outline='black') def change_color(self): self.color = clr.askcolor(title='Choose a color for the shape')[1] def help(self): msg.showinfo(title='Help', message=''' How to use this app: Move around the sliders and enter a name. Type your 6 character traits in the 6 entries. You can change the color of shape by clicking on the 'Change Color' menu option. Then, take a snip of the part without the sliders. Tutorial on judgy hexagons in real life: First, draw like 8 nested hexagons. Connect all the points with 6 lines. Label each of the lines with a trait (should be the traits below). For each of the traits, rank them from 1-8 and draw the point on the line. The outer hexagons are higher. Now, connect all 6 points, and color in the polygon made by them.''') def people(self): msg.showinfo(title='People', message=''' List of people related to this: Ideas: Aileen Liang (probably more this person), Hanting Li Python implementation: Owen Fei Another app to check out: Owen Zhang''') def judge(self, t1, t2, t3, t4, t5, t6): ''' Draws the filled-in polygon in blue. ''' #Get which point each level of trait is t1 = self.listright[t1] t2 = self.listrightdown[t2] t3 = self.listleftdown[t3] t4 = self.listleft[t4] t5 = self.listleftup[t5] t6 = self.listrightup[t6] #REmove the last shape if possible try: self.canvas.delete(self.last_polygon) except: pass #Draw the new polygon self.last_polygon = self.canvas.create_polygon([t1[0], t1[1], t2[0], t2[1], t3[0], t3[1], t4[0], t4[1], t5[0], t5[1], t6[0], t6[1],], fill=self.color, width=1, outline=self.color) self.canvas.update() def main(self): ''' Constantly draws the new polygon. Constantly updates the name. ''' while True: #Update the name self.namelabel.config(text=self.nameentry.get()) #Call judge() on the values of the sliders self.judge(self.t1scale.get(), self.t2scale.get(), self.t3scale.get(), self.t4scale.get(), self.t5scale.get(), self.t6scale.get()) #Updates the labels with trait names. self.l1.config(text=self.sl1.get()) self.l2.config(text=self.sl2.get()) self.l3.config(text=self.sl3.get()) self.l4.config(text=self.sl4.get()) self.l5.config(text=self.sl5.get()) self.l6.config(text=self.sl6.get()) self.update()
def __createWindowOnId(self, itemId, content): if self.currentlyRenderedWindow != None: self.currentlyRenderedWindow() # self.__remove(self.currentlyRenderedWindow) idtuple = self.localCanvas.coords(itemId) if idtuple: x = idtuple[0] y = idtuple[1] frm = Frame(self.localCanvas) frm.grid(row=0, column=0) canv = Canvas(frm) vscroll = Scrollbar(frm, orient="vertical", command=canv.yview) vscroll.grid(row=0, column=1, sticky=N + S) canv.grid(row=0, column=0) canv["yscrollcommand"] = vscroll.set aframe = Frame(canv) aframe.grid(row=0, column=0) Label(aframe, text=content, anchor="center", background="#CCFFCC", borderwidth=6, relief="ridge", justify="left").grid(row=1, column=0) canvWindow = canv.create_window(x, y, window=aframe) canv.coords(canvWindow, x, y) self.localCanvas.update_idletasks() canv["scrollregion"] = canv.bbox("all") def destroyAll(): self.__remove(canvWindow) canv.destroy() aframe.destroy() vscroll.destroy() frm.destroy() self.currentlyRenderedWindow = destroyAll Button(frm, text="Close", command=lambda : destroyAll()).grid(row=2, column=0)