def change_key_mapping(self): def onPress(key): try: newkey = key.char except AttributeError: newkey = key.name if newkey == "esc": okVar.set(1) return if newkey == "f1": self.configure(text="NONE") okVar.set(1) return self.configure(text=newkey) okVar.set(1) def onRelease(key): listener.stop() okVar = IntVar() win = Toplevel() win.lift() win.focus_force() win.grab_set() win.grab_release() Label( win, text= "Press wanted Button or\nPress ESC to exit or\n Press F1 to set to none", ).pack() listener = keyboard.Listener(on_press=onPress, on_release=onRelease) listener.start() win.wait_variable(okVar) win.destroy()
def GetAnswer(event): global clamp_1, clamp_2, ClampsWindow if clamp_num > 2: ClampsWindow = Toplevel(Resistor) ClampsWindow.grab_set() ClampsWindow.focus_force() ClampsWindow.minsize(width=200, height=160) ClampsWindow.maxsize(width=200, height=160) ClampsWindow.title('Choose clamps') clamp_1_info = Label(ClampsWindow, text='Enter the number\nof the first clamp:') clamp_1_info.place(x=0, y=0, width=200, height=40) clamp_1 = Entry(ClampsWindow) clamp_1.place(x=0, y=40, width=200, height=20) clamp_2_info = Label(ClampsWindow, text='Enter the number\nof the second clamp:') clamp_2_info.place(x=0, y=60, width=200, height=40) clamp_2 = Entry(ClampsWindow) clamp_2.place(x=0, y=100, width=200, height=20) clamp_OK_but = Button(ClampsWindow, text='OK') clamp_OK_but.place(x=0, y=120, width=200, height=40) clamp_OK_but.bind('<Button-1>', clamp_OK_action) else: GetAnswer_in_GetAnswer(0, 1)
class MessageManagerWindow: def __init__(self, parent): self.master = Toplevel(parent) self.master.withdraw() self.master.geometry('+{x}+{y}'.format(x=parent.winfo_x(), y=parent.winfo_y())) self.master.wm_attributes("-topmost", 1) self.master.focus_force() self.master.wm_title("StreamTicker Message Manager") self.master.iconbitmap("imagefiles/stIcon.ico") self.master.resizable(False, False) self.master.grab_set() self.window = parent self.cancelMessages = deepcopy(self.window.messages) self.messages = sorted(self.window.messages, key=lambda x: x.sortOrder) self.mlFrame = MessageManagerListFrame(self) self.mlFrame.frame.grid(row=0, column=1, padx=(4, 4), pady=4) self.mbFrame = MessageButtonFrame(self) self.mbFrame.frame.grid(row=0, column=0, padx=(4, 0), pady=4) self.okFrame = MessageOkCancelFrame(self) self.okFrame.frame.grid(row=1, column=1, padx=4, pady=4, sticky=E) self.master.deiconify() self.master.mainloop()
def inst_window(): inst_disp = Toplevel(root) inst_disp.title("Instructions") inst_disp.geometry('900x150') inst_disp.focus_force() inst_disp.resizable(width=False, height=False) welc_txt = "This application will make a palette image from an input image." step1_txt = "Step 1: Enter target image filepath. Click 'Set Target' to make sure you have the right one. Please make sure the application and the input image are in the same folder." step2_txt = "Step 2: Enter resize value. The larger this is, the more colours there will be in the palette, but it will take more time to process." step3_txt = "Step 3: Enter rounding value. This controls colour variation. The larger this is, the less colours there will be in the palette." step4_txt = "Step 4: Enter tuning value. This controls how close together the palette colours will be. The larger this is, the less colours there will be in the palette." step5_txt = "Step 5: Click 'Preview' to preview to palette. The number of colours in it will also be displayed." step6_txt = "Step 6: Enter palette filename and click 'Save Palette'. The palette will be saved to the folder the application is in." welc_lbl = Label(inst_disp, text=welc_txt, justify=LEFT) welc_lbl.grid(sticky=W, column=0, row=0) step1_lbl = Label(inst_disp, text=step1_txt, justify=LEFT) step1_lbl.grid(sticky=W, column=0, row=1) step2_lbl = Label(inst_disp, text=step2_txt, justify=LEFT) step2_lbl.grid(sticky=W, column=0, row=2) step3_lbl = Label(inst_disp, text=step3_txt, justify=LEFT) step3_lbl.grid(sticky=W, column=0, row=3) step4_lbl = Label(inst_disp, text=step4_txt, justify=LEFT) step4_lbl.grid(sticky=W, column=0, row=4) step5_lbl = Label(inst_disp, text=step5_txt, justify=LEFT) step5_lbl.grid(sticky=W, column=0, row=5) step6_lbl = Label(inst_disp, text=step6_txt, justify=LEFT) step6_lbl.grid(sticky=W, column=0, row=6)
def printFiles(self): for pdf in self.PDFs: self.jobCounter = ghostscript("\"T:\RELEASED_FILES\CURRENT_PDF\\"+pdf.replace("\"","")+"\"", self.jobCounter, self.selectedPrinter.get(), self.selectedPaper.get(),self.POPENFile) #print (jobCounter) if self.print_wrong_revision_var.get(): for pdf in self.wrongRevsion: self.jobCounter = ghostscript("\"T:\RELEASED_FILES\CURRENT_PDF\\"+pdf.replace("\"","")+"\"", self.jobCounter, self.selectedPrinter.get(), self.selectedPaper.get(),self.POPENFile) #os.remove(self.POPENFile) posx = 500 posy = 400 sizex = 500 sizey = 100 top = Toplevel() top.title("Done") top.grid_rowconfigure(0,weigh=1) top.grid_columnconfigure(0, weight=1) top.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy)) msg = Message(top, text="Sent all files to printer.\nPlease wait for the printer to finish", width=200, pady=10) msg.grid(row=0, column=0, columnspan=4) top.focus_force() self.current_window = top if self.runningInFrozen: top.iconbitmap(sys._MEIPASS+r"/emblem_print.ico") else: top.iconbitmap("emblem_print.ico") top.bind("<FocusOut>", self.Alarm) button = Button(top,text="Ok", command=top.quit) button.grid(row=1, column=0)
def doPopup(self, Type="Undefined", Text="Empty"): toplevel = Toplevel() # set minimum size toplevel.minsize(200, 10) # configure weight and amount of columns and rows self.configureEvenWeight(toplevel, 3, 3) toplevel.focus_force() def selfDestroy(_event=None): toplevel.destroy() def setKeybinds(component): component.bind("<Key>", selfDestroy) def getPopupMessage(Type="Undefined", Text="Empty"): if type == "Lost": return "You lost." + "\n" + "Please try again!" elif Type == "Draw": return "Its a draw!" + "\n" + "Please try again!" elif Type == "Win": return "Congratulations!" + "\n" + "{0} won!".format( Text).capitalize() elif Type == "specialWin": return "Congratulations, you won against the not yet unbeatable ai." + "\n" + "That technique won't work again!".capitalize( ) return "Something went wrong." + "\n" + "Please contact the developer about this problem." setKeybinds(toplevel) label1 = Label(toplevel) label1.grid(row=1, column=1, sticky=NSEW) if Type == "Undefined" and Text == "Empty": message = "Something went wrong." + "\n" + "Please contact the developer about this problem." else: message = getPopupMessage(Type, Text) label1.configure(text=message)
def popup_window(self, text, filename): top = Toplevel() info = LabelFrame(top, text=text) #"Group Information") info_text = Text( info, width=50, height=8, #bg=projectBgColor, #fg=projectFgColor, font=("nimbus mono bold", "11")) def savefunc(): self.writepaste(filename, info_text) def loadfunc(): self.readpaste(filename, info_text) info_save_button = Button(info, text="Save", command=savefunc) info_load_button = Button(info, text="Load", command=loadfunc) #self.pairs_load_button.pack( side=BOTTOM, padx=5, pady=5 ) #self.pairs_save_button.pack( side=BOTTOM, padx=5, pady=5 ) info_load_button.grid(row=5, column=5, padx=10, pady=5) info_save_button.grid(row=5, column=6, padx=10, pady=5) info_text.grid(row=1, rowspan=3, column=1, columnspan=7, padx=5, pady=5) info.grid(row=7, column=0, columnspan=6, sticky=W, padx=20, pady=10) top.focus_force()
class MessageComponentWindow: def __init__(self, parent, messagePart: MessagePart, index: int): self.parent = parent self.parentWindow = parent.window.master self.master = Toplevel(self.parentWindow) self.master.withdraw() self.existingMessagePart = messagePart self.messagePart = deepcopy(messagePart) self.index = index self.master.geometry('+{x}+{y}'.format( x=self.parentWindow.winfo_x() + 10, y=self.parentWindow.winfo_y() + 10)) self.master.wm_attributes("-topmost", 1) self.master.focus_force() self.master.wm_title("StreamTicker Message Component") self.master.iconbitmap("imagefiles/stIcon.ico") self.master.resizable(False, False) self.master.grab_set() self.master.protocol("WM_DELETE_WINDOW", self.deleteWindow) self.componentFrame = MessageComponentFrame(self) self.componentFrame.frame.grid(row=0, sticky=NSEW, padx=4, pady=4) self.okCancelFrame = MessageComponentOkCancelFrame(self) self.okCancelFrame.frame.grid(row=2, column=0, padx=4, pady=4, sticky=E) self.master.deiconify() self.master.mainloop() def deleteWindow(self): self.master.destroy() self.parentWindow.lift() self.parentWindow.wm_attributes("-topmost", 1) self.parentWindow.grab_set() def returnMessageComponent(self): if validate(self.componentFrame, self.master): if self.existingMessagePart: self.parent.messageMakerPartFrame.parent.message.parts[ self.index] = MessagePart( self.componentFrame.componentType.get(), self.index, self.componentFrame.getValue()) else: self.existingMessagePart = MessagePart( self.componentFrame.componentType.get(), self.index, self.componentFrame.getValue()) self.parent.messageMakerPartFrame.parent.message.parts.append( self.existingMessagePart) self.parent.populateListbox( self.parent.messageMakerPartFrame.parent.message.parts) self.deleteWindow()
def checkSettingsBeforePrint(self): if self.selectedPrinter.get() != '' and self.PDFs != None : printingThread = threading.Thread(target=self.printFiles) printingThread.start() else: if self.selectedPrinter.get() == '': posx = 500 posy = 400 sizex = 500 sizey = 100 top = Toplevel() top.grid_rowconfigure(0,weigh=1) top.grid_columnconfigure(0, weight=1) top.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy)) top.title("Printer not set") msg = Message(top, text="Set the default printer in\nPrinter Settings.",width=200, pady=10) msg.grid(row=0, column=0,columnspan=5) button = Button(top,text="Ok", command=top.destroy) button.grid(row=1, column=0) self.current_window = top if self.runningInFrozen: top.iconbitmap(sys._MEIPASS+r"/emblem_print.ico") else: top.iconbitmap("emblem_print.ico") top.focus_force() top.bind("<FocusOut>", self.Alarm) return None elif self.PDFs == None: posx = 500 posy = 400 sizex = 500 sizey = 100 top = Toplevel() top.grid_rowconfigure(0,weigh=1) top.grid_columnconfigure(0, weight=1) top.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy)) top.title("No file loaded") msg = Message(top, text="Browse for a file before printing.",width=200, pady=10) msg.grid(row=0, column=0,columnspan=5) button = Button(top,text="Ok", command=top.destroy) button.grid(row=1, column=0) self.current_window = top if self.runningInFrozen: top.iconbitmap(sys._MEIPASS+r"/emblem_print.ico") else: top.iconbitmap("emblem_print.ico") top.focus_force() top.bind("<FocusOut>", self.Alarm) return None
def createPopup(self, title): # Variables popup = Toplevel() # Attributes popup.title(title) popup.geometry("350x150") popup.resizable(width = False, height = False) popup.configure(background = '#f2f2f2') popup.lift() popup.focus_force() popup.attributes('-topmost', True) return popup
def showVariant(root): varform = Toplevel(root) varform.geometry('400x180') varform.focus_force() listbox = Listbox(varform, width=10, height=2, font=('13')) listbox.bind('<<ListboxSelect>>', lambda event, arg=listbox:select_item(event, arg)) listbox.place(x=150, y=20) for item in listbox_items: listbox.insert(END, item) btn1 = Button(varform, text="Continue", width=15, height=3, command=lambda:gotoMain(root, varform)) btn1.place(x=50, y=80) btn2 = Button(varform, text="Exit", width=15, height=3, command=lambda:exitAll(root)) btn2.place(x=200, y=80)
def GetAnswer_in_GetAnswer(s, f): global calculation_info, ResistorNum, PointNum, clamp_num AnswerWindow = Toplevel(Resistor) AnswerWindow.grab_set() AnswerWindow.focus_force() AnswerWindow.minsize(width=200, height=40) AnswerWindow.maxsize(width=200, height=40) AnswerWindow.title('Answer') total_resistance = calculation(calculation_info, ResistorNum, PointNum, s, f) answer = Label(AnswerWindow, text='The total resistance of the circuit is\n' + str(round(total_resistance, 3)) + ' Ohm.') answer.place(x=0, y=0, width=200, height=40)
def wait_for_game_exit(self): """Pauses the game execution using a Toplevel widget until any key is pressed""" dlg = Toplevel(self.root, height=1, width=1) # Intercept close button dlg.protocol("WM_DELETE_WINDOW", dlg.destroy) # Deselect any active widgets dlg.focus_force() # Can't grab until window appears dlg.wait_visibility() # Ensure all input goes to our window dlg.grab_set() dlg.bind('<KeyPress>', lambda event: dlg.destroy()) # Block until window is destroyed dlg.wait_window() # Close the application exit(0)
def NOTE(): tp = Toplevel(sc) tp.title("Thank you xD") x = int(sc.winfo_screenwidth() / 2) - int(250 / 2) y = int(sc.winfo_screenheight() / 2) - int(50 / 2) tp.geometry(f"250x50+{x}+{y}") img = Image.open("Heart.png").resize((16, 16)) img = ImageTk.PhotoImage(img) tp.img = img tp["bg"] = "green4" tp.overrideredirect(1) Label(tp, text=" صلي علي الحبيب ", font=("Arial", 12, "bold")).place(x=55, y=13, width=150, height=25) Label(tp, image=img).place(x=60, y=16) Label(tp, image=img).place(x=180, y=16) tp.focus_force() sc.withdraw() sc.after(5000, sc.destroy)
class OperationsMenu: """Generates Actions menu with cascades""" def __init__(self, parent, class_, name): self.class_ = class_ self.name = name self.parent = parent self.filewin = None self.parent.add_command(label=self.name, command=self.invoking_pub) def creating_toplevel(self, menu, name): """Generates top-level windows""" self.filewin = Toplevel(menu) self.filewin.focus_force() self.filewin.grab_set() self.filewin.title(name) self.filewin.resizable(width=False, height=False) self.class_(self.filewin, open_project_class.OpenProject.secured_project_path) def invoking_pub(self): """Translates class to the top-level window""" self.creating_toplevel(self.parent, self.name)
def show_setting(root): global exe global PAL PALL, exe = read_ini() top = Toplevel(root, takefocus=True) top.focus_force() top.title("Setting ORCA-Q") top.iconbitmap("icons\\setting.ico") top.geometry("310x180") top.resizable(0,0) top.grab_set() top_frame = Frame(top, width=100, height=300) top_frame.pack() pall = IntVar(value=(PALL-1)) top_qt = Label(top_frame, text="\nRun in series or parallel?") top_qt.grid(row=1, column=0, sticky="w") top_rb1 = ttk.Radiobutton(top_frame, text="Serie", value=0, variable=pall) top_rb1.grid(row=2, column=0) top_rb2 = ttk.Radiobutton(top_frame, text="Parallel", value=1, variable=pall) top_rb2.grid(row=2, column=1) top_dir = Label(top_frame, text="\nORCA Path:") top_dir.grid(row=4, column=0, sticky="w") et_top = ttk.Entry(top_frame, width=33) et_top.grid(row=5, column=0, columnspan=2, sticky="e") et_top.insert("end", exe) bt_top = ttk.Button(top_frame, text="Browse...", command=lambda:open_dirORCA(et_top)) bt_top.grid(row=5, column=2, sticky="w") #print(pall.get()) spe = Label(top_frame) spe.grid(row=6, column=0) bt_save = ttk.Button(top_frame, text="Save", command=lambda:save_ini(pall)) bt_save.grid(row=7, column=0, columnspan=4)
class SettingsWindow: def __init__(self, parent): self.master = Toplevel(parent) self.master.withdraw() self.master.geometry('+{x}+{y}'.format(x=parent.winfo_x(), y=parent.winfo_y())) self.master.wm_attributes("-topmost", 1) self.master.focus_force() self.master.wm_title("StreamTicker Settings") self.master.iconbitmap("imagefiles/stIcon.ico") self.master.resizable(False, False) self.master.grab_set() self.parent = parent self.fields = SettingsGUIFields() self.mFrame = SettingsMessageFrame(self.master, self.fields) self.mFrame.frame.grid(row=0, column=0, rowspan=3, sticky=NSEW, padx=4, pady=4) self.bgFrame = SettingsBackgroundFrame(self, self.fields) self.bgFrame.frame.grid(row=0, column=1, sticky=NSEW, padx=4, pady=4) self.sFrame = SettingsWindowFrame(self.master, self.fields) self.sFrame.frame.grid(row=1, column=1, sticky=NSEW, padx=4, pady=4) self.okFrame = OkCancelFrame(self) self.okFrame.frame.grid(row=2, column=1, sticky=SE, padx=4, pady=4) self.fields.loadSettings(self.master, self.parent, self.mFrame, self.bgFrame) self.master.deiconify() self.master.mainloop()
def rightCWindow(shit, editor, count=0): #---------search function------------- count = 0 framess = Toplevel() #framess = tkinter.Frame(popup) searchbox = tkinter.Entry(framess) searchbox.grid() #check = tkinter.Frame(popup) tkinter.intvar = count linelabel = tkinter.Label(framess, text='Navigate with index from index') linelabel.grid() nelabel = tkinter.Label(framess, text='Find Text') nelabel.grid() Cvalue = tkinter.Entry(framess) Cvalue.focus() Cvalue.grid() framess.after(500, lambda: framess.focus_force()) searchbox.after(700, lambda: searchbox.focus_force()) Cvalue.insert('end', str(count)) label = tkinter.Label(framess, text='jump to line') label.grid() thecount = lambda: navigation.count(Cvalue) butts2 = tkinter.Button(framess, foreground='blue', text='+', command=thecount) butts2.grid() tempfunc = lambda: controlers.searched( widget=searchbox, editor=editor, butts=Cvalue, linelabel=linelabel) butts = tkinter.Button(framess, foreground='blue', text='search', width=40, command=tempfunc) butts.grid() removeit = lambda: editor.tag_remove('highlight', '1.0', 'end') clearbutts = tkinter.Button(framess, width=40, foreground='blue', text='clear', command=removeit) clearbutts.grid()
def choise_residues(self, win: tk.Toplevel = None): """ :param win: """ if win: win.destroy() win = tk.Toplevel(self) win.title("Choice chains") self.resizable(False, False) win.transient(self) win.grab_set() win.focus_force() x = self.winfo_x() + self.winfo_width() // 2 y = self.winfo_y() + self.winfo_height() // 2 win.wm_geometry("+{:d}+{:d}".format(x, y)) win.title("Choice residues") fra1 = tk.Frame(win) fra1.grid(row=0, column=0) tx = tk.Text(fra1, width=30, height=8, wrap=tk.WORD) scr = tk.Scrollbar(fra1, command=self.tx.yview) tx.configure(yscrollcommand=scr.set) tx.pack(side=tk.LEFT) scr.pack(side=tk.RIGHT, fill=tk.Y) tx.bind('<Enter>', lambda e: self._bound_to_mousewheel(e, tx)) tx.bind('<Leave>', self._unbound_to_mousewheel) fra2 = tk.Frame(win) fra2.grid(row=1, column=0) butChoice = tk.Button(fra2, text='Choice', command=lambda: self.parse_pdb_main( residues=tx.get('1.0', tk.END), win=win)) butChoice.grid(row=0, column=0, pady=2) butCancel = tk.Button(fra2, text='Cancel', command=lambda: self.parse_pdb_main(win=win)) butCancel.grid(row=0, column=1, pady=2)
def _autocomplete(self, event): if not self._autocomplete_list or len(self._autocomplete_list) == 0: return index = self._tk.index(INSERT).split(".") self._text_index = '.'.join(index) tw = Toplevel(self._tk) tw.wm_overrideredirect(True) font = self._get_font() font_size = int(font.cget("size")) tw.geometry( f"+{ self._tk.winfo_rootx() + int(index[1]) * int(font_size / 2) }+{ self._tk.winfo_rooty() + int(index[0]) * font_size }" ) self._listbox = AutocompleteEntryListbox( tw, font=font, allow_other_values=False, completevalues=[v["name"] for v in self._autocomplete_list]) self._listbox.pack() tw.lift() tw.focus_force() tw.grab_set() tw.grab_release() self._listbox.focus_force() self._listbox.listbox.bind("<Double-Button-1>", self._autocomplete_selected) self._listbox.entry.bind("<Return>", self._autocomplete_selected) self._listbox.bind("<Leave>", self._autocomplete_destroy) self._listbox.bind("<Escape>", self._autocomplete_destroy) self._autocomplete_window = tw
def popup_window( self, text, filename ) : top = Toplevel() info = LabelFrame(top, text=text )#"Group Information") info_text = Text(info, width=50, height=8, #bg=projectBgColor, #fg=projectFgColor, font=("nimbus mono bold","11") ) def savefunc() : self.writepaste( filename, info_text ) def loadfunc() : self.readpaste( filename, info_text ) info_save_button = Button(info, text="Save", command = savefunc ) info_load_button = Button(info, text="Load", command = loadfunc ) #self.pairs_load_button.pack( side=BOTTOM, padx=5, pady=5 ) #self.pairs_save_button.pack( side=BOTTOM, padx=5, pady=5 ) info_load_button.grid( row=5, column=5, padx=10, pady=5 ) info_save_button.grid( row=5, column=6, padx=10, pady=5 ) info_text.grid(row=1, rowspan=3, column=1, columnspan=7, padx=5, pady=5 ) info.grid(row=7,column=0, columnspan=6, sticky=W, padx=20, pady=10 ) top.focus_force()
class resistor: num = 1 xbody = 170 ybody = 190 xstart = 0 ystart = 0 xend = 0 yend = 0 startpoint = 0 endpoint = 1 resistance = 1 data = {'x': 0, 'y': 0} def load(self, ResistorCanvas, Resistor): global coord_points, resistance_label, resistors_resistances, calculation_info, rsave_info resistors_resistances.append(self.resistance) label_rewrite(resistors_resistances) calculation_info.append( [self.startpoint, self.endpoint, self.resistance]) if self.startpoint == 0: self.xstart = coord_points[0][0] self.ystart = coord_points[0][1] if self.endpoint == 1: self.xend = coord_points[1][0] self.yend = coord_points[1][1] if self.startpoint == 1: self.xstart = coord_points[1][0] self.ystart = coord_points[1][1] if self.endpoint == 0: self.xend = coord_points[0][0] self.yend = coord_points[0][1] self.line1 = ResistorCanvas.create_line(self.xstart, self.ystart, self.xbody, self.ybody + 10, width=3) self.line2 = ResistorCanvas.create_line(self.xbody + 40, self.ybody + 10, self.xend, self.yend, width=3) self.get1 = ResistorCanvas.create_oval(self.xstart + 3, self.ystart + 3, self.xstart - 3, self.ystart - 3, width=0, tags='get1' + str(self.num), fill='black') self.get2 = ResistorCanvas.create_oval(self.xend + 3, self.yend + 3, self.xend - 3, self.yend - 3, width=0, tags='get2' + str(self.num), fill='black') self.body = ResistorCanvas.create_rectangle(self.xbody, self.ybody, self.xbody + 40, self.ybody + 20, width=3, fill='white', tags='resistor' + str(self.num)) self.resistance_text = ResistorCanvas.create_text( self.xbody + 20, self.ybody + 10, text='R' + str(self.num), justify='center', tags='resistor' + str(self.num)) ResistorCanvas.tag_bind('resistor' + str(self.num), '<ButtonPress-1>', self.body_press) ResistorCanvas.tag_bind('resistor' + str(self.num), '<ButtonRelease-1>', self.body_release) ResistorCanvas.tag_bind('resistor' + str(self.num), '<B1-Motion>', self.body_motion) ResistorCanvas.tag_bind('resistor' + str(self.num), '<Button-3>', self.new_resistance) ResistorCanvas.tag_bind('get1' + str(self.num), '<ButtonPress-1>', self.get1_press) ResistorCanvas.tag_bind('get1' + str(self.num), '<ButtonRelease-1>', self.get1_release) ResistorCanvas.tag_bind('get1' + str(self.num), '<B1-Motion>', self.get1_motion) ResistorCanvas.tag_bind('get2' + str(self.num), '<ButtonPress-1>', self.get2_press) ResistorCanvas.tag_bind('get2' + str(self.num), '<ButtonRelease-1>', self.get2_release) ResistorCanvas.tag_bind('get2' + str(self.num), '<B1-Motion>', self.get2_motion) rsave_info.append([ self.xbody, self.ybody, self.xstart, self.ystart, self.xend, self.yend, self.startpoint, self.endpoint, self.resistance ]) def body_press(self, event): self.data['x'] = event.x self.data['y'] = event.y def body_release(self, event): self.data['x'] = 0 self.data['y'] = 0 ResistorCanvas.delete(self.get1) self.get1 = ResistorCanvas.create_oval(self.xstart + 3, self.ystart + 3, self.xstart - 3, self.ystart - 3, width=0, tags='get1' + str(self.num), fill='black') ResistorCanvas.delete(self.get2) self.get2 = ResistorCanvas.create_oval(self.xend + 3, self.yend + 3, self.xend - 3, self.yend - 3, width=0, tags='get2' + str(self.num), fill='black') ResistorCanvas.delete(self.body) self.body = ResistorCanvas.create_rectangle(self.xbody, self.ybody, self.xbody + 40, self.ybody + 20, width=3, fill='white', tags='resistor' + str(self.num)) ResistorCanvas.delete(self.resistance_text) self.resistance_text = ResistorCanvas.create_text( self.xbody + 20, self.ybody + 10, text='R' + str(self.num), justify='center', tags='resistor' + str(self.num)) def body_motion(self, event): global rsave_info if event.x > 0 and event.x < 400 and event.y > 0 and event.y < 400: ResistorCanvas.itemconfig(self.body, outline='gray', fill='gray') delta_x = event.x - self.data['x'] delta_y = event.y - self.data['y'] self.xbody += delta_x self.ybody += delta_y rsave_info[self.num][0] = self.xbody rsave_info[self.num][1] = self.ybody ResistorCanvas.move(self.body, delta_x, delta_y) ResistorCanvas.move(self.resistance_text, delta_x, delta_y) ResistorCanvas.delete(self.line1) ResistorCanvas.delete(self.line2) self.line1 = ResistorCanvas.create_line(self.xstart, self.ystart, self.xbody, self.ybody + 10, width=3) self.line2 = ResistorCanvas.create_line(self.xbody + 40, self.ybody + 10, self.xend, self.yend, width=3) ''' Can be this: ResistorCanvas.move(self.line1, delta_x, delta_y) ResistorCanvas.move(self.line2, delta_x, delta_y) ''' self.data['x'] = event.x self.data['y'] = event.y def new_resistance(self, event): self.ResistanceWindow = Toplevel(Resistor) self.ResistanceWindow.grab_set() self.ResistanceWindow.focus_force() self.ResistanceWindow.minsize(width=200, height=100) self.ResistanceWindow.maxsize(width=200, height=100) self.ResistanceWindow.title('Change resistance') self.info = Label( self.ResistanceWindow, text='Enter the resistance (in Ohms)\nof the resistor No ' + str(self.num) + ':') self.info.place(x=0, y=0, width=200, height=40) self.input = Entry(self.ResistanceWindow) self.input.place(x=0, y=40, width=200, height=20) self.OK_but = Button(self.ResistanceWindow, text='OK') self.OK_but.place(x=0, y=60, width=100, height=40) self.OK_but.bind('<Button-1>', self.OK_action) self.Cancel_but = Button(self.ResistanceWindow, text='Cancel') self.Cancel_but.place(x=100, y=60, width=100, height=40) self.Cancel_but.bind('<Button-1>', self.Cancel_action) self.ResistanceWindow.mainloop() def OK_action(self, event): global resistance_label, resistors_resistances resistance = self.input.get() try: resistance_in = float(self.input.get()) if resistance_in <= 0: raise ValueError self.resistance = resistance_in resistors_resistances[self.num - 1] = self.resistance label_rewrite(resistors_resistances) calculation_info[self.num - 1][2] = self.resistance rsave_info[self.num][8] = self.resistance self.ResistanceWindow.destroy() except ValueError: self.ResistanceWindow.destroy() def Cancel_action(self, event): self.ResistanceWindow.destroy() def get1_press(self, event): self.data['x'] = event.x self.data['y'] = event.y def get1_release(self, event): global coord_points closest_point_num = closest_item(self.data['x'], self.data['y'], coord_points) self.startpoint = closest_point_num rsave_info[self.num][6] = self.startpoint calculation_info[self.num - 1][0] = self.startpoint delta_x = coord_points[closest_point_num][0] - self.data['x'] delta_y = coord_points[closest_point_num][1] - self.data['y'] self.xstart += delta_x self.ystart += delta_y rsave_info[self.num][2] = self.xstart rsave_info[self.num][3] = self.ystart ResistorCanvas.delete(self.line1) self.line1 = ResistorCanvas.create_line(self.xstart, self.ystart, self.xbody, self.ybody + 10, width=3) self.data['x'] = 0 self.data['y'] = 0 ResistorCanvas.delete(self.get1) self.get1 = ResistorCanvas.create_oval(self.xstart + 3, self.ystart + 3, self.xstart - 3, self.ystart - 3, width=0, tags='get1' + str(self.num), fill='black') ResistorCanvas.delete(self.body) self.body = ResistorCanvas.create_rectangle(self.xbody, self.ybody, self.xbody + 40, self.ybody + 20, width=3, fill='white', tags='resistor' + str(self.num)) ResistorCanvas.delete(self.resistance_text) self.resistance_text = ResistorCanvas.create_text( self.xbody + 20, self.ybody + 10, text='R' + str(self.num), justify='center', tags='resistor' + str(self.num)) def get1_motion(self, event): if event.x > 0 and event.x < 400 and event.y > 0 and event.y < 400: delta_x = event.x - self.data['x'] delta_y = event.y - self.data['y'] self.xstart += delta_x self.ystart += delta_y rsave_info[self.num][2] = self.xstart rsave_info[self.num][3] = self.ystart ResistorCanvas.move(self.get1, delta_x, delta_y) ResistorCanvas.delete(self.line1) self.line1 = ResistorCanvas.create_line(self.xstart, self.ystart, self.xbody, self.ybody + 10, width=3) ResistorCanvas.delete(self.body) self.body = ResistorCanvas.create_rectangle(self.xbody, self.ybody, self.xbody + 40, self.ybody + 20, width=3, fill='white', tags='resistor' + str(self.num)) ResistorCanvas.delete(self.resistance_text) self.resistance_text = ResistorCanvas.create_text( self.xbody + 20, self.ybody + 10, text='R' + str(self.num), justify='center', tags='resistor' + str(self.num)) self.data['x'] = event.x self.data['y'] = event.y def get2_press(self, event): self.data['x'] = event.x self.data['y'] = event.y def get2_release(self, event): global coord_points closest_point_num = closest_item(self.data['x'], self.data['y'], coord_points) self.endpoint = closest_point_num rsave_info[self.num][7] = self.endpoint calculation_info[self.num - 1][1] = self.endpoint delta_x = coord_points[closest_point_num][0] - self.data['x'] delta_y = coord_points[closest_point_num][1] - self.data['y'] self.xend += delta_x self.yend += delta_y rsave_info[self.num][4] = self.xend rsave_info[self.num][5] = self.yend ResistorCanvas.move(self.get2, delta_x, delta_y) ResistorCanvas.delete(self.line2) self.line2 = ResistorCanvas.create_line(self.xbody + 40, self.ybody + 10, self.xend, self.yend, width=3) self.data['x'] = 0 self.data['y'] = 0 ResistorCanvas.delete(self.get2) self.get2 = ResistorCanvas.create_oval(self.xend + 3, self.yend + 3, self.xend - 3, self.yend - 3, width=0, tags='get2' + str(self.num), fill='black') ResistorCanvas.delete(self.body) self.body = ResistorCanvas.create_rectangle(self.xbody, self.ybody, self.xbody + 40, self.ybody + 20, width=3, fill='white', tags='resistor' + str(self.num)) ResistorCanvas.delete(self.resistance_text) self.resistance_text = ResistorCanvas.create_text( self.xbody + 20, self.ybody + 10, text='R' + str(self.num), justify='center', tags='resistor' + str(self.num)) def get2_motion(self, event): if event.x > 0 and event.x < 400 and event.y > 0 and event.y < 400: delta_x = event.x - self.data['x'] delta_y = event.y - self.data['y'] self.xend += delta_x self.yend += delta_y rsave_info[self.num][4] = self.xend rsave_info[self.num][5] = self.yend ResistorCanvas.move(self.get2, delta_x, delta_y) ResistorCanvas.delete(self.line2) self.line2 = ResistorCanvas.create_line(self.xbody + 40, self.ybody + 10, self.xend, self.yend, width=3) ResistorCanvas.delete(self.body) self.body = ResistorCanvas.create_rectangle(self.xbody, self.ybody, self.xbody + 40, self.ybody + 20, width=3, fill='white', tags='resistor' + str(self.num)) ResistorCanvas.delete(self.resistance_text) self.resistance_text = ResistorCanvas.create_text( self.xbody + 20, self.ybody + 10, text='R' + str(self.num), justify='center', tags='resistor' + str(self.num)) self.data['x'] = event.x self.data['y'] = event.y
def popup_window_contrast(self) : text = "Comparing ChIP-seq Peaks" contrast_fn = join(self.workpath.get(),self.contrast_fn) peakinfo_fn = join(self.workpath.get(),self.peakinfo_fn) NA='N/A' try : groups = list(set([l.split('\t')[-1].strip() for l in open(peakinfo_fn) if l.split('\t')[-1].strip()])) if len(groups) < 2 : showwarning( 'WARNING!', "More than one groups need to be fefined in Peak Information File!" ) print( 'groups:', groups ) return except IOError : showerror( 'Error', "Did you set peak information?" ) print('Error:', 'Cannot process peakcall.tab file:') return top = Toplevel() info = LabelFrame(top, text=text )#"Group Information") print( groups ) contrast_vars = [] contrast_menus = [] n = 0 groups.insert(0, NA) for i in range( int((len(groups)-1)*(len(groups)-2)/2) ): n = n + 1 v1, v2 = StringVar(), StringVar() contrast_vars.append( [v1, v2] ) o1, o2 = OptionMenu(info, v1, *groups), OptionMenu(info, v2, *groups) contrast_menus.append( [o1, o2] ) v1.set(NA) v2.set(NA) vslabel = Label(info, text=" VS ") o1.grid( row=n, column=0, padx=4, pady=1 ) o2.grid( row=n, column=2, padx=4, pady=1 ) vslabel.grid( row=n, column=1, padx=4, pady=1 ) def savefunc() : info_text = StringIO() for v1, v2 in contrast_vars : v1 = v1.get() if v1.get() != NA else "" v2 = v2.get() if v2.get() != NA else "" if v1 and v2 : pass elif v1 or v2 : showerror( 'Error', "None or Both columns should be selected!" ) return else: continue print( v1, v2, file=info_text, sep="\t" ) fp = open( contrast_fn, 'w' ) fp.write( info_text.getvalue() ) fp.close() def loadfunc() : #self.readpaste( filename, info_text ) for i, l in enumerate(open( contrast_fn )) : v1, v2 = l.split('\t') v1 = v1.strip() v2 = v2.strip() if v1 : try : assert v1 in groups except : showwarning('WARNING', 'Group name is not in the selection list!' ) print( 'v1:',v1 ) print( 'group:', groups ) continue if v2 : try: assert v2 in groups except : showwarning('WARNING', 'Group name is not in the selection list!' ) print( 'v2:',v2 ) print( 'group:', groups ) continue contrast_vars[i][0].set(v1) contrast_vars[i][1].set(v2) def clearfunc() : for v1, v2 in contrast_vars : v1.set(NA) v2.set(NA) info_clear_button = Button(top, text="Clear", command = clearfunc ) info_save_button = Button(top, text="Save", command = savefunc ) info_load_button = Button(top, text="Load", command = loadfunc ) #self.pairs_load_button.pack( side=BOTTOM, padx=5, pady=5 ) #self.pairs_save_button.pack( side=BOTTOM, padx=5, pady=5 ) info_clear_button.grid( row=5, column=3, padx=10, pady=5 ) info_load_button.grid( row=5, column=4, padx=10, pady=5 ) info_save_button.grid( row=5, column=5, padx=10, pady=5 ) info.grid(row=7,column=0, columnspan=6, sticky=W, padx=20, pady=10 ) top.focus_force()
def popup_window_peakinfo( self, text, filename ) : NA = 'N/A' selections = [fn.split('.R1.fastq.gz')[0] for fn in self.datafiles if fn.endswith( ".R1.fastq.gz" )] ################################ #check availablity of the files before moving on! if not selections : showerror( "No FASTQ files available matching the pattern *.R1.fastq.gz" ) return ################################ selections.insert(0, NA) #Adding N/A for the groups where no input is available groups = ['Grp%d'%i for i in range(1, len(selections)+1)] ##checking for debugging purpose print( selections ) assert len(selections) == len(set(selections)) ## top = Toplevel() info = LabelFrame(top, text=text )#"Group Information") chip_vars = [ StringVar() for s in selections[1:] ] input_vars = [ StringVar() for s in selections[1:] ] group_vars = [ StringVar() for s in selections[1:] ] chip_menus = [OptionMenu(info,var,*selections) for var in chip_vars] input_menus = [OptionMenu(info,var,*selections) for var in input_vars] group_menus = [OptionMenu(info,var,*groups) for var in group_vars] group_entries = [Entry(info, bd=2, width=8, textvariable=var) for var in group_vars] chiplabel = Label(info, text= "ChIP Names") inputlabel = Label(info, text="Input Names") grouplabel = Label(info, text="Group Names") chiplabel.grid( row = 0, column = 1, padx=4, pady=1) inputlabel.grid( row = 0, column = 2, padx=4, pady=1) grouplabel.grid( row = 0, column = 3, padx=4, pady=1 ) for i, (chvar, invar) in enumerate(zip(chip_vars, input_vars)) : chvar.set(selections[0]) invar.set(selections[0]) chip_menus[i].grid( row = i+1, column = 1, padx=4, pady=1 ) input_menus[i].grid( row = i+1, column = 2, padx=4, pady=1 ) group_entries[i].grid( row = i+1, column = 3, padx=4, pady=1 ) group_menus[i].grid( row = i+1, column = 4, padx=4, pady=1 ) def savefunc() : info_text = StringIO() for v1, v2, v3 in zip( chip_vars, input_vars, group_vars ) : v1 = v1.get().strip() if v1.get().strip() != NA else "" if not v1 : continue v2 = v2.get().strip() if v2.get().strip() != NA else "" v3 = v3.get().strip() if v3.get().strip() != NA else "" if not v3 : showerror( "Error", "Missing Replicate group name detected.\nReplicate group names should be given!" ) print( "Error", "Missing Replicate group name detected.\nReplicate group names should be given!" ) return print( v1, v2, v3, file=info_text, sep="\t" ) fp = open( filename, 'w' ) fp.write( info_text.getvalue() ) fp.close() def loadfunc() : if not exists(filename) : print( filename, 'does not exists!' ) return for i, l in enumerate(open( filename )) : v1, v2, v3 = l.split('\t') if v1 : try : assert v1 in selections except : showwarning('WARNING', 'ChIP name is not in the selection list!' ) print( 'v1:',v1 ) print( 'selection:', selection ) continue if v2 : try: assert v2 in selections except : showwarning('WARNING', 'Input name is not in the selection list!' ) print( 'v2:',v2 ) print( 'selection:', selection ) return chip_vars[i].set(v1.strip()) input_vars[i].set(v2.strip()) group_vars[i].set(v3.strip()) def clearfunc() : for i, (chvar, invar, grvar) in enumerate(zip(chip_vars, input_vars, group_vars)) : chvar.set(selections[0]) invar.set(selections[0]) grvar.set('') info_clear_button = Button(top, text="Clear", command = clearfunc ) info_save_button = Button(top, text="Save", command = savefunc ) info_load_button = Button(top, text="Load", command = loadfunc ) #self.pairs_load_button.pack( side=BOTTOM, padx=5, pady=5 ) #self.pairs_save_button.pack( side=BOTTOM, padx=5, pady=5 ) info_clear_button.grid( row=5, column=3, padx=10, pady=5 ) info_load_button.grid( row=5, column=4, padx=10, pady=5 ) info_save_button.grid( row=5, column=5, padx=10, pady=5 ) info.grid(row=7,column=0, columnspan=6, sticky=W, padx=20, pady=10 ) top.focus_force()
class MessageMakerWindow: def __init__(self, listFrame, message: Message, index: int): self.master = Toplevel(listFrame.window.master) self.master.withdraw() self.listFrame = listFrame self.parent = listFrame.window.master self.parentWindow = listFrame.window self.message = deepcopy(message) if not self.message: self.isNewMessage = True self.message = Message() else: self.isNewMessage = False self.message.sortParts() self.index = index self.master.geometry('+{x}+{y}'.format(x=self.parent.winfo_x() + 10, y=self.parent.winfo_y() + 10)) self.master.wm_attributes("-topmost", 1) self.master.focus_force() self.master.wm_title("StreamTicker Message Maker") self.master.iconbitmap("imagefiles/stIcon.ico") self.master.resizable(False, False) self.master.grab_set() self.master.protocol("WM_DELETE_WINDOW", self.deleteWindow) self.fields = GlobalMessageSettings() self.setGlobalMessageSettings() self.mmFrame = MessageMakerFrame(self.master, self.message) self.mmFrame.frame.grid(row=0, column=0, sticky=NSEW, columnspan=2, padx=4, pady=4) self.partsFrame = MessageMakerPartFrame(self) self.partsFrame.frame.grid(row=1, column=0, sticky=NSEW, columnspan=2, padx=4, pady=4) self.globalMessageSettingsFrame = SettingsMessageFrame(self.master, self.fields) self.globalMessageSettingsFrame.frame.grid(row=2, column=1, sticky=NSEW, padx=(0, 4), pady=4) self.overrideFrame = OverrideFrame(self.master, self.globalMessageSettingsFrame, self.listFrame.window.window.settings) self.overrideFrame.frame.grid(row=2, column=0, sticky=NSEW, padx=4, pady=4) self.disableGlobalMessageFields() self.okCancelFrame = MessageMakerOkCancelFrame(self) self.okCancelFrame.frame.grid(row=3, column=0, columnspan=2, padx=4, pady=4, sticky=E) self.applyOverrides() self.master.deiconify() self.master.mainloop() def deleteWindow(self): self.master.destroy() self.parent.lift() self.parent.wm_attributes("-topmost", 1) self.parent.grab_set() def applyOverrides(self): overrides = self.message.overrides if overrides: if overrides.duration: self.fields.VAR_ENTRY_MESSAGE_DURATION.set(overrides.duration) self.overrideFrame.overrideDuration.set(True) self.overrideFrame.gmsFrame.ENTRY_MESSAGE_DURATION.configure(state=NORMAL) if overrides.intermission: self.fields.VAR_ENTRY_MESSAGE_INTERMISSION.set(overrides.intermission) self.overrideFrame.overrideIntermission.set(True) self.overrideFrame.gmsFrame.ENTRY_MESSAGE_INTERMISSION.configure(state=NORMAL) if overrides.scrollSpeed: self.fields.VAR_ENTRY_MOVE_ALL_ON_LINE_DELAY.set(overrides.scrollSpeed) self.overrideFrame.overrideScrollSpeed.set(True) self.overrideFrame.gmsFrame.entryMoveAllOnLineDelay.configure(state=NORMAL) if overrides.font: self.fields.VAR_FONT_COMBO_BOX.set(overrides.font) self.overrideFrame.overrideFont.set(True) self.overrideFrame.gmsFrame.FONT_COMBO_BOX.configure(state="readonly") if overrides.fontColor: self.fields.VAR_LABEL_MESSAGE_COLOR_FOREGROUND = overrides.fontColor self.fields.VAR_LABEL_MESSAGE_COLOR_TEXT.set(overrides.fontColor) self.overrideFrame.overrideFontColor.set(True) self.overrideFrame.gmsFrame.BUTTON_MESSAGE_COLOR.config(state=NORMAL) self.globalMessageSettingsFrame.CANVAS_MESSAGE_COLOR.itemconfig(self.globalMessageSettingsFrame.RECTANGLE_MESSAGE_COLOR, fill=self.fields.VAR_LABEL_MESSAGE_COLOR_FOREGROUND) if overrides.fontSize: self.fields.VAR_ENTRY_NORMAL_FONT_SIZE.set(overrides.fontSize) self.overrideFrame.overrideFontSize.set(True) self.overrideFrame.gmsFrame.ENTRY_NORMAL_FONT_SIZE.configure(state=NORMAL) if overrides.arrival: self.fields.VAR_ARRIVAL.set(overrides.arrival) self.overrideFrame.overrideArrival.set(True) self.overrideFrame.gmsFrame.ARRIVAL_COMBO_BOX.config(state="readonly") if overrides.departure: self.fields.VAR_DEPARTURE.set(overrides.departure) self.overrideFrame.overrideDeparture.set(True) self.overrideFrame.gmsFrame.DEPARTURE_COMBO_BOX.config(state="readonly") if overrides.bold: self.fields.VAR_FONT_IS_BOLD.set(overrides.bold) self.overrideFrame.overrideFontStyle.set(True) self.configureFontStyleFields() if overrides.italic: self.fields.VAR_FONT_IS_ITALIC.set(overrides.italic) self.overrideFrame.overrideFontStyle.set(True) self.configureFontStyleFields() if overrides.overstrike: self.fields.VAR_FONT_IS_OVERSTRIKE.set(overrides.overstrike) self.overrideFrame.overrideFontStyle.set(True) self.configureFontStyleFields() if overrides.alignment: self.fields.VAR_ALIGNMENT.set(overrides.alignment) self.overrideFrame.overrideAlignment.set(True) self.overrideFrame.gmsFrame.ALIGNMENT_COMBO_BOX.config(state="readonly") def configureFontStyleFields(self): self.overrideFrame.gmsFrame.checkButtonBold.config(state=NORMAL) self.overrideFrame.gmsFrame.checkButtonItalic.config(state=NORMAL) self.overrideFrame.gmsFrame.checkButtonOverstrike.config(state=NORMAL) def setGlobalMessageSettings(self): gmSettings = self.listFrame.window.window.settings.messageSettings wSettings = self.listFrame.window.window.settings.windowSettings self.fields.VAR_ENTRY_MESSAGE_DURATION.set(gmSettings.duration) self.fields.VAR_ENTRY_MESSAGE_INTERMISSION.set(gmSettings.intermission) self.fields.VAR_FONT_COMBO_BOX.set(gmSettings.fontFace) self.fields.VAR_LABEL_MESSAGE_COLOR_FOREGROUND = gmSettings.color self.fields.VAR_LABEL_MESSAGE_COLOR_TEXT.set(gmSettings.color) self.fields.VAR_ENTRY_NORMAL_FONT_SIZE.set(gmSettings.fontSize) self.fields.VAR_ENTRY_MOVE_ALL_ON_LINE_DELAY.set(wSettings.moveAllOnLineDelay) self.fields.VAR_ARRIVAL.set(gmSettings.arrival) self.fields.VAR_DEPARTURE.set(gmSettings.departure) self.fields.VAR_FONT_IS_BOLD.set(gmSettings.bold) self.fields.VAR_FONT_IS_ITALIC.set(gmSettings.italic) self.fields.VAR_FONT_IS_OVERSTRIKE.set(gmSettings.overstrike) self.fields.VAR_ALIGNMENT.set(gmSettings.alignment) def disableGlobalMessageFields(self): for child in self.globalMessageSettingsFrame.frame.winfo_children(): if child.winfo_class() in ('Entry', 'Button', 'TCombobox', 'Checkbutton'): child.configure(state='disable') if child.winfo_class() == 'Frame': for grandchild in child.winfo_children(): if grandchild.winfo_class() in ('Entry', 'Button', 'TCombobox', 'Checkbutton'): grandchild.configure(state='disable') def updateMessage(self): if validateMessageMessageMaker(self.fields, self.master) and validateFontsMessageMaker(self.fields, self.master) and validate(self): override = Override() if self.overrideFrame.overrideDuration.get(): override.duration = self.globalMessageSettingsFrame.fields.VAR_ENTRY_MESSAGE_DURATION.get() if self.overrideFrame.overrideIntermission.get(): override.intermission = self.globalMessageSettingsFrame.fields.VAR_ENTRY_MESSAGE_INTERMISSION.get() if self.overrideFrame.overrideScrollSpeed.get(): override.scrollSpeed = self.globalMessageSettingsFrame.fields.VAR_ENTRY_MOVE_ALL_ON_LINE_DELAY.get() if self.overrideFrame.overrideFont.get(): override.font = self.globalMessageSettingsFrame.fields.VAR_FONT_COMBO_BOX.get() if self.overrideFrame.overrideFontSize.get(): override.fontSize = self.globalMessageSettingsFrame.fields.VAR_ENTRY_NORMAL_FONT_SIZE.get() if self.overrideFrame.overrideFontColor.get(): override.fontColor = self.globalMessageSettingsFrame.fields.VAR_LABEL_MESSAGE_COLOR_TEXT.get() if self.overrideFrame.overrideArrival.get(): override.arrival = self.globalMessageSettingsFrame.fields.VAR_ARRIVAL.get() if self.overrideFrame.overrideDeparture.get(): override.departure = self.globalMessageSettingsFrame.fields.VAR_DEPARTURE.get() if self.overrideFrame.overrideFontStyle.get(): override.bold = self.globalMessageSettingsFrame.fields.VAR_FONT_IS_BOLD.get() override.italic = self.globalMessageSettingsFrame.fields.VAR_FONT_IS_ITALIC.get() override.overstrike = self.globalMessageSettingsFrame.fields.VAR_FONT_IS_OVERSTRIKE.get() if self.overrideFrame.overrideAlignment.get(): override.alignment = self.globalMessageSettingsFrame.fields.VAR_ALIGNMENT.get() for part in self.message.parts: part.sortOrder = self.message.parts.index(part) + 1 newMessage = Message(self.mmFrame.nickname.get(), self.index, self.message.parts, override) if not self.isNewMessage: self.parentWindow.messages[self.index] = newMessage else: self.parentWindow.messages.append(newMessage) self.parentWindow.mlFrame.populateListbox(self.parentWindow.messages) self.master.destroy()
def popup_window_contrast(self): text = "Comparing ChIP-seq Peaks" contrast_fn = join(self.workpath.get(), self.contrast_fn) peakinfo_fn = join(self.workpath.get(), self.peakinfo_fn) NA = 'N/A' try: groups = list( set([ l.split('\t')[-1].strip() for l in open(peakinfo_fn) if l.split('\t')[-1].strip() ])) if len(groups) < 2: showwarning( 'WARNING!', "More than one groups need to be fefined in Peak Information File!" ) print('groups:', groups) return except IOError: showerror('Error', "Did you set peak information?") print('Error:', 'Cannot process peakcall.tab file:') return top = Toplevel() info = LabelFrame(top, text=text) #"Group Information") print(groups) contrast_vars = [] contrast_menus = [] n = 0 groups.insert(0, NA) for i in range(int((len(groups) - 1) * (len(groups) - 2) / 2)): n = n + 1 v1, v2 = StringVar(), StringVar() contrast_vars.append([v1, v2]) o1, o2 = OptionMenu(info, v1, *groups), OptionMenu(info, v2, *groups) contrast_menus.append([o1, o2]) v1.set(NA) v2.set(NA) vslabel = Label(info, text=" VS ") o1.grid(row=n, column=0, padx=4, pady=1) o2.grid(row=n, column=2, padx=4, pady=1) vslabel.grid(row=n, column=1, padx=4, pady=1) def savefunc(): info_text = StringIO() for v1, v2 in contrast_vars: v1 = v1.get() if v1.get() != NA else "" v2 = v2.get() if v2.get() != NA else "" if v1 and v2: pass elif v1 or v2: showerror('Error', "None or Both columns should be selected!") return else: continue print(v1, v2, file=info_text, sep="\t") fp = open(contrast_fn, 'w') fp.write(info_text.getvalue()) fp.close() def loadfunc(): #self.readpaste( filename, info_text ) for i, l in enumerate(open(contrast_fn)): v1, v2 = l.split('\t') v1 = v1.strip() v2 = v2.strip() if v1: try: assert v1 in groups except: showwarning( 'WARNING', 'Group name is not in the selection list!') print('v1:', v1) print('group:', groups) continue if v2: try: assert v2 in groups except: showwarning( 'WARNING', 'Group name is not in the selection list!') print('v2:', v2) print('group:', groups) continue contrast_vars[i][0].set(v1) contrast_vars[i][1].set(v2) def clearfunc(): for v1, v2 in contrast_vars: v1.set(NA) v2.set(NA) info_clear_button = Button(top, text="Clear", command=clearfunc) info_save_button = Button(top, text="Save", command=savefunc) info_load_button = Button(top, text="Load", command=loadfunc) #self.pairs_load_button.pack( side=BOTTOM, padx=5, pady=5 ) #self.pairs_save_button.pack( side=BOTTOM, padx=5, pady=5 ) info_clear_button.grid(row=5, column=3, padx=10, pady=5) info_load_button.grid(row=5, column=4, padx=10, pady=5) info_save_button.grid(row=5, column=5, padx=10, pady=5) info.grid(row=7, column=0, columnspan=6, sticky=W, padx=20, pady=10) top.focus_force()
class MyGUI(): def __init__(self, root, frame): self.root = root self.root.title("ClockPy") #self.root.resizable(0,0) self.root.maxsize(width=385, height=550) self.root.minsize(width=385, height=550) self.root.iconbitmap("./icons/clock.ico") self.frame = frame # ----------- Function Refresh Clock ----------- def tick(): time_string = time.strftime("%I:%M") time_string2 = time.strftime(":%S") time_day = time.strftime("%a, %d %B") time_m = time.strftime("%p") self.clock.config(text=time_string) self.clock_s.config(text=time_string2) self.clock_d.config(text=time_day) self.clock_m.config(text=time_m) self.clock.after(200, tick) # ----------- Function DataBASE ----------- #Load database db_name = 'database.db' # Operation database query = 'SELECT * FROM color' query_alarm = 'SELECT * FROM alarm' query2 = 'UPDATE color SET hexa=?' query_alarm2 = 'UPDATE alarm SET state=?' query_alarm3 = 'UPDATE alarm SET hours=?, minutes=?, meridiam=?' # Database Consult Update def db_query(query, parameters=(), alarm=None): with sqlite3.connect(db_name) as conn: cursor = conn.cursor() result = cursor.execute(query, parameters) conn.commit() if (parameters == ()): if (alarm == None): for row in result: return row[1] else: for row in result: return row[1:5] hexa_c = db_query(query) self.frame.config(width="385", height="550", bg=hexa_c) # ----------- Function Check Status Alarm ----------- def check_alarm(): self.data_alarm_check = db_query(query_alarm, alarm="Y") time_check_h = time.strftime("%I") time_check_m = time.strftime("%M") time_check_mr = time.strftime("%p") time_check_s = time.strftime("%S") if (self.data_alarm_check[0] < 10): hours_check = "0" + str(self.data_alarm_check[0]) else: hours_check = str(self.data_alarm_check[0]) if (self.data_alarm_check[1] < 10): minutes_check = "0" + str(self.data_alarm_check[1]) else: minutes_check = str(self.data_alarm_check[1]) # Check Alarm and playsound if (self.data_alarm_check[3] == "on"): if (time_check_s == "00"): if (time_check_h == hours_check): if (time_check_m == minutes_check): if (time_check_mr == self.data_alarm_check[2]): playsound("./sound/alarm_sound.mp3") self.root.deiconify() self.root.focus_set() self.root.after(1000, check_alarm) # ----------- Windows Clock Alarm ----------- def windows(): hexa_c = db_query(query) self.main_wn = Toplevel(self.root, takefocus=True, bg=hexa_c) self.main_wn.focus_force() self.main_wn.title("ClockPy Alarm") self.main_wn.geometry("320x158") self.main_wn.resizable(0, 0) self.main_wn.iconbitmap("./icons/clock.ico") self.main_wn.grab_set() self.date_alarm = db_query(query_alarm, alarm="Y") self.img_on = PhotoImage(file="./icons/on.png") self.img_off = PhotoImage(file="./icons/off.png") self.img_menu = PhotoImage(file="./icons/menu.png") self.switch = self.date_alarm[3] def check_state_alarm(): if (self.date_alarm[0] < 10): self.lb_hours.config(text="0" + str(self.date_alarm[0])) else: self.lb_hours.config(text=self.date_alarm[0]) if (self.date_alarm[1] < 10): self.lb_minutes.config(text=":0" + str(self.date_alarm[1])) else: self.lb_minutes.config(text=":" + str(self.date_alarm[1])) self.lb_meridiam.config(text=self.date_alarm[2]) if (self.switch == "on"): self.bt_switch.config(image=self.img_on) else: self.bt_switch.config(image=self.img_off) def change_switch(): if (self.switch == "off"): self.bt_switch.config(image=self.img_on) self.switch = "on" db_query(query_alarm2, ("on", )) else: self.bt_switch.config(image=self.img_off) self.switch = "off" db_query(query_alarm2, ("off", )) self.space_alarm = Frame(self.main_wn, width=300, height=100, bg="white") self.space_alarm.place(x=10, y=20) self.lb_hours = Label(self.space_alarm, font=("Roboto Light", 54), bg="white") self.lb_hours.place(x=10, y=0) self.lb_minutes = Label(self.space_alarm, font=("Roboto Light", 54), bg="white") self.lb_minutes.place(x=90, y=0) self.lb_meridiam = Label(self.space_alarm, font=("Roboto Light", 14), bg="white") self.lb_meridiam.place(x=190, y=15) self.bt_switch = Button(self.space_alarm, activebackground="white", command=lambda: change_switch()) self.bt_switch.config(bg="white", bd=0, highlightthickness=0, relief='flat') self.bt_switch.place(x=245, y=10) self.bt_config_alarm = Button(self.space_alarm, image=self.img_menu, activebackground="white") self.bt_config_alarm.config(bg="white", bd=0, highlightthickness=0, relief='flat', command=lambda: setting_alarm()) self.bt_config_alarm.place(x=250, y=55) check_state_alarm() # ----------- Windows Settings Alarm ----------- def setting_alarm(): self.settings_wn = Toplevel(self.main_wn, bg=hexa_c, takefocus=True) self.settings_wn.focus_force() self.settings_wn.geometry("470x165") self.settings_wn.iconbitmap("./icons/clock.ico") self.settings_wn.grab_set() self.settings_wn.resizable(0, 0) self.settings_wn.title("ClockPy Alarm") self.space_alarm2 = Frame(self.settings_wn, width=450, height=100, bg="white") self.space_alarm2.place(x=10, y=20) self.select_hours = Spinbox(self.space_alarm2, from_=1, to=12, width=2, font=("Roboto Light", 50), bd=0, relief='flat', activebackground="white", textvariable=2, state="readonly") self.select_hours.config(buttondownrelief="flat", readonlybackground="white") self.select_hours.place(x=10, y=5) self.select_minutes = Spinbox(self.space_alarm2, from_=00, to=59, format="%02.0f", width=2, font=("Roboto Light", 50), bd=0, relief='flat', activebackground="white") self.select_minutes.config(buttondownrelief="flat", readonlybackground="white", state="readonly") self.select_minutes.place(x=150, y=5) self.select_meridiam = Spinbox(self.space_alarm2, values=("AM", "PM"), width=3, font=("Roboto Light", 50), bd=0, relief='flat', activebackground="white") self.select_meridiam.config(buttondownrelief="flat", readonlybackground="white", state="readonly") self.select_meridiam.place(x=285, y=5) self.bt_save_sttg = Button(self.settings_wn, text="Save", font=("Roboto Light", 12), bd=0, relief="flat", bg="white", command=lambda: save_sttg()) self.bt_save_sttg.place(x=415, y=125) def save_sttg(): h = self.select_hours.get() m = self.select_minutes.get() md = self.select_meridiam.get() db_query(query_alarm3, ( h, m, md, )) self.date_alarm = db_query(query_alarm, alarm="Y") check_state_alarm() self.settings_wn.destroy() # ----------- Function Change Color ----------- def change_color(): rgb, hexa = askcolor() self.frame.config(bg=hexa) self.clock.config(bg=hexa) self.clock_s.config(bg=hexa) self.clock_m.config(bg=hexa) self.clock_d.config(bg=hexa) self.button1.config(bg=hexa, activebackground=hexa) self.button2.config(bg=hexa, activebackground=hexa) #self.lb.config(bg=hexa) # Update Value color database if (hexa != None): db_query(query2, (hexa, )) # ----------- Clock Configure ----------- # Clock Hours Minutes self.clock = Label(self.frame, font=("Roboto Light", 64), bg=hexa_c, foreground="white") self.clock.place(x=65, y=150) # Clock Seconds self.clock_s = Label(self.frame, font=("Roboto Light", 22), bg=hexa_c, foreground="white") self.clock_s.place(x=272, y=200) # Clock Meridiem self.clock_m = Label(self.frame, font=("Roboto Light", 22), bg=hexa_c, foreground="white") self.clock_m.place(x=272, y=165) # Day Month self.clock_d = Label(self.frame, font=("Roboto Light", 14), bg=hexa_c, foreground="white") self.clock_d.place(x=80, y=240) tick() check_alarm() # ----------- Button Change Color ----------- self.img = PhotoImage(file="./icons/color.png") self.img2 = PhotoImage(file="./icons/alarm.png") # Button Pallete Colors self.button1 = Button(self.frame, image=self.img, activebackground=hexa_c, command=lambda: change_color()) self.button1.config(bg=hexa_c, bd=0, highlightthickness=0, relief='flat') self.button1.place(x=5, y=505) # Button Settings self.button2 = Button(self.frame, image=self.img2, activebackground=hexa_c, command=lambda: windows()) self.button2.config(bg=hexa_c, bd=0, highlightthickness=0, relief='flat') self.button2.place(x=340, y=505) self.frame.pack()
# focus_toplevel.py from tkinter import Tk, Toplevel root = Tk() second_window = Toplevel() second_window.title('Second window') # Focus on window second_window.focus_force() root.mainloop()
def change_settings(self): win = Toplevel() win.lift() win.focus_force() win.grab_set() win.grab_release() dropdown_frame = Frame(win) dropdown_frame.pack() button_frame = Frame(win) button_frame.pack(pady=20) setting_frame = Frame(win) setting_frame.pack(pady=20) self.buttons = [None] * 26 rows = 13 self.combox = Combobox(dropdown_frame) self.combox.pack(side=LEFT) inis = glob("configs/*.ini") inis = [ini.split(".")[0].split("\\")[-1] for ini in inis] self.combox["values"] = inis self.loadbutton = Button( dropdown_frame, text="load", width=self.buttonwidth, command=self.loadprofile, ) self.loadbutton.pack(side=LEFT) self.savebutton = Button( dropdown_frame, text="save", width=self.buttonwidth, command=self.saveprofile, ) self.savebutton.pack(side=LEFT) for index, items in enumerate(self.mapping.controller_keyboard.items()): Label(button_frame, text=items[0], width=self.buttonwidth).grid( row=index % rows, column=int(index / rows) * 2 ) a = KeyMappingButton(button_frame, text=items[1], width=self.buttonwidth) if index >= 13: a.grid( row=index % rows, column=int(index / rows) * 2 + 1, padx=25, sticky="w", ) else: a.grid(row=index % rows, column=int(index / rows) * 2 + 1) self.buttons[index] = a confirm_button = Button( setting_frame, text="confirm", width=self.buttonwidth, command=lambda: self.confirm_setting(win, self.buttons), ) confirm_button.pack(side=LEFT) win.wm_title("Window")
class Sistema(): def __init__(self): self.root = Tk() self.root.configure(background='white') self.frame = ttk.Frame(self.root) self.frame.pack() """Cria o menu""" self.menu = Menu(self.root) self.menuArquivo = Menu(self.menu, tearoff=0) #self.menuArquivo.add_command(label="Membro") self.menuArquivo.add_command(label="Membro", command=self.showMembros) self.menuArquivo.add_command(label="Frequências", command=self.showFrequencias) self.menuArquivo.add_command(label="Imprimir Frequências", command=self.printFrequencias) #self.menuArquivo.add_command(label="Frequência") self.menuArquivo.add_command(label="Sobre") self.menuArquivo.add_separator() self.menuArquivo.add_command(label="Sair", command=self.root.quit) self.menu.add_cascade(label="Sistema", menu=self.menuArquivo) self.root.config(menu=self.menu) def showMembros(self): self.viewmembros = Toplevel(self.root) self.viewmembros.geometry("630x550") self.center(self.viewmembros) self.viewmembros.transient(self.root) self.viewmembros.resizable(False, False) self.viewmembros.focus_force() self.viewmembros.grab_set() formMember(self.viewmembros, mmember) def showFrequencias(self): self.viewfreq = Toplevel(self.root) self.viewfreq.geometry("760x355") #largura e altura (widthxhight) self.center(self.viewfreq) self.viewfreq.transient(self.root) self.viewfreq.resizable(False, False) self.viewfreq.focus_force() self.viewfreq.grab_set() formFrequencia(self.viewfreq, ffrequencia) def printFrequencias(self): self.printfreq = Toplevel(self.root) self.printfreq.geometry("760x355") #largura e altura (widthxhight) self.center(self.printfreq) self.printfreq.transient(self.root) self.printfreq.resizable(False, False) self.printfreq.focus_force() self.printfreq.grab_set() printFrequencia(self.printfreq, mmember, ffrequencia) def center(self, win): win.update_idletasks() width = win.winfo_width() frm_width = win.winfo_rootx() - win.winfo_x() win_width = width + 2 * frm_width height = win.winfo_height() titlebar_height = win.winfo_rooty() - win.winfo_y() win_height = height + titlebar_height + frm_width x = win.winfo_screenwidth() // 2 - win_width // 2 y = win.winfo_screenheight() // 2 - win_height // 2 win.geometry('{}x{}+{}+{}'.format(width, height, x, y)) win.deiconify() def start(self): self.root.title("Membros") self.root.geometry("600x240") self.root.deiconify() self.root.attributes('-alpha', 0.0) self.center(self.root) self.root.attributes('-alpha', 1.0) self.root.mainloop()
class myApp: def __init__(self): self.root = Tk() style = ttk.Style() style.configure("Treeview.Heading", font=(None, 11), background="green") self.config = ST.Setting(self.root) self.SelDriver = SeleniumProcessor.SeleniumDriver(self.config) self.POMTreeView = TreeProcessor.POMTree(self.config) self.XML = XMLProcessor.XML() self.treeFrame = None self.tree = None self.treeValues = None self.ScreenCoverWindow = None self.root.title("POM Manager") self.root.geometry('700x600') #MENU SECTION : to create Menu # File Menu menu = Menu(self.root) self.root.config(menu=menu) filemenu = Menu(menu) menu.add_cascade(label="File", menu=filemenu) filemenu.add_command(label="Create New POM..", command=self.NewFile) filemenu.add_command(label="Open POM...", command=self.OpenFile) filemenu.add_command(label="Save POM...", command=self.SaveFile) filemenu.add_command(label="Save as POM...", command=self.SaveFileAs) filemenu.add_separator() filemenu.add_command(label="Exit", command=self.root.destroy) toolmenu = Menu(menu) menu.add_cascade(label="Tool", menu=toolmenu) toolmenu.add_command(label="Settings", command=self.Settings) helpmenu = Menu(menu) menu.add_cascade(label="Help", menu=helpmenu) helpmenu.add_command(label="About...", command=self.About) self.root.grid_columnconfigure(0, weight=1) self.root.grid_rowconfigure(1, weight=1) top = ttk.Frame(self.root, height=200) top.grid_columnconfigure(1, weight=1) top.grid(column=0, row=0, pady=10, sticky='nsew') bottom = ttk.Frame(self.root) bottom.grid(column=0, row=1, sticky='nsew') bottom.grid_columnconfigure(0, weight=1, uniform="group1") bottom.grid_columnconfigure(1, weight=1, uniform="group1") bottom.grid_rowconfigure(0, weight=1) footer = ttk.Frame(bottom, height=120) Label(top, text='Enter Base URL :').grid(column=0, row=0) self.txtURL = Entry(top) self.txtURL.grid(column=1, row=0, sticky='we') browserCombo = ttk.Combobox(top, values=['Chrome', 'IE', 'Edge', 'FireFox'], state='readonly') browserCombo.set('Chrome') browserCombo.grid(column=2, row=0, padx=5) self.Launchbtn = ttk.Button( top, text="Launch", command=lambda: self.SelDriver.LaunchBrowser( browserCombo.get(), self.txtURL.get())) self.Launchbtn.grid(column=1, row=1, pady=5) self.root.bind("<Control-s>", lambda event: self.XML.saveXML(self.POMTreeView)) self.AddNewObjectButton = ttk.Button( footer, text='Add New Object ', command=lambda: self.enable_mouseposition()) self.AddNewObjectButton.grid(column=0, row=1, padx=5, pady=20) self.ManuallyAddobject = ttk.Button( footer, text='Add Object Manually', command=lambda: self.addobjectPropertiesManually()) self.ManuallyAddobject.grid(column=2, row=1, padx=5, pady=20) self.savebutton = ttk.Button( footer, text='Save', command=lambda: self.XML.saveXML(self.tree, self.POMTreeView)) self.savebutton.grid(column=3, row=1, padx=5, pady=20) self.AddToPageButton = ttk.Button( footer, text='Add With Delay', command=lambda: self.getDelayCoordinates()) self.AddToPageButton.grid(column=1, row=1, padx=5, pady=20) self.CancelButton = ttk.Button(footer, text='Cancel', command=self.root.destroy) self.CancelButton.grid(column=4, row=1, padx=5, pady=20) self.treeFrame = Frame(bottom, borderwidth=1, relief="solid") self.treeValues = Frame(bottom, borderwidth=1, relief="solid") self.treeFrame.grid_rowconfigure(0, weight=1) self.treeFrame.grid_columnconfigure(0, weight=1) self.treeFrame.grid(row=0, column=0, sticky='nsew') self.treeValues.grid(row=0, column=1, sticky='nsew') bottom.grid_rowconfigure(0, weight=1) footer.grid(column=0, row=1, columnspan=2) mainloop() try: self.SelDriver.quit() except AttributeError: None def NewFile(self): files = [('ORFile', '*.xml.')] file = asksaveasfile(title="Select folder", filetypes=files, defaultextension=files) self.XML.filePath = file.name self.XML.fileName = ((file.name).split('/')[-1]).split('.')[0] self.createPOMTree('newfile') def OpenFile(self): filePath = filedialog.askopenfilename() if len(filePath) > 4: self.XML = XMLProcessor.XML(filePath) if self.tree != None: self.tree.destroy() self.createPOMTree() self.AddToPageButton['state'] = 'normal' def About(self): print('This is a simple example of a menu!') def SaveFile(self): self.XML.saveXML(self.tree, self.POMTreeView) def SaveFileAs(self): self.XML.saveXML(self.tree, self.POMTreeView, 'newfile') #======================================================================= # self.tree.heading('#0', text=self.XML.fileName) #======================================================================= def Settings(self): self.config.displaySettingPanel() def cancelAddObject(self, topWindow): topWindow.destroy() def getDelayCoordinates(self): try: self.root.iconify() top = Toplevel() top.geometry("+%d+%d" % (0, 0)) top.title("Counter") top.attributes('-alpha', 0.5) v = Tkinter.IntVar() ttk.Label(top, text="**hover mouse to the object you want to add", font=('Arial', 8)).pack() text = ttk.Label(top, textvariable=v) text.config(font=("Courier", 50)) text.pack() for i in range(5, -1, -1): v.set(i) text.update() time.sleep(1) top.destroy() self.SelDriver.set_webElement(PYAUTO.position()) self.createAttributePanel('delayadd') except AttributeError: messagebox.showinfo( 'Driver Not Initiated', 'Driver is not initiated.\nPlease make sure browser is Launched using tool.' ) def enable_mouseposition(self, actionType=None): try: driver = self.SelDriver.driver driver.switch_to.window( driver.window_handles[len(driver.window_handles) - 1]) self.root.after(100, self.get_WebObject(actionType)) except AttributeError: Tkinter.messagebox.showinfo( 'Driver Not Initiated', 'Driver is not initiated. \nPlease make sure browser is launched using tool.' ) def get_WebObject(self, actionType): self.ScreenCoverWindow = Toplevel() self.root.iconify() self.ScreenCoverWindow.attributes('-topmost', True) self.ScreenCoverWindow.title("Object Properties") self.ScreenCoverWindow.attributes('-alpha', 0.2) self.ScreenCoverWindow.attributes("-fullscreen", True) self.ScreenCoverWindow.focus_force() self.ScreenCoverWindow.bind( "<Button-1>", lambda event: self.createAttributePanel(actionType, event)) def createAttributePanel(self, actionType=None, event=None): if actionType != 'delayadd': self.SelDriver.set_webElement((event.x, event.y), self.ScreenCoverWindow) attributePanelWindow = Toplevel() attributePanelWindow.geometry("600x500") attributePanelWindow.attributes('-topmost', True) attributePanelWindow.title("Object Properties") attributePanelWindow.grid_columnconfigure(0, weight=1) attributePanelWindow.grid_rowconfigure(0, weight=1) top = ttk.Frame(attributePanelWindow) top.grid(column=0, row=0, sticky='nsew') top.grid_columnconfigure(0, weight=1, uniform="group1") top.grid_columnconfigure(1, weight=1, uniform="group1") top.grid_rowconfigure(0, weight=1) self.attributeTreeFrame = Frame(top, borderwidth=1, relief="solid") self.attributetreeValues = Frame(top, borderwidth=1, relief='solid') self.attributeTreeFrame.grid_rowconfigure(0, weight=1) self.attributeTreeFrame.grid_columnconfigure(0, weight=1) self.attributeTreeFrame.grid(row=0, column=0, sticky='nsew') self.attributetreeValues.grid(row=0, column=1, sticky="nsew") footer = ttk.Frame(top, height=120) footer.grid(column=0, row=1, columnspan=2) ttk.Button(footer, text='Cancel', command=attributePanelWindow.destroy).grid(column=2, row=1, padx=5, pady=10) ttk.Button(footer, text='Add Object', command=lambda: self.updatePOMTree( attributePanelWindow, self.ObjectPropertyTree.getObjectDict())).grid(column=1, row=1, padx=5, pady=10) self.createAttributeTree(self.SelDriver.attributeList, actionType) def createAttributeTree(self, attrsList, processType=None): self.attributeTree = ttk.Treeview(self.attributeTreeFrame) self.yscrollbar = Util.AutoScrollbar(self.attributeTreeFrame, orient='vertical', command=self.attributeTree.yview) self.attributeTree.configure(yscrollcommand=self.yscrollbar.set) self.attributeTree.grid(row=0, column=0, sticky='nsew') self.yscrollbar.grid(row=0, column=1, sticky='ns') self.ObjectPropertyTree = TreeProcessor.ObjectPropertyTree( self.attributeTree, attrsList, processtype=processType) self.attributeTree.bind( "<<TreeviewSelect>>", lambda event: self.displayProperties( self.attributetreeValues, self.ObjectPropertyTree.getObjectDict())) def displayProperties(self, attributes, newObjectTreeDict, actiontype=None): propertyNum = 0 for widget in attributes.winfo_children(): widget.destroy() currentItem = self.attributeTree.focus() currObject = newObjectTreeDict[currentItem] attributes.grid_columnconfigure(1, weight=1) ttk.Label(attributes, text='Display Name', justify='left').grid(column=0, row=0, padx=5, pady=1, sticky='w') DefaultVal = StringVar(attributes, value=currObject.DisplayName) Entry(attributes, textvariable=DefaultVal).grid(column=1, row=0, padx=5, pady=1, sticky='we', columnspan=1) for oProperty in currObject.propertyList: isPropSelected = oProperty.Selected isUsed = Tkinter.IntVar() propertyCheckButton = ttk.Checkbutton(attributes, text=oProperty.propertyName, variable=isUsed) propertyCheckButton.is_selected = isUsed propertyCheckButton.grid(column=0, row=propertyNum + 1, padx=5, pady=1, sticky='w') DefaultVal = StringVar(attributes, value=oProperty.Value) PropertyVal = Entry(attributes, textvariable=DefaultVal) PropertyVal.grid(column=1, row=propertyNum + 1, padx=5, pady=1, sticky='we', columnspan=2) if isPropSelected == '1' or isPropSelected == 1: propertyCheckButton.var = isUsed propertyCheckButton.var.set(1) else: propertyCheckButton.var = isUsed propertyCheckButton.var.set(0) propertyNum = propertyNum + 1 UpdateButton = ttk.Button(attributes, text='Update') UpdateButton.grid(column=1, row=propertyNum + 1, padx=10, pady=20, sticky='w') if actiontype == 'manual': AddChildButton = ttk.Button(attributes, text='Add child Object ') AddChildButton['command'] = lambda: self.AddChildToAttributeTree() AddChildButton.grid(column=0, row=propertyNum + 1, padx=10, pady=20, sticky='w') UpdateButton['command'] = lambda: self.UpdateProperties( self.scrollable_frame, currentItem) else: UpdateButton['command'] = lambda: self.UpdateProperties( self.attributetreeValues, currentItem) def UpdateProperties(self, treeVal, key): self.ObjectPropertyTree.updateObjectDict(treeVal, key) def updatePOMTree(self, propertyWindow, objDict, actionType=None): currItem = self.attributeTree.focus() objectToAdd = objDict[currItem] currObject = objectToAdd addToObject = '' objList = [currObject.ObjectID] if self.tree == None: self.createPOMTree() propertyWindow.attributes('-topmost', False) if self.tree.exists(currObject.ObjectID): messagebox.showinfo( 'Object Present with ID: =' + currObject.ObjectID, 'Object Present with ID: ' + currObject.ObjectID + '. \nPlease Change the Name or Update object Directly from Attribute Window' ) else: self.POMTreeView.treeDict[currObject.ObjectID] = currObject while currObject.ParentID != None and len(currObject.ParentID) > 0: if self.tree.exists(currObject.ParentID): addToObject = currObject.ParentID self.POMTreeView.treeDict[addToObject].childList.append( currObject) break else: currObject = objDict[currObject.ParentID] self.POMTreeView.treeDict[currObject.ObjectID] = currObject objList.insert(0, currObject.ObjectID) for childtree in objList: childObj = objDict[childtree] self.tree.insert(addToObject, 'end', iid=childObj.ObjectID, text=childObj.DisplayName) addToObject = childObj.ObjectID propertyWindow.destroy() Util.focusTree(self.tree, objectToAdd.ObjectID) print('Object to Focus :' + currObject.ObjectID) def AddChildToAttributeTree(self): for widget in self.scrollable_frame.winfo_children(): widget.destroy() self.addObjectIndentificationFields(self.attributeTree, self.scrollable_frame, 'child') def addobjectPropertiesManually(self): self.attributePanelWindow = Toplevel() self.attributePanelWindow.geometry("600x500") self.attributePanelWindow.attributes('-topmost', True) self.attributePanelWindow.title("Object Properties") self.attributePanelWindow.grid_columnconfigure(0, weight=1) self.attributePanelWindow.grid_rowconfigure(0, weight=1) top = ttk.Frame(self.attributePanelWindow) top.grid(column=0, row=0, sticky='nsew') top.grid_columnconfigure(0, weight=1, uniform="group1") top.grid_columnconfigure(1, weight=1, uniform="group1") top.grid_rowconfigure(0, weight=1) self.attributeTreeFrame = Frame(top, borderwidth=1, relief="solid") self.attributetreeValues = Frame(top, borderwidth=1, relief="solid") self.attributeTreeFrame.grid_rowconfigure(0, weight=1) self.attributeTreeFrame.grid_columnconfigure(0, weight=1) self.attributeTreeFrame.grid(row=0, column=0, sticky='nsew') self.attributetreeValues.grid_rowconfigure(0, weight=1) self.attributetreeValues.grid_columnconfigure(0, weight=1) self.attributetreeValues.grid(row=0, column=1, sticky='nsew') self.scrollable_frame = Util.ScrollableFrame(self.attributetreeValues, 'both') self.attributeTree = ttk.Treeview(self.attributeTreeFrame) self.attributeTree.grid(row=0, column=0, sticky="nsew") self.attributeTree.bind( "<<TreeviewSelect>>", lambda event: self.displayProperties( self.scrollable_frame, self.ObjectPropertyTree.getObjectDict(), 'manual')) footer = ttk.Frame(top, height=120) footer.grid(column=0, row=1, columnspan=2) ttk.Button(footer, text='Cancel', command=self.attributePanelWindow.destroy).grid(column=0, row=1, padx=5, pady=10) ttk.Button(footer, text='Add Object', command=lambda: self.updatePOMTree( self.attributePanelWindow, self.ObjectPropertyTree.getObjectDict())).grid(column=1, row=1, padx=5, pady=10) self.addObjectIndentificationFields(self.attributeTree, self.scrollable_frame) def addObjectIndentificationFields(self, objTree, Scrollableframe, objtype=None): objectTypeList = ['POM_Page'] if len( objTree.get_children()) == 0 else ['POM_frame', 'POM_Object'] ttk.Label(Scrollableframe, text='Object Type', justify='left').grid(column=0, row=0, padx=5, sticky='w') ObjectTypeCombo = ttk.Combobox(Scrollableframe, values=objectTypeList, state='readonly') ObjectTypeCombo.grid(column=1, row=0, sticky='we') ttk.Label(Scrollableframe, text='Display Name', justify="left").grid(column=0, row=1, padx=5, sticky='w') comboExample = ttk.Combobox(Scrollableframe, values=[]) comboExample.grid(column=1, row=1, sticky='we') ObjectTypeCombo.bind( "<<ComboboxSelected>>", lambda event: self.getObjectList( Scrollableframe, ObjectTypeCombo, comboExample)) self.addPropertywidget(Scrollableframe, 2, objtype) def getObjectList(self, Scrollableframe, ObjectTypeCombo, comboExample): listObjectName = [] if ObjectTypeCombo.get() == 'POM_Page': if self.tree != None: for child in self.tree.get_children(): listObjectName.append(child) comboExample['values'] = listObjectName def addPropertywidget(self, propertyWindow, addPropRow, objtype=None): ttk.Label(propertyWindow, text=' ', justify='left').grid(column=0, row=addPropRow, padx=5, sticky='w') ttk.Label(propertyWindow, text='Property Name:', justify='left').grid(column=0, row=addPropRow + 1, padx=5, sticky='w') PropertyType = Entry(propertyWindow) PropertyType.grid(column=1, row=addPropRow + 1, sticky='we') ttk.Label(propertyWindow, text='Property Value:', justify='left').grid(column=0, row=addPropRow + 2, padx=5, sticky='w') PropertyValue = Entry(propertyWindow) PropertyValue.grid(column=1, row=addPropRow + 2, sticky='we') AddPropButton = ttk.Button(propertyWindow, text='Add Property.. ') AddPropButton.grid(row=addPropRow + 3, column=0, padx=5, pady=5, sticky='e') AddPropButton['command'] = lambda: self.addAttribute( propertyWindow, addPropRow, objtype) buttonFrame = Frame(propertyWindow) buttonFrame.grid(column=0, row=addPropRow + 4, columnspan=2) if objtype == 'child': ttk.Button(buttonFrame, text='Add to Tree', command=lambda: self.AddManualobjectToTree( propertyWindow, objtype)).grid(column=0, row=0, padx=5, pady=20) else: ttk.Button(buttonFrame, text='Add to Tree', command=lambda: self.AddManualobjectToTree( propertyWindow)).grid(column=0, row=0, padx=5, pady=20) cancelbutton = ttk.Button( buttonFrame, text='Cancel ', command=lambda: self.refreshAddManualobjectPanel()) cancelbutton.grid(column=1, row=0, padx=5, pady=20) def refreshAddManualobjectPanel(self): for widget in self.scrollable_frame.winfo_children(): widget.destroy() if len(self.attributeTree.get_children()) > 0: currItem = self.attributeTree.focus() Util.focusTree(self.attributeTree, currItem) else: self.addObjectIndentificationFields(self.attributeTree, self.scrollable_frame) def addAttribute(self, propertyWindow, addProp, objtype=None): PropertyName = (propertyWindow.grid_slaves(addProp + 1, 1)[0]).get() PropertyVal = (propertyWindow.grid_slaves(addProp + 2, 1)[0]).get() v = Tkinter.IntVar() for i in range(addProp, addProp + 5): for w in propertyWindow.grid_slaves(row=i): w.grid_forget() c = Checkbutton(propertyWindow, text=PropertyName, variable=v) c.grid(column=0, row=addProp, padx=5, sticky='w') c.is_selected = v DefaultVal = StringVar(self.root, value=PropertyVal) Entry(propertyWindow, textvariable=DefaultVal).grid(column=1, row=addProp, sticky='we') self.addPropertywidget(propertyWindow, addProp + 1, objtype) def AddManualobjectToTree(self, treeManual, objtype=None): if (treeManual.grid_slaves( 0, 1)[0]).get() == '' or (treeManual.grid_slaves( 0, 1)[0]).get() == None or (treeManual.grid_slaves( 1, 1)[0]).get() == '' or (treeManual.grid_slaves( 1, 1)[0]).get() == None: messagebox.showinfo( 'Object Not Created', 'Please provide Object Name and at least one property to add object.' ) else: if objtype == 'child': currentItem = self.attributeTree.focus() currParentObj = self.ObjectPropertyTree.objectDict[currentItem] currObj = self.ObjectPropertyTree.createTreeObject( currParentObj)[1] else: self.ObjectPropertyTree = TreeProcessor.ObjectPropertyTree( self.attributeTree, treevals=treeManual) currObj = self.ObjectPropertyTree.createTreeObject()[1] Util.focusTree(self.attributeTree, currObj.ObjectID) def createPOMTree(self, processType=None): if self.tree != None: self.tree.destroy() self.tree = Util.scrollableTree(self.treeFrame, 'both') self.tree.heading('#0', anchor='w') self.tree.grid(row=0, column=0, sticky="nsew") if self.POMTreeView == None: print('IT IS NULL') self.POMTreeView.setTree(self.tree) if self.XML.filePath != None: self.POMTreeView.createTree(self.XML, self.tree, processType) self.tree.bind("<<TreeviewSelect>>", lambda event: self.displayObjectProperties(event)) def displayObjectProperties(self, currentItem=None): propertyNum = 1 for widget in self.treeValues.winfo_children(): widget.destroy() self.currentItem = self.tree.focus() self.POMTreeView.ORObject = self.currentItem currObject = self.POMTreeView.ORObject ttk.Label(self.treeValues, text='Display Name', justify='left').grid(column=0, row=0, padx=5, sticky='w') DefaultVal = StringVar(self.treeValues, value=currObject.DisplayName) Entry(self.treeValues, textvariable=DefaultVal, state='readonly').grid(column=1, row=0, sticky='we', columnspan=2) ttk.Label(self.treeValues, text='Object ID', justify='left').grid(column=0, row=propertyNum, padx=5, sticky='w') DefaultVal = StringVar(self.treeValues, value=currObject.ObjectID) Entry(self.treeValues, textvariable=DefaultVal, state='readonly').grid(column=1, row=propertyNum, sticky='we', columnspan=2) self.treeValues.grid_columnconfigure(1, weight=1) for oProperty in currObject.propertyList: isPropSelected = oProperty.Selected isUsed = Tkinter.IntVar() propertyCheckButton = ttk.Checkbutton(self.treeValues, text=oProperty.propertyName, variable=isUsed, state='disabled') propertyCheckButton.is_selected = isUsed propertyCheckButton.grid(column=0, row=propertyNum + 1, padx=5, sticky='w') DefaultVal = StringVar(self.treeValues, value=oProperty.Value) PropertyVal = Entry(self.treeValues, textvariable=DefaultVal, state='readonly') PropertyVal.grid(column=1, row=propertyNum + 1, sticky='we', columnspan=2) if isPropSelected == '1' or isPropSelected == 1: propertyCheckButton.var = isUsed propertyCheckButton.var.set(1) else: propertyCheckButton.var = isUsed propertyCheckButton.var.set(0) propertyNum = propertyNum + 1 EditButton = ttk.Button(self.treeValues, text=' Edit ') EditButton['command'] = lambda: self.editProperties( EditButton, propertyNum + 1) EditButton.grid(column=1, row=propertyNum + 1, padx=10, pady=20, sticky='w') def editProperties(self, EditButton, propertyNum): EditButton['text'] = 'Update' EditButton.grid(column=2) ttk.Button(self.treeValues, text='Add Custom Property', command=lambda: self.addCutomProperty()).grid( column=1, row=propertyNum, pady=20, sticky='w') for widget in self.treeValues.winfo_children(): widget['state'] = 'normal' self.treeValues.grid_slaves(1, 1)[0]['state'] = 'readonly' self.isPropertySaved = False EditButton['command'] = lambda: self.updateObjectProperty(EditButton) def addCutomProperty(self): addPropRow = 0 customAttributeWindow = Toplevel() customAttributeWindow.geometry("300x100") customAttributeWindow.attributes("-topmost", True) customAttributeWindow.title("Add Property") customAttributeWindow.grid_columnconfigure(1, weight=1) ttk.Label(customAttributeWindow, text='Property Name:', justify='left').grid(column=0, row=addPropRow, padx=5, pady=5, sticky='w') PropertyType = Entry(customAttributeWindow) PropertyType.grid(column=1, row=addPropRow, sticky='we') ttk.Label(customAttributeWindow, text='Property Value:', justify='left').grid(column=0, row=addPropRow + 1, padx=5, pady=5, sticky='w') PropertyValue = Entry(customAttributeWindow) PropertyValue.grid(column=1, row=addPropRow + 1, sticky='we') AddPropButton = ttk.Button(customAttributeWindow, text='Add Property') AddPropButton.grid(row=addPropRow + 2, column=1, padx=5, pady=10, sticky='w') currentItem = self.tree.focus() AddPropButton['command'] = lambda: self.POMTreeView.addProperty( self.tree, currentItem, customAttributeWindow) def updateObjectProperty(self, actionType=None): currObj = self.POMTreeView.updateObjectProperty( self.tree, self.treeValues, self.currentItem) self.currentItem = currObj.ObjectID Util.focusTree(self.tree, currObj.ObjectID) self.displayObjectProperties()
class Atualizar(): def __init__(self, tela, design, idioma, interface_idioma, icon): self.icon = icon self.interface_idioma = interface_idioma self.tp_atualizacao = None self.idioma = idioma self.design = design self.tela = tela # Destino dos Downloads e Backups data = str(datetime.now()).split('.')[0] data = data.replace(' ', '-') data = data.replace(':', '-') dest_download = os_path.join(os_getcwd(), 'AtualizarSafira') dest_backup = os_path.join(os_getcwd(), 'backups', data) # Instância de Upgrades self.up = Upgrade.Upgrade(dest_download, dest_backup) def verificar_versao(self, primeira_vez=False): """Verifica se existe uma versão mais recente disponível """ try: baixada = VERSAO_ATUAL # Obter todas as versões dic_versoes = self.up.obter_informacoes_versao() if dic_versoes.get('erro'): print(dic_versoes['erro']) messagebox.showinfo( "Erro ao buscar versões", "Aconteceu um erro quando a Safira tentou buscar as versões disponíveis. Este foi o erro: {}" .format(dic_versoes['erro'])) else: # Obter ultima versão recente = max(dic_versoes.keys()) if float(VERSAO_ATUAL["versao"]) < float(recente): print('A versão {} disponível, deseja atualizar?'.format( recente)) self.aviso_versao(baixada, recente) else: # Não é necessário avisar que está atualizado # Se a interface estiver iniciando if not primeira_vez: self.aviso_versao_atualizada(baixada) except Exception as erro: if not primeira_vez: messagebox.showinfo( "ops", self.interface_idioma["erro_generico"][self.idioma] + str(erro)) def aviso_versao(self, baixada, recente): """ Aviso, existe uma nova versão disponível """ self.tp_atualizacao = Toplevel( self.tela, self.design.dic["aviso_versao_top_level"]) self.tp_atualizacao.withdraw() self.tp_atualizacao.focus_force() self.tp_atualizacao.resizable(False, False) self.tp_atualizacao.tk.call('wm', 'iconphoto', self.tp_atualizacao._w, self.icon) self.tp_atualizacao.grid_columnconfigure(1, weight=1) self.tp_atualizacao.title( self.interface_idioma["titulo_aviso_atualizacao"][self.idioma]) # Tentar remover a barra de rolagem #try: # self.tp_atualizacao.wm_attributes('-type', 'splash') #except Exception as erro: # print("Erro ao remover barra de titulos => ", erro) # Objetos da interface fr_atualizaca = Frame(self.tp_atualizacao) lb_versao_dev = Label( fr_atualizaca, text=self.interface_idioma["versao_nova_disponivel"][self.idioma]) lb_versao_tex = Message( fr_atualizaca, text='{}'.format(self.interface_idioma["texto_update_disponivel"][ self.idioma]).format(recente)) fr_botoes = Frame(fr_atualizaca) bt_cancela = Button( fr_botoes, text=self.interface_idioma["versao_nao_quero"][self.idioma]) bt_atualiza = Button( fr_botoes, text=self.interface_idioma["atualizar_agora"][self.idioma]) # Configurações de desingn fr_atualizaca.configure(self.design.dic["aviso_versao_fr_atualizacao"]) lb_versao_dev.configure(self.design.dic["aviso_versao_lb_dev"]) lb_versao_tex.configure(self.design.dic["aviso_versao_ms"]) fr_botoes.configure(self.design.dic["aviso_versao_btn"]) bt_cancela.configure(self.design.dic["aviso_versao_btn_cancela"], relief=FLAT) bt_atualiza.configure(self.design.dic["aviso_versao_btn_atualiza"], relief=FLAT) # Eventos bt_atualiza.configure( command=lambda rec=recente: self.aviso_aguarde_instalando(rec)) bt_cancela.configure( command=lambda event=None: self.tp_atualizacao.destroy()) # Posicionamento de itens fr_atualizaca.grid_columnconfigure(1, weight=1) fr_botoes.grid_columnconfigure(1, weight=1) fr_botoes.grid_columnconfigure(2, weight=1) fr_atualizaca.grid(row=1, column=1, sticky=NSEW) lb_versao_dev.grid(row=1, column=1) lb_versao_tex.grid(row=2, column=1, sticky=NSEW) fr_botoes.grid(row=3, column=1, sticky=NSEW) bt_cancela.grid(row=1, column=1) bt_atualiza.grid(row=1, column=2) # Posicionando a tela j_width = self.tp_atualizacao.winfo_reqwidth() j_height = self.tp_atualizacao.winfo_reqheight() t_width = self.tela.winfo_screenwidth() t_heigth = self.tela.winfo_screenheight() self.tp_atualizacao.geometry("+{}+{}".format( int(t_width / 2) - int(j_width / 2), int(t_heigth / 2) - int(j_height / 2))) self.tp_atualizacao.deiconify() self.tp_atualizacao.update() def aviso_aguarde_instalando(self, recente): """ Realizando a atualização """ if self.tp_atualizacao is not None: self.tp_atualizacao.destroy() self.tp_atualizacao = Toplevel(None) self.tp_atualizacao.withdraw() self.tp_atualizacao.focus_force() self.tp_atualizacao.resizable(False, False) self.tp_atualizacao.tk.call('wm', 'iconphoto', self.tp_atualizacao._w, self.icon) self.tp_atualizacao.configure( self.design.dic["aviso_versao_top_level"]) self.tp_atualizacao.grid_columnconfigure(1, weight=1) self.tp_atualizacao.title('Atualizando.... Não feche a Safira!') #try: # self.tp_atualizacao.wm_attributes('-type', 'splash') #except Exception as erro: # print("Erro ao remover barra de titulos => ", erro) fr_atualizaca = Frame(self.tp_atualizacao) lb_versao_dev = Label(fr_atualizaca, text='{:^30}'.format('Aguarde Atualizando!')) lb_versao_tex = Message(fr_atualizaca, text=' ' * 50, width=200) fr_botoes = Frame(fr_atualizaca) bt_atualiza = Button(fr_botoes) fr_atualizaca.configure(self.design.dic["aviso_versao_fr_atualizacao"]) lb_versao_dev.configure(self.design.dic["aviso_versao_lb_dev"]) lb_versao_tex.configure(self.design.dic["aviso_versao_ms"]) fr_botoes.configure(self.design.dic["aviso_versao_btn"]) bt_atualiza.configure(self.design.dic["aviso_versao_btn_atualiza"], relief=FLAT) fr_atualizaca.grid_columnconfigure(1, weight=1) fr_botoes.grid_columnconfigure(1, weight=1) fr_botoes.grid_columnconfigure(2, weight=1) fr_atualizaca.grid(row=1, column=1, sticky=NSEW) lb_versao_dev.grid(row=1, column=1) lb_versao_tex.grid(row=2, column=1, sticky=NSEW) fr_botoes.grid(row=3, column=1, sticky=NSEW) j_width = self.tp_atualizacao.winfo_reqwidth() j_height = self.tp_atualizacao.winfo_reqheight() t_width = self.tela.winfo_screenwidth() t_heigth = self.tela.winfo_screenheight() self.tp_atualizacao.geometry("+{}+{}".format( int(t_width / 2) - int(j_width / 2), int(t_heigth / 2) - int(j_height / 2))) self.tp_atualizacao.deiconify() self.tp_atualizacao.update() th = Thread( target=lambda ver=recente, lb=lb_versao_tex, bt_at=bt_atualiza, lb_2=lb_versao_dev: self.aplica_versao(ver, lb, bt_at, lb_2)) th.start() def log(self, label, texto): label['text'] = label['text'] + '\n{}'.format(texto) def aplica_versao(self, versao, lb_versao_tex, bt_atualiza, lb_versao_dev): """Baixa, faz o download e atualiza a Safira""" self.log(lb_versao_tex, "Baixando Versão {}".format(versao)) atualizar = self.up.baixar_versao(versao) sucesso, msg, arquivo = atualizar # Baixou com sucesso if sucesso: self.log(lb_versao_tex, msg) self.log(lb_versao_tex, "Extraindo: {}".format(self.up.dest_download)) # Extraiu com sucesso sucesso, msg = self.up.extrair_versao(arquivo) if sucesso: self.log(lb_versao_tex, msg) self.log(lb_versao_tex, "Fazendo Backup") # Backup da versão atual sucesso_bkup, msg_bpk = self.up.fazer_backup_versao() if sucesso_bkup: self.log(lb_versao_tex, msg_bpk) self.log(lb_versao_tex, "Atualizando Versão") # Atualizar a versão sucesso_atualizar, msg_atualizar = self.atualizar_arquivos( versao) if sucesso_atualizar: self.log(lb_versao_tex, msg_atualizar) self.log(lb_versao_tex, "Sucesso!") lb_versao_dev.configure( text='{:^30}'.format('Atualizado com sucesso!'), fg='green') self.tp_atualizacao.title('Safira Atualizada!') else: self.log(lb_versao_tex, msg_atualizar) self.log(lb_versao_tex, "\nRestaurando") sucesso_restaurar, msg_restaurar = self.restaurar_versao( ) self.log(lb_versao_tex, sucesso_restaurar[1]) lb_versao_dev.configure(text='{:^30}'.format( sucesso_restaurar[1]), fg='orange') self.tp_atualizacao.title('Safira Não Atualizada!') else: self.log(lb_versao_tex, msg_bpk) lb_versao_dev.configure( text='{:^30}'.format('Erro ao fazer Backup'), fg='orange') self.tp_atualizacao.title('Safira Não Atualizada!') else: self.log(lb_versao_tex, msg) lb_versao_dev.configure( text='{:^30}'.format('Erro ao Extrair os arquivos'), fg='orange') self.tp_atualizacao.title('Safira Não Atualizada!') else: self.log(lb_versao_tex, msg) lb_versao_dev.configure( text='{:^30}'.format('Erro ao fazer Baixar Safira'), fg='orange') self.tp_atualizacao.title('Safira Não Atualizada!') bt_atualiza.configure(command=lambda event=None: self.fechar_tudo()) bt_atualiza['text'] = 'Reinicie a Safira!' bt_atualiza.grid(row=1, column=2) def fechar_tudo(self): self.tela.destroy() def abrir_site(self, url): self.tp_atualizacao.destroy() th = Thread(target=lambda url=url: webbrowser_open(url)) th.start() def aviso_versao_atualizada(self, baixada): self.tp_atualizacao = Toplevel( self.tela, self.design.dic["aviso_versao_tp_atualizada"]) self.tp_atualizacao.withdraw() self.tp_atualizacao.focus_force() self.tp_atualizacao.resizable(False, False) self.tp_atualizacao.tk.call('wm', 'iconphoto', self.tp_atualizacao._w, self.icon) #try: # self.tp_atualizacao.wm_attributes('-type', 'splash') #except Exception as erro: # print("Erro ao remover barra de titulos => ", erro) self.tp_atualizacao.grid_columnconfigure(1, weight=1) j_width = self.tp_atualizacao.winfo_reqwidth() j_height = self.tp_atualizacao.winfo_reqheight() t_width = self.tela.winfo_screenwidth() t_heigth = self.tela.winfo_screenheight() self.tp_atualizacao.title( self.interface_idioma["titulo_aviso_atualizado"][self.idioma]) fr_atualizaca = Frame(self.tp_atualizacao) lb_versao_dev = Label( fr_atualizaca, text=self.interface_idioma["atualizado_versao_ultima"][ self.idioma]) lb_versao_tex = Message( fr_atualizaca, text='{}'.format( self.interface_idioma["texto_atualizado"][self.idioma]).format( baixada["versao"]), relief=FLAT) fr_botoes = Frame(fr_atualizaca) bt_cancela = Button( fr_botoes, text=self.interface_idioma["texto_nao_quero"][self.idioma], relief=FLAT) bt_facebook = Button( fr_botoes, self.design.dic["aviso_versao_bt_facebook_atualizada"], text=self.interface_idioma["atualizado_facebook"][self.idioma], relief=FLAT) bt_blogger_ = Button( fr_botoes, self.design.dic["aviso_versao_bt_blog_atualizada"], text=self.interface_idioma["atualizado_blog"][self.idioma], relief=FLAT) # Configurações de desingn fr_atualizaca.configure(self.design.dic["aviso_versao_fr_atualizacao"]) lb_versao_dev.configure(self.design.dic["aviso_versao_lb_dev"]) lb_versao_tex.configure(self.design.dic["aviso_versao_ms"]) fr_botoes.configure(self.design.dic["aviso_versao_btn"]) bt_cancela.configure(self.design.dic["aviso_versao_btn_cancela"], relief=FLAT) #bt_atualiza.configure(self.design.dic["aviso_versao_btn_atualiza"], relief=FLAT) bt_cancela.configure( command=lambda event=None: self.tp_atualizacao.destroy()) bt_facebook.configure(command=lambda event=None: self.abrir_site( "https://www.facebook.com/safiralang/")) bt_blogger_.configure(command=lambda event=None: self.abrir_site( "https://safiralang.blogspot.com/")) fr_atualizaca.grid_columnconfigure(1, weight=1) fr_botoes.grid_columnconfigure(1, weight=1) fr_botoes.grid_columnconfigure(2, weight=1) fr_botoes.grid_columnconfigure(3, weight=1) fr_atualizaca.grid(row=1, column=1, sticky=NSEW) lb_versao_dev.grid(row=1, column=1) lb_versao_tex.grid(row=2, column=1, sticky=NSEW) fr_botoes.grid(row=3, column=1, sticky=NSEW) bt_cancela.grid(row=1, column=1) bt_facebook.grid(row=1, column=2) bt_blogger_.grid(row=1, column=3) self.tp_atualizacao.geometry("+{}+{}".format( int(t_width / 2) - int(j_width / 2), int(t_heigth / 2) - int(j_height / 2))) self.tp_atualizacao.update() self.tp_atualizacao.deiconify()
def popup_window_peakinfo(self, text, filename): NA = 'N/A' selections = [ fn.split('.R1.fastq.gz')[0] for fn in self.datafiles if fn.endswith(".R1.fastq.gz") ] ################################ #check availablity of the files before moving on! if not selections: showerror( "No FASTQ files available matching the pattern *.R1.fastq.gz") return ################################ selections.insert( 0, NA) #Adding N/A for the groups where no input is available groups = ['Grp%d' % i for i in range(1, len(selections) + 1)] ##checking for debugging purpose print(selections) assert len(selections) == len(set(selections)) ## top = Toplevel() info = LabelFrame(top, text=text) #"Group Information") chip_vars = [StringVar() for s in selections[1:]] input_vars = [StringVar() for s in selections[1:]] group_vars = [StringVar() for s in selections[1:]] chip_menus = [OptionMenu(info, var, *selections) for var in chip_vars] input_menus = [ OptionMenu(info, var, *selections) for var in input_vars ] group_menus = [OptionMenu(info, var, *groups) for var in group_vars] group_entries = [ Entry(info, bd=2, width=8, textvariable=var) for var in group_vars ] chiplabel = Label(info, text="ChIP Names") inputlabel = Label(info, text="Input Names") grouplabel = Label(info, text="Group Names") chiplabel.grid(row=0, column=1, padx=4, pady=1) inputlabel.grid(row=0, column=2, padx=4, pady=1) grouplabel.grid(row=0, column=3, padx=4, pady=1) for i, (chvar, invar) in enumerate(zip(chip_vars, input_vars)): chvar.set(selections[0]) invar.set(selections[0]) chip_menus[i].grid(row=i + 1, column=1, padx=4, pady=1) input_menus[i].grid(row=i + 1, column=2, padx=4, pady=1) group_entries[i].grid(row=i + 1, column=3, padx=4, pady=1) group_menus[i].grid(row=i + 1, column=4, padx=4, pady=1) def savefunc(): info_text = StringIO() for v1, v2, v3 in zip(chip_vars, input_vars, group_vars): v1 = v1.get().strip() if v1.get().strip() != NA else "" if not v1: continue v2 = v2.get().strip() if v2.get().strip() != NA else "" v3 = v3.get().strip() if v3.get().strip() != NA else "" if not v3: showerror( "Error", "Missing Replicate group name detected.\nReplicate group names should be given!" ) print( "Error", "Missing Replicate group name detected.\nReplicate group names should be given!" ) return print(v1, v2, v3, file=info_text, sep="\t") fp = open(filename, 'w') fp.write(info_text.getvalue()) fp.close() def loadfunc(): if not exists(filename): print(filename, 'does not exists!') return for i, l in enumerate(open(filename)): v1, v2, v3 = l.split('\t') if v1: try: assert v1 in selections except: showwarning('WARNING', 'ChIP name is not in the selection list!') print('v1:', v1) print('selection:', selection) continue if v2: try: assert v2 in selections except: showwarning( 'WARNING', 'Input name is not in the selection list!') print('v2:', v2) print('selection:', selection) return chip_vars[i].set(v1.strip()) input_vars[i].set(v2.strip()) group_vars[i].set(v3.strip()) def clearfunc(): for i, (chvar, invar, grvar) in enumerate(zip(chip_vars, input_vars, group_vars)): chvar.set(selections[0]) invar.set(selections[0]) grvar.set('') info_clear_button = Button(top, text="Clear", command=clearfunc) info_save_button = Button(top, text="Save", command=savefunc) info_load_button = Button(top, text="Load", command=loadfunc) #self.pairs_load_button.pack( side=BOTTOM, padx=5, pady=5 ) #self.pairs_save_button.pack( side=BOTTOM, padx=5, pady=5 ) info_clear_button.grid(row=5, column=3, padx=10, pady=5) info_load_button.grid(row=5, column=4, padx=10, pady=5) info_save_button.grid(row=5, column=5, padx=10, pady=5) info.grid(row=7, column=0, columnspan=6, sticky=W, padx=20, pady=10) top.focus_force()