Esempio n. 1
0
    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()
Esempio n. 4
0
    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)
Esempio n. 5
0
	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)
Esempio n. 6
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)
Esempio n. 7
0
    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()
Esempio n. 9
0
	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
Esempio n. 11
0
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)
Esempio n. 13
0
    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)
Esempio n. 14
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)
Esempio n. 15
0
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)
Esempio n. 16
0
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)
Esempio n. 17
0
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()
Esempio n. 18
0
    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()
Esempio n. 19
0
    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)
Esempio n. 20
0
    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
Esempio n. 21
0
    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
Esempio n. 23
0
    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()
Esempio n. 24
0
    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()
Esempio n. 25
0
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()
Esempio n. 26
0
    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()
Esempio n. 27
0
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()
Esempio n. 28
0
# 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()
Esempio n. 29
0
    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")
Esempio n. 30
0
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()
Esempio n. 31
0
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()
Esempio n. 32
0
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()
Esempio n. 33
0
    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()