class OptionsFrame(Frame):
    def __init__(self, master, **kwargs):
        Frame.__init__(self, master)

        self.autoscroll_check = Checkbutton(self, text='Autoscroll', takefocus=False)
        self.autoscroll_check.pack(side=LEFT, anchor=W, padx=8)

        Separator(self, orient=VERTICAL).pack(side=LEFT, fill=Y, pady=2)

        Label(self, text='Size:').pack(side=LEFT, padx=(8, 3))
        self.font_down_button = Button(self, text='-', width=3, takefocus=False)
        self.font_down_button.pack(side=LEFT)
        self.font_size_label = Label(self, text='24', padding=(6, 2, 6, 2), relief=SOLID, borderwidth=1)
        self.font_size_label.pack(side=LEFT, padx=4)
        self.font_up_button = Button(self, text='+', width=3, takefocus=False)
        self.font_up_button.pack(side=LEFT, padx=(0, 8))

        Separator(self, orient=VERTICAL).pack(side=LEFT, fill=Y, pady=2)

        Label(self, text='Speed:').pack(side=LEFT, padx=(8, 3))
        self.speed_control_frame = SpeedControlFrame(self)
        self.speed_control_frame.pack(side=LEFT, padx=(0, 8))

        Separator(self, orient=VERTICAL).pack(side=LEFT, fill=Y, pady=2)
        self.always_on_top_check = Checkbutton(self, text='Top', takefocus=False)
        self.always_on_top_check.pack(side=LEFT, padx=(8, 0))
Example #2
0
    def _generateList(self):

        self.boxFrame = Frame(self, borderwidth=1)
        self.uiList = []

        for entry in self.subs:
            entryFrame = Frame(self.boxFrame, borderwidth=1)
            var = IntVar()
            var.set(1 * (self.record.get(entry, 0) > 0))
            button = Checkbutton(entryFrame, variable=var, command=self.update)
            button.pack(side=LEFT)

            self.subs[entry] = (self.subs[entry][0], var)

            lbl = Label(entryFrame, text=entry, font=("Ubuntu", 10))
            lbl.pack(side=LEFT)
            amtlbl = Label(entryFrame,
                           text=f"${self.subs[entry][0]}",
                           font=("Ubuntu", 10))
            amtlbl.pack(side=RIGHT)
            entryFrame.pack(fill=X)
            self.uiList.append(entryFrame)

        self.totallbl = Label(self.boxFrame, text="$0", font=("Ubuntu", 14))
        self.totallbl.pack(side=RIGHT)
        self.boxFrame.pack(side=LEFT, fill=BOTH)
Example #3
0
def council_1():
    newwin = Toplevel(tk)
    newwin.title('New Window')
    newwin.geometry("400x300")
    newwin.resizable(0, 0)
    display = Label(
        newwin,
        text="Agenda.Divide your day into three parts:",
    )
    display.pack()
    chk_state = BooleanVar()
    chk_state.set(True)  # задайте проверку состояния чекбокса
    display1 = Checkbutton(newwin,
                           text='study for an exam for 8 hours a day;',
                           var=chk_state)
    display1.pack()
    chk_state = BooleanVar()
    chk_state.set(True)  # задайте проверку состояния чекбокса
    display2 = Checkbutton(
        newwin,
        text='Exercise, relax in the fresh air, go to a disco and dance;',
        var=chk_state)
    display2.pack()
    chk_state = BooleanVar()
    chk_state.set(True)  # задайте проверку состояния чекбокса
    display3 = Checkbutton(newwin,
                           text='Sleep at least 8 hours;',
                           var=chk_state)
    display3.pack()
    display4 = Label(
        newwin,
        text="Nutrition",
    )
    display4.pack()
    chk_state = BooleanVar()
    chk_state = BooleanVar()
    chk_state.set(True)  # задайте проверку состояния чекбокса
    display5 = Checkbutton(
        newwin,
        text=
        'Eat 3-4 times a day; Let the food be nutritious and rich in vitamins.',
        var=chk_state)
    display5.pack()
    display6 = Label(
        newwin,
        text="Place of training",
    )
    display6.pack()
    chk_state = BooleanVar()
    chk_state = BooleanVar()
    chk_state.set(True)  # задайте проверку состояния чекбокса
    display7 = Checkbutton(
        newwin,
        text=
        'Prepare your workplace. Put yellow or purple objects or pictures. ',
        var=chk_state)
    display7.pack()
    display8 = Button(newwin, text="close", command=newwin.destroy)
    display8.pack()
Example #4
0
 def addCheckButton(self, text, variable):
     frame = Frame(self)
     frame.pack(fill=X)
     label = Label(frame, text=text, width=23)
     label.pack(side=LEFT, padx=20, pady=5)
     button = Checkbutton(frame, variable=variable, onvalue=True, offvalue=False, command=self.onConfigChange)
     button.pack(fill=X, padx=20)
     return button
Example #5
0
    def __init__(self, *args, **kwargs):
        self._app = Scripting.root_node
        self.__gui_images = []
        self.__topwin = kwargs.pop('topwin')
        super().__init__(*args, **kwargs)
        
        imageMLbl = ImageTk.PhotoImage(
            file=Scripting.root_node.get_gui_image_path('Pattern_M_Label.png')
        )
        self.__gui_images.append(imageMLbl)        
        self.__M = LabeledEntry(self)
        self.__M.label.config(text='M', image=imageMLbl, compound='left')
        self.__M.entry_width = 6
        self.__M.entry_text = 10
        self.__M.entry.bind(
            '<Return>', 
            lambda dumb: self._on_solve_button_click())
        self.__M.checker_function = self._app.gui.value_checker.check_int
        self.__M.pack()
        
        self._app.gui.balloon.bind_widget(
            self.__M, 
            balloonmsg='The number of the array elements.')

        image_solve = ImageTk.PhotoImage(
            file=Scripting.root_node.get_gui_image_path('Pattern_Solve_Button.png'))
        self.__gui_images.append(image_solve)

        self.__btnSolve = Button(
            self, 
            text='Solve', 
            image=image_solve, 
            compound='left', 
            command=self._on_solve_button_click)
        self.__btnSolve.pack(side='top', fill='x')
        self._app.gui.balloon.bind_widget(
            self.__btnSolve, 
            balloonmsg='Launch the solver to synthesize the correlation matrix.')
        
        image_display = ImageTk.PhotoImage(
            file=Scripting.root_node.get_gui_image_path('Pattern_Display_Button.png'))
        self.__gui_images.append(image_display)
        self.__bDisplay = IntVar(0)
        chk_display = Checkbutton(
            self, 
            text="Display", 
            image=image_display, 
            compound='left', 
            variable=self.__bDisplay)
        chk_display.pack(side='top')
        self._app.gui.balloon.bind_widget(
            chk_display, 
            balloonmsg='Display solver output.')
        chk_display_width = chk_display.winfo_width()
        self.__btnSolve['width'] = chk_display_width
        
        self.name = 'Optimize'
Example #6
0
    def __init__(self, *args, **kwargs):
        self._app = Scripting.root_node
        self.__gui_images = []
        self.__topwin = kwargs.pop('topwin')
        super().__init__(*args, **kwargs)

        imageMLbl = ImageTk.PhotoImage(
            file=Scripting.root_node.get_gui_image_path(
                'arrayelemnum20x20.png'))
        self.__gui_images.append(imageMLbl)
        self.__M = LabeledEntry(self)
        self.__M.label.config(text='M', image=imageMLbl, compound='left')
        self.__M.entry_width = 6
        self.__M.entry_text = 10
        self.__M.entry.bind('<Return>',
                            lambda dumb: self._on_solve_button_click())
        self.__M.checker_function = self._app.gui.value_checker.check_int
        self.__M.pack()

        self._app.gui.balloon.bind_widget(
            self.__M, balloonmsg='The number of the array elements.')

        image_solve = ImageTk.PhotoImage(
            file=Scripting.root_node.get_gui_image_path('run20x20.png'))
        self.__gui_images.append(image_solve)

        self.__btnSolve = Button(self,
                                 text='Solve',
                                 image=image_solve,
                                 compound='left',
                                 command=self._on_solve_button_click)
        self.__btnSolve.pack(side='top', fill='x')
        self._app.gui.balloon.bind_widget(
            self.__btnSolve,
            balloonmsg='Launch the solver to synthesize the correlation matrix.'
        )

        image_display = ImageTk.PhotoImage(
            file=Scripting.root_node.get_gui_image_path(
                'Pattern_Display_Button.png'))
        self.__gui_images.append(image_display)
        self.__bDisplay = IntVar(0)
        chk_display = Checkbutton(self,
                                  text="Verbose",
                                  image=image_display,
                                  compound='left',
                                  variable=self.__bDisplay)
        chk_display.pack(side='top')
        self._app.gui.balloon.bind_widget(chk_display,
                                          balloonmsg='Display solver output.')
        chk_display_width = chk_display.winfo_width()
        self.__btnSolve['width'] = chk_display_width

        self.name = 'Optimize'
Example #7
0
class DestinationFrame(LabelFrame):
    def __init__(self, root, model: ConfigUIModel):
        super().__init__(root, text="Destination", padding=10)
        self.pack(side=LEFT, anchor=NW, fill=BOTH, expand=True)
        self.model = model

        self.txt_dest = Entry(self, textvariable=self.model.var_dest)
        self.txt_dest.pack(fill=X)

        self.chk_wrap = Checkbutton(self,
                                    text="Create Date Wrapper",
                                    variable=self.model.var_wrap,
                                    onvalue=True,
                                    offvalue=False)
        self.chk_wrap.pack()

        self.btn_dest_browse = Button(self,
                                      text="Browse",
                                      command=self.set_dest)
        self.btn_dest_browse.pack()

        def manage():
            self.model.var_managed.set(True)

        self.btn_make_managed = Button(self,
                                       text="Manage This Folder",
                                       command=manage)
        self.btn_make_managed.pack(side=BOTTOM)

        self.model.var_managed.trace_add("write", self.managed_changed)

    def managed_changed(self, *args):
        val = self.model.var_managed.get()
        if val:
            self.chk_wrap.configure(state="disabled")
            self.btn_make_managed.configure(text="Already Managed",
                                            state="disabled")
        else:
            self.chk_wrap.configure(state="normal")
            self.btn_make_managed.configure(text="Manage This Folder",
                                            state="normal")

    def set_dest(self):
        dest = filedialog.askdirectory(title="Choose Destination")
        if dest is not None:
            self.model.var_dest.set(dest)
            self.model.var_managed.set(MetaRecord.is_managed(dest))
Example #8
0
    def create_option_buttons(self):
        """Return (filled frame, options) for testing.

        Options is a list of searchengine booleanvar, label pairs.
        A gridded frame from make_frame is filled with a Checkbutton
        for each pair, bound to the var, with the corresponding label.
        """
        frame = self.make_frame('Options')[0]
        engine = self.engine
        options = [(engine.revar, 'Regular expression'), (engine.casevar,
            'Match case'), (engine.wordvar, 'Whole word')]
        if self.needwrapbutton:
            options.append((engine.wrapvar, 'Wrap around'))
        for var, label in options:
            btn = Checkbutton(frame, variable=var, text=label)
            btn.pack(side='left', fill='both')
        return frame, options
    def create_option_buttons(self):
        '''Return (filled frame, options) for testing.

        Options is a list of searchengine booleanvar, label pairs.
        A gridded frame from make_frame is filled with a Checkbutton
        for each pair, bound to the var, with the corresponding label.
        '''
        frame = self.make_frame("选项:")[0]
        engine = self.engine
        options = [(engine.revar, "正则表达式"), (engine.casevar, "区分大小写"),
                   (engine.wordvar, "整数")]
        if self.needwrapbutton:
            options.append((engine.wrapvar, "环绕"))
        for var, label in options:
            btn = Checkbutton(frame, variable=var, text=label)
            btn.pack(side="left", fill="both")
        return frame, options
class SearchFrame(Frame):
    def __init__(self, master, **kwargs):
        Frame.__init__(self, master, **kwargs)
        Separator(self, orient=HORIZONTAL).pack(side=TOP, fill=X)
        self.close = Button(self, text='x', width=3, takefocus=False)
        self.close.pack(side=RIGHT)
        self.entry = Entry(self)
        self.entry.pack(side=LEFT, padx=8)
        self.prev = Button(self, text="<", width=3, takefocus=False)
        self.prev.pack(side=LEFT)
        self.next = Button(self, text=">", width=3, takefocus=False)
        self.next.pack(side=LEFT)
        Separator(self, orient=VERTICAL).pack(side=LEFT, fill=Y, pady=2, padx=(6, 4))
        self.regex_check = Checkbutton(self, text='Regex', takefocus=False)
        self.regex_check.pack(side=LEFT)
        self.case_check = Checkbutton(self, text='Case Sensitive', takefocus=False)
        self.case_check.pack(side=LEFT, padx=5)
Example #11
0
    def create_option_buttons(self):
        '''Return (filled frame, options) for testing.

        Options is a list of searchengine booleanvar, label pairs.
        A gridded frame from make_frame is filled with a Checkbutton
        for each pair, bound to the var, with the corresponding label.
        '''
        frame = self.make_frame("Options")[0]
        engine = self.engine
        options = [(engine.revar, "Regular expression"),
                   (engine.casevar, "Match case"),
                   (engine.wordvar, "Whole word")]
        if self.needwrapbutton:
            options.append((engine.wrapvar, "Wrap around"))
        for var, label in options:
            btn = Checkbutton(frame, variable=var, text=label)
            btn.pack(side="left", fill="both")
        return frame, options
 def __init__(self):
     global root
     self.master = Toplevel(root)
     self.master.withdraw()
     self.master.protocol('WM_DELETE_WINDOW', root.destroy)
     self.master.iconbitmap(imgdir)
     self.master.geometry("400x150")
     self.master.resizable(False, False)
     self.master.title("Adb & Fastboot Installer - By @Pato05")
     estyle = Style()
     estyle.element_create("plain.field", "from", "clam")
     estyle.layout("White.TEntry",
                   [('Entry.plain.field', {'children': [(
                       'Entry.background', {'children': [(
                           'Entry.padding', {'children': [(
                               'Entry.textarea', {'sticky': 'nswe'})],
                               'sticky': 'nswe'})], 'sticky': 'nswe'})],
                       'border': '4', 'sticky': 'nswe'})])
     estyle.configure("White.TEntry",
                      background="white",
                      foreground="black",
                      fieldbackground="white")
     window = Frame(self.master, relief=FLAT)
     window.pack(padx=10, pady=5, fill=BOTH)
     Label(window, text='Installation path:').pack(fill=X)
     self.syswide = IntVar()
     self.instpath = StringVar()
     self.e = Entry(window, state='readonly',
                    textvariable=self.instpath, style='White.TEntry')
     self.e.pack(fill=X)
     self.toggleroot()
     Label(window, text='Options:').pack(pady=(10, 0), fill=X)
     inst = Checkbutton(window, text="Install Adb and Fastboot system-wide?",
                        variable=self.syswide, command=self.toggleroot)
     inst.pack(fill=X)
     self.path = IntVar(window, value=1)
     Checkbutton(window, text="Put Adb and Fastboot in PATH?",
                 variable=self.path).pack(fill=X)
     Button(window, text='Install', command=self.install).pack(anchor='se')
     self.master.deiconify()
Example #13
0
    def initUI(self):
        self.style = Style()
        self.style.theme_use("default")

        self.master.title("convertisseur")
        self.pack(fill = BOTH, expand = 1)

        frame = Frame(self, relief = RAISED, borderwidth = 1)
        frame.pack(fill = BOTH, expand = True)


        bouton = Button(self, text = "Quit",
                        command = self.quit)
        bouton.pack(side = RIGHT, padx = 5, pady = 5)
        bouton1 = Button(self, text = "stay")
        bouton1.pack(side = RIGHT, padx = 5, pady = 5)

        self.var = BooleanVar()
        cb = Checkbutton(self, text = "Montre le titre",
                         variable = self.var, command = self.onClick)
        self.var.set(True)
        cb.pack(side = LEFT, padx = 5, pady = 5)
Example #14
0
 def create_convert_widgets(self, notebook):
     frame = tk.Frame(notebook)
     self.convert_file_list = FileListView(frame)
     self.convert_file_list.pack(padx=0, pady=0, fill=tk.BOTH, expand=True)
     self.copy_titles = tk.IntVar()
     copy_titles_checkbox = Checkbutton(frame, text='Titel kopieren', variable=self.copy_titles)
     copy_titles_checkbox.pack(padx=PADX, pady=PADY, anchor=tk.W)
     self.remove_newline = tk.IntVar()
     remove_newline_checkbox = Checkbutton(frame, text='Zeilenumbrüche entfernen', variable=self.remove_newline)
     remove_newline_checkbox.pack(padx=PADX, pady=PADY, anchor=tk.W)
     self.remove_clefs = tk.IntVar()
     remove_clefs_checkbox = Checkbutton(frame, text='Notenschlüssel entfernen', variable=self.remove_clefs)
     remove_clefs_checkbox.pack(padx=PADX, pady=PADY, anchor=tk.W)
     self.add_section_break = tk.IntVar()
     add_section_break_checkbox = Checkbutton(frame, text='Abschnittsumbrüche einfügen', variable=self.add_section_break)
     add_section_break_checkbox.pack(padx=PADX, pady=PADY, anchor=tk.W)
     self.fix_key_sig = tk.IntVar()
     fix_key_sig_checkbox = Checkbutton(frame, text='Tonart C-Dur fixen', variable=self.fix_key_sig)
     fix_key_sig_checkbox.pack(padx=PADX, pady=PADY, anchor=tk.W)
     convert_button = Button(frame, text='Konvertieren...', command=self.on_convert)
     convert_button.pack(padx=PADX, pady=PADY)
     return frame
Example #15
0
    def __init__(self, master, title=None, args=None):

        self.master = master
        self.args = args
        self.name = title
        master.title("Startup interface for %s" % title)
        self.arguments = dict()

        style = Style()
        style.configure(".", background="lightgrey")

        labelStyle = Style()
        labelStyle.configure("TLabel", background="lightgrey")
        buttonStyle = Style()
        buttonStyle.configure("TButton", background="lightgrey")
        chkbuttonStyle = Style()
        chkbuttonStyle.configure("TCheckbutton", background="lightgrey")
        rbuttonStyle = Style()
        rbuttonStyle.configure("TRadiobutton", background="lightgrey")

        row = 0
        column = 0

        # Input edge file
        self.inEdgeLabel = Label(master, text="Input edge file")
        self.inEdgeLabel.grid(row=row, column=column, sticky=W, padx=3)
        self.inEdgeFile = StringVar()
        if self.args.i:
            self.inEdgeFile.set(self.args.i)
        self.inEdgeEntry = Entry(master,
                                 width=WIDTH,
                                 textvariable=self.inEdgeFile)
        column += 1
        self.inEdgeEntry.grid(row=row, column=column, padx=3)
        self.inEdgeSelect = Button(master, text = "Select",\
                                   command = lambda: self.setOutputFiles2(IN=self.inEdgeFile,OUT=[(self.configFile,"config"),(self.outFile,"desc"),(self.outFile2,"xml_desc")]))
        column += 1
        self.inEdgeSelect.grid(row=row, column=column, sticky=W, padx=3)
        self.optionLabel2 = Label(master, text="required")
        column += 1
        self.optionLabel2.grid(row=row, column=column, sticky=W, padx=3)
        # tip
        helpText1 = "Edge file for input graph (two columns, tab-delimited)."
        self.inEdgeTip = CreateToolTip(self.inEdgeEntry, helpText1)
        ##
        row += 1
        column = 0

        self.annotLabel = Label(master, text="Annotation file")
        self.annotLabel.grid(row=row, column=column, sticky=W, padx=3)
        self.a = StringVar()
        if self.args.a:
            self.a.set(os.path.abspath(os.path.normpath(self.args.a)))
        self.annotEntry = Entry(master, width=WIDTH, textvariable=self.a)
        column += 1
        self.annotEntry.grid(row=row, column=column, padx=3)
        self.annotSelect = Button(
            master,
            text="Select",
            command=lambda: self.openAnnotFile(var=self.a))
        column += 1
        self.annotSelect.grid(row=row, column=column, sticky=W, padx=3)
        self.optionLabel2 = Label(master, text="required")
        column += 1
        self.optionLabel2.grid(row=row, column=column, sticky=W, padx=3)
        CreateToolTip(
            self.annotEntry,
            "Common annotation file for genomes and genes.\nTab-delimited, compulsory header with attribute names.\nSpecify empty annotations with '-'."
        )
        row += 1
        column = 0

        self.k = StringVar()
        if self.a.get():
            with open(self.a.get(), 'r') as ANNOT:
                keyList = ANNOT.readline().strip().split("\t")[1:]
                #print(keyList)
                keyList.sort()
                keyString = ",".join(keyList)
            self.optionLabel = Label(master, text="Annotation keys")
            self.optionLabel.grid(row=row, column=0, sticky=W, padx=3)
            self.k = StringVar()
            self.k.set(keyString)
            self.optionEntry = Entry(master, width=WIDTH, textvariable=self.k)
            self.optionEntry.grid(row=row, column=1, padx=3)
            self.optionLabel2 = Label(master, text="comma-separated")
            self.optionLabel2.grid(row=row, column=3, sticky=W, padx=3)
            CreateToolTip(
                self.optionEntry,
                "List of available attributes in file %s.\nIf you wish to remove some, click on line and edit."
                % self.args.a)
        row += 1

        self.configLabel = Label(master, text="Configuration file")
        self.configLabel.grid(row=row, column=column, sticky=W, padx=3)
        self.configFile = StringVar()
        self.generateConfig = BooleanVar()
        self.generateConfig.set(bool(self.args.X))
        self.useConfig = BooleanVar()
        self.useConfig.set(bool(self.args.x))
        if self.args.x or self.args.X:
            if self.args.x and self.args.X:
                if self.args.x == self.args.X:
                    cFile = self.args.x
                    self.configFile.set(cFile)
                else:
                    sys.exit(
                        "Conflicting fields -x and -X. Check and run again.")
            elif self.args.x:
                cFile = self.args.x
            else:
                cFile = self.args.X
            self.configFile.set(cFile)
        else:
            self.configFile.set('')
        self.configEntry = Entry(master,
                                 width=WIDTH,
                                 textvariable=self.configFile)
        column += 1
        self.configEntry.grid(row=row, column=column, padx=3)
        self.configSelect = Button(
            master,
            text="Select",
            command=lambda: self.setFile(var1=self.configFile,
                                         var2=self.outTrailFile))
        column += 1
        self.configSelect.grid(row=row, column=column, sticky=W, padx=3)
        """self.optionLabel2 = Label(master, text = "optional")
                column += 1
                self.optionLabel2.grid(row=row,column=column,sticky=W, padx=3)
                """
        # tip
        helpText3 = "XML file specifying component, trails and annotations for all node types."
        self.configTip = CreateToolTip(self.configEntry, helpText3)
        #
        column += 1
        #row += 1
        #column = 0

        cbFrame = Frame(master)
        chk1 = Checkbutton(cbFrame, text="Generate", var=self.generateConfig)
        chk1.pack(side="left", fill=None, expand=False, padx=3)
        CreateToolTip(chk1,
                      "Generate configuration file %s" % self.configFile.get())
        chk2 = Checkbutton(cbFrame, text="Use", var=self.useConfig)
        chk2.pack(side="left", fill=None, expand=False, padx=3)
        CreateToolTip(chk2,
                      "Use configuration file %s" % self.configFile.get())
        cbFrame.grid(row=row, column=column, sticky=W)
        row += 1
        column = 0

        self.TrailLabel = Label(master, text="Use trail file")
        self.TrailLabel.grid(row=row, column=column, sticky=W, padx=3)
        self.inTrailFile = StringVar()
        self.T = StringVar()
        if self.args.t:
            self.T.set("1")
            self.inTrailFile.set(self.args.t)
        elif self.args.H:
            self.T.set("2")
            self.inTrailFile.set(self.args.H)
        else:
            self.T.set("0")
        MODES = [
            ("No", "0"),
            ("Unique level", "1"),
            ("Follow history", "2"),
        ]
        trailVal = {
            "0": "Toto",
            "1": self.inTrailFile.get(),
            "2": self.inTrailFile.get()
        }
        helpVal = {
            "0":
            "Do not use trail file.\nCheck that annotations refer to IDs of current graph.",
            "1": "Use only level described by trail file.",
            "2": "Use all levels found in the trail history."
        }
        rbFrame = Frame(master)  # create subframe for radiobuttons
        i = 0
        MODE = MODES[0]
        b = Radiobutton(rbFrame,
                        text=MODE[0],
                        variable=self.T,
                        value=MODE[1],
                        command=lambda: self.inTrailFile.set(''))
        # tip
        CreateToolTip(b, helpVal[str(i)])
        ##
        b.pack(side="left", fill=None, expand=False, padx=3)
        for text, mode in MODES[1:]:
            b = Radiobutton(
                rbFrame,
                text=text,
                variable=self.T,
                value=mode,
                command=lambda: self.openFileCheck(var=self.inTrailFile))
            # tip
            CreateToolTip(b, helpVal[mode])
            ##
            b.pack(side="left", fill=None, expand=False, padx=3)
        rbFrame.grid(row=row, column=1)
        row += 1
        column = 0

        self.inTrailLabel = Label(master, text="Trail file")
        self.inTrailLabel.grid(row=row, column=column, sticky=W, padx=18)
        #self.inTrailEntry = Entry(master, width = WIDTH, textvariable = self.inTrailFile)

        self.inTrailEntry = Entry(master,
                                  width=WIDTH,
                                  textvariable=self.inTrailFile,
                                  validate='focusin',
                                  validatecommand=lambda: self.T.set("2"))
        CreateToolTip(
            self.inTrailEntry,
            """Select node type file for multipartite graphs.\nThis will reset the partiteness to "Multipartite"."""
        )

        column += 1
        self.inTrailEntry.grid(row=row, column=column, padx=3)
        self.inTrailSelect = Button(
            master,
            text="Select",
            command=lambda: self.openFile2(
                var=self.inTrailFile, var2=self.T, value="2"))
        column += 1
        self.inTrailSelect.grid(row=row, column=column, sticky=W, padx=3)
        self.optionLabel2 = Label(master, text="if option set")
        column += 1
        self.optionLabel2.grid(row=row, column=column, sticky=W, padx=3)
        # tip
        helpText3 = "Links IDs of current graph to IDs of ROOT graph (two columns, tab-delimited).\nIf skipped, current graph is considered ROOT."
        self.inTrailTip = CreateToolTip(self.inTrailEntry, helpText3)
        #
        """
                cbFrame = Frame(master)
                self.uniqueTrail = BooleanVar()
                chk1 = Checkbutton(cbFrame, text="Unique trail file", var = self.uniqueTrail)
                chk1.pack(side="left", fill=None, expand=False, padx=3) 
                CreateToolTip(chk1, "Consider only level given by %s" % self.inTrailFile.get())
                self.history = BooleanVar()
                chk2 = Checkbutton(cbFrame, text="Use trail history", var = self.history)
                chk2.pack(side="left", fill=None, expand=False, padx=3) 
                CreateToolTip(chk2, "Follow trail history of trail file %s" % self.inTrailFile.get())
                cbFrame.grid(row=row,column=1)
                """
        row += 1
        column = 0

        # Component file
        self.CompLabel = Label(master, text="Component file ")
        self.CompLabel.grid(row=row, column=column, sticky=W, padx=3)
        self.CompFile = StringVar()
        if self.args.c:
            self.CompFile.set(self.args.c)
        self.CompEntry = Entry(master, width=WIDTH, textvariable=self.CompFile)
        column += 1
        self.CompEntry.grid(row=row, column=column, padx=3)
        self.CompSelect = Button(
            master,
            text="Select",
            command=lambda: self.openFile(var=self.CompFile))
        column += 1
        self.CompSelect.grid(row=row, column=column, sticky=W, padx=3)
        self.optionLabel2 = Label(master, text="optional")
        column += 1
        self.optionLabel2.grid(row=row, column=column, sticky=W, padx=3)
        # tip
        helpText3 = "Links a nodeID and its neighbours to the twin class ID.\nThis is usually an overlapping clustering.\nIf left empty, consider nodes of current graph as components."
        self.CompTip = CreateToolTip(self.CompEntry, helpText3)
        ##
        row += 1
        column = 0

        # Partiteness options
        self.inNodeLabel = Label(master, text="Partiteness")
        self.inNodeLabel.grid(row=row, column=column, sticky=W, padx=3)
        column += 1
        MODES = [
            ("Unipartite", "1"),
            ("Bipartite", "2"),
        ]
        self.inNodeType = StringVar()
        self.v = StringVar()
        if str(self.args.N) == '1' or str(self.args.N) == '2':
            self.v.set(self.args.N)  # initialize at value
        elif self.args.N:
            self.v.set("m")
            self.inNodeType.set(self.args.N)
        else:
            self.v.set("2")
        rbFrame = Frame(master)  # create subframe for radiobuttons
        for text, mode in MODES:
            b = Radiobutton(rbFrame,
                            text=text,
                            variable=self.v,
                            value=mode,
                            command=lambda: self.inNodeType.set(''))
            # tip
            CreateToolTip(b, "Select if graph is %s" % text.lower())
            ##
            b.pack(side="left", fill=None, expand=False, padx=3)
        b = Radiobutton(rbFrame,
                        text="Multipartite",
                        variable=self.v,
                        value="m",
                        command=lambda: self.openFile(var=self.inNodeType))
        CreateToolTip(
            b,
            "Select if graph is multipartite.\nThis will open a select box for the node type file."
        )
        b.pack(side="left", fill=None, expand=False, padx=3)
        rbFrame.grid(row=row, column=column, padx=3)
        row += 1
        column = 0
        self.Label = Label(master, text="Node type file")
        self.Label.grid(row=row, column=column, sticky=W, padx=18)
        self.inNodeEntry = Entry(master,
                                 width=WIDTH,
                                 textvariable=self.inNodeType,
                                 validate='focusin',
                                 validatecommand=lambda: self.v.set("m"))
        CreateToolTip(
            self.inNodeEntry,
            """Select node type file for multipartite graphs.\nThis will reset the partiteness to "Multipartite"."""
        )
        column += 1
        self.inNodeEntry.grid(row=row, column=column, padx=3)
        self.inNodeSelect = Button(
            master,
            text="Select",
            command=lambda: self.openFile2(
                var=self.inNodeType, var2=self.v, value="m")
        )  # reset value to "multipartite" when type file is chosen.
        column += 1
        self.inNodeSelect.grid(row=row, column=column, sticky=W, padx=3)
        self.optionLabel2 = Label(master, text="for multipartite only")
        column += 1
        self.optionLabel2.grid(row=row, column=column, sticky=W, padx=3)
        CreateToolTip(
            self.inNodeSelect,
            """Select node type file for multipartite graphs.\nThis will reset the partiteness to "Multipartite"."""
        )
        row += 1
        column = 0

        # Output file
        self.outLabel = Label(master, text="Output plain file")
        self.outLabel.grid(row=row, column=column, sticky=W, padx=3)
        self.outFile = StringVar()
        if self.args.o:
            self.outFile.set(self.args.o)
        self.outEntry = Entry(master, width=WIDTH, textvariable=self.outFile)
        column += 1
        self.outEntry.grid(row=row, column=column, padx=3)
        self.outSelect = Button(
            master,
            text="Select",
            command=lambda: self.openFile(var=self.outFile))
        column += 1
        self.outSelect.grid(row=row, column=column, sticky=W, padx=3)
        self.optionLabel2 = Label(master, text="required")
        column += 1
        self.optionLabel2.grid(row=row, column=column, sticky=W, padx=3)
        # tip
        helpText2 = "Set name of the plain text description file"
        self.outTip = CreateToolTip(self.outEntry, helpText2)
        ##
        row += 1
        column = 0

        # Output file
        self.outLabel2 = Label(master, text="Output XML file")
        self.outLabel2.grid(row=row, column=column, sticky=W, padx=3)
        self.outFile2 = StringVar()
        if self.args.O:
            self.outFile.set(self.args.O)
        self.outEntry2 = Entry(master, width=WIDTH, textvariable=self.outFile2)
        column += 1
        self.outEntry2.grid(row=row, column=column, padx=3)
        self.outSelect2 = Button(
            master,
            text="Select",
            command=lambda: self.openFile(var=self.outFile2))
        column += 1
        self.outSelect2.grid(row=row, column=column, sticky=W, padx=3)
        self.optionLabel2 = Label(master, text="optional")
        column += 1
        self.optionLabel2.grid(row=row, column=column, sticky=W, padx=3)
        # tip
        helpText2 = "Set name of the XML description file"
        self.outTip = CreateToolTip(self.outEntry2, helpText2)
        ##
        row += 1
        column = 0

        self.optionLabel = Label(master, text="Unique node identifier")
        self.optionLabel.grid(row=row, column=0, sticky=W, padx=3)
        self.I = StringVar()
        if self.args.I:
            self.I.set(self.args.I)
        self.optionEntry = Entry(master, width=WIDTH, textvariable=self.I)
        self.optionEntry.grid(row=row, column=1, padx=3)
        CreateToolTip(
            self.optionEntry,
            """Name of first column in annotation %s file.\nCheck that the items in this column match the node IDs in the ROOT graph."""
            % os.path.basename(self.a.get()))
        row += 1
        column = 0

        self.trackLabel = Label(master, text="Missing annotation label")
        self.trackLabel.grid(row=row, column=column, sticky=W, padx=3)
        self.trackName = StringVar()
        if self.args.T:
            self.trackName.set(self.args.T)
        self.trackEntry = Entry(master,
                                width=WIDTH,
                                textvariable=self.trackName)
        column += 1
        self.trackEntry.grid(row=row, column=column, padx=3)
        # tip
        helpText3 = "Name replacing missing annotations"
        self.trackTip = CreateToolTip(self.trackEntry, helpText3)
        #
        column += 2

        self.Track = BooleanVar()
        chk1 = Checkbutton(master, text="Skip", var=self.Track)
        CreateToolTip(chk1, "Skip missing annotations")
        chk1.grid(row=row, column=column, sticky=W, padx=9)
        row += 1
        column = 0

        self.optionLabel = Label(master,
                                 text="Graphic interface for %s" %
                                 self.configFile.get())
        self.optionLabel.grid(row=row, column=0, sticky=W, padx=3)
        self.K = BooleanVar()
        self.K.set(self.args.K)
        self.chk = Checkbutton(master, text="Display?", var=self.K)
        self.chk.grid(row=row, column=1, padx=3, sticky=W)
        CreateToolTip(
            self.chk,
            "Displays graphic customization interface for the last description.py step.\nIf not selected, displays all attributes for all key types and all trail levels."
        )
        row += 1
        column = 0
        # Log
        self.optionLabel = Label(master, text="Log file")
        self.optionLabel.grid(row=row, column=0, sticky=W, padx=3)
        self.l = StringVar()
        try:
            log = self.args.l.name.strip("(<,>")
        except:
            log = log
        self.l.set(log)
        self.optionEntry = Entry(master, width=WIDTH, textvariable=self.l)
        self.optionEntry.grid(row=row, column=1, padx=3)
        row += 2

        # Populate outFiles if edge file given
        if self.args.i:
            self.setOutputFiles2(IN=self.inEdgeFile,
                                 OUT=[(self.configFile, "config"),
                                      (self.outFile, "desc"),
                                      (self.outFile2, "xml_desc")],
                                 OPEN=False)

        cbFrame = Frame(master)  # create subframe for command buttons

        self.run_button = Button(cbFrame, text="Run", command=self.run)
        self.run_button.grid(row=row, column=0, padx=12)

        self.close_button = Button(cbFrame, text="Close", command=self.Quit)
        self.close_button.grid(row=row, column=1, padx=12)

        cbFrame.grid(row=row, column=1, columnspan=2, sticky=E + W)

        helpText = description.processArgs().format_help()
        self.helpbutton = Button(
            master,
            text="Help",
            command=lambda: HelpWindow(text=helpText, name=self.name))
        self.helpbutton.grid(row=row, column=2, sticky=W, padx=3)
Example #16
0
class Root(Frame):
    '''
    The root window
    '''
    def __init__(self,parent,csvpath="",rosterpath=""):
        '''
        Initilization of the window, assigning height
        centering the window, and starting the interface.
        '''
        self.queue       = Queue()
        self.parent      = parent
        self.interface   = GuiInterface()
        self.loadWindow  = None
        self.remember    = False
        self.initialized = False
        self.csvpathh    = csvpath
        self.rosterpathh = rosterpath
        self.outpathh    = ""
        self.teamsizeh   = ""

        self.startMainUI()

    def centerWindow(self,notself=None):
        '''
        This centers the window into place
        if notself is set, then it centers
        the notself window

        @param:
            notself - TKobject
        '''

        if notself != None: #notself is primarly for progressbar
            sw = self.parent.winfo_screenwidth()
            sh = self.parent.winfo_screenheight()
            x = (sw - self.w/2) / 2
            y = (sh - self.h/2) / 2
            notself.geometry('%dx%d+%d+%d' % (self.w/1.8,self.h/1.8, x,y))
        else:
            sw = self.parent.winfo_screenwidth()
            sh = self.parent.winfo_screenheight()
            x = (sw - self.w) / 2
            y = (sh - self.h) / 2
            self.parent.geometry('%dx%d+%d+%d' % (self.w,self.h, x ,y))

    def startWindow(self):
        '''
        This method starts/creates the window for
        the UI
        '''
        Frame.__init__(self, self.parent, background="white")
        self.style = Style()
        self.style.theme_use("default")
        self.pack(fill=BOTH, expand=1)
        if(not self.initialized):
            self.centerWindow()
        else:
            self.parent.geometry('%dx%d' % (self.w,self.h))
        self.initialized = True

    def resetWindow(self):
        '''
        Resets the window
        '''
        if(self.initialized):
            self.destroy()
        if(self.loadWindow != None):
            self.loadWindow.destroy()

        self.startWindow()

    def startMainUI(self):
        '''
        Starting the main UI takes some work, this creates the buttons
        labels and entrys. Also puts them into place, and adds
        function calls to the buttons
        '''
        #RESETING WINDOW
        self.h           = 290
        self.w           = 600
        self.resetWindow()
        self.parent.title("Input")

        #CREATING CSV FRAME
        csvFrame = Frame(self)
        csvFrame.pack(fill=X, side=TOP)

        csvLabel = Label(csvFrame, text="Path to csv:", background="white")
        csvLabel.pack(side=LEFT, padx=15, pady=10)

        self.csvEntry = Entry(csvFrame, width=30)
        self.csvEntry.insert(0,self.csvpathh)
        self.csvEntry.pack(side=LEFT, padx=35, pady=10)

        csvButton = Button(csvFrame, command=self.csvstartfilebrowser, text="Browse...")
        csvButton.pack(side=LEFT, padx=10, pady=10)
        #DONE CSV FRAME

        #CREATING ROSTER FRAME
        rosterFrame = Frame(self)
        rosterFrame.pack(fill=X, side=TOP)

        rosterLabel = Label(rosterFrame, text="Path to roster:", background="white")
        rosterLabel.pack(side=LEFT, padx=17, pady=10)

        self.rosterEntry = Entry(rosterFrame, width=30)
        self.rosterEntry.insert(0,self.rosterpathh)
        self.rosterEntry.pack(side=LEFT, padx=15, pady=10)

        rosterButton = Button(rosterFrame, command=self.rosterstartfilebrowser, text="Browse...")
        rosterButton.pack(side=LEFT, padx=28, pady=10)
        #DONE ROSTER FRAME

        #CREATING OUTPUT FRAME
        outputFrame = Frame(self)
        outputFrame.pack(fill=X, side=TOP)

        outputLabel = Label(outputFrame, text="Path to output:", background="white")
        outputLabel.pack(side=LEFT, padx=15, pady=10)

        self.outputEntry = Entry(outputFrame, width=30)
        self.outputEntry.insert(0,self.outpathh)
        self.outputEntry.pack(side=LEFT, padx=15, pady=10)

        outputButton = Button(outputFrame, command=self.outputstartfilebrowser, text="Browse...")
        outputButton.pack(side=LEFT, padx=28, pady=10)
        #DONE OUTPUT FRAME

        #CREATING TEAMSIZE FRAME
        teamsizeFrame= Frame(self)
        teamsizeFrame.pack(fill=X, side=TOP)

        teamsizeLabel = Label(teamsizeFrame, text="Team size:", background="white")
        teamsizeLabel.pack(side=LEFT, padx=15, pady=10)

        self.teamsizeEntry = Entry(teamsizeFrame, width=5)
        self.teamsizeEntry.insert(0,self.teamsizeh)
        self.teamsizeEntry.pack(side=LEFT, padx=43, pady=10)
        #DONE TEAMSIZE FRAME

        #CREATING BOTTOM BUTTONS
        frame = Frame(self, borderwidth=1)
        frame.pack(fill=BOTH, expand=True)
        self.pack(fill=BOTH, expand=True)

        exitButton = Button(self,text="Exit",command=self.parent.destroy)
        exitButton.pack(side=RIGHT, padx=5, pady=5)
        self.submitButton = Button(self,text="Submit",command=self.submitFiles)
        self.submitButton.pack(side=RIGHT)
        #DONE BOTTOM BUTTONS

    def optionUI(self):
        '''
        This creates the option window which
        presents the user with the generated
        teams and their options
        '''
        #RESETING WINDOW
        self.h = 400
        self.w = 800
        self.resetWindow()
        self.parent.title("Options")

        #CREATING SCROLL AREA
        scrollFrame = Frame(self)
        scrollFrame.pack(fill=X, side=TOP)

        self.teamlisting = Listbox(scrollFrame, width=self.w, height=18, \
                                selectmode=MULTIPLE)

        count = 1
        for team in self.interface.teams:
            teamstring  = "Team: " + str(count)
            teamstring += " score: " + "%.4f " % team.rating
            teamstring += " members: "
            for student in team.members:
                teamstring += student.name + " | "
            count += 1
            self.teamlisting.insert(END, teamstring)

        self.teamlisting.pack(padx=5, pady=5)
        #DONE SCROLL AREA

        #This will enable double-clicking
        self.teamlisting.bind('<Double-1>', lambda x: self.inspectTeamUI(self.teamlisting.curselection()))

        #CREATING BOTTOM BUTTONS
        frame = Frame(self, borderwidth=1)
        frame.pack(fill=BOTH, expand=True)
        self.pack(fill=BOTH, expand=True)

        backButton = Button(self,text="Back",command=self.startMainUI)
        backButton.pack(side=LEFT, padx=5, pady=5)
        exitButton = Button(self,text="Exit",command=lambda: self.parent.destroy() and exit())
        exitButton.pack(side=RIGHT, padx=5, pady=5)
        saveButton = Button(self,text="Save",command=self.interface.writeFile)
        saveButton.pack(side=RIGHT)
        rerunButton = Button(self,text="Rerun",command=self.reRun)
        rerunButton.pack(side=RIGHT, padx=5, pady=5)
        shuffleTeamsButton = Button(self,text="Shuffle Selected",command=self.shuffleSelected)
        shuffleTeamsButton.pack(side=RIGHT)
        swappingMembersButton = Button(self,text="Swap Members",command=self.memberSwap)
        swappingMembersButton.pack(side=RIGHT,padx=5, pady=5)
        emailscreenButton = Button(self,text="Email Team(s)",command=self.emailScreen)
        emailscreenButton.pack(side=RIGHT)
        #DONE BOTTOM BUTTONS

    def inspectTeamUI(self,selection):
        '''
        This page will allow the user to see info on the team that was double clicked.
        '''
        #RESETING WINDOW
        self.h = 400
        self.w = 800
        self.resetWindow()
        self.parent.title("About This Team")

        #CREATING SCROLL AREA
        scrollFrame = Frame(self)
        scrollFrame.pack(fill=X, side=TOP)

        self.inspectedTeamStudentListing = Listbox(scrollFrame, width=self.w, height=9)
        self.inspectedTeamScheduleListing = Listbox(scrollFrame, width=self.w, height=9)

        if selection:
            inspectedTeamIndex = selection[0]
            inspectedTeam = self.interface.teams[inspectedTeamIndex]
            for student in inspectedTeam.members:
                studentstring  = "Name: " + student.name
                studentstring += " |Languages: " + str(student.filters.get("Languages")[0]).strip('[]')
                studentstring += " |Pref. Teammates: " + str(student.filters.get("Teammates")[0]).strip('[]')
                self.inspectedTeamStudentListing.insert(END, studentstring)
                studentstring  = "Schedule for " + student.name + " = "
                for time_and_day in student.filters.get("Schedule")[0]:
                    studentstring += str(time_and_day.name) + " " + str(time_and_day.times) + " | "
                self.inspectedTeamScheduleListing.insert(END, studentstring)

        else:
            self.inspectedTeamStudentListing.insert(END, "Please try again")

        self.inspectedTeamStudentListing.pack(padx=5, pady=5)
        self.inspectedTeamScheduleListing.pack(padx=5, pady=5)
        #DONE SCROLL AREA

        #CREATING BOTTOM BUTTONS
        frame = Frame(self, borderwidth=1)
        frame.pack(fill=BOTH, expand=True)
        self.pack(fill=BOTH, expand=True)

        closeButton = Button(self,text="Close",command=self.optionUI)
        closeButton.pack(side=RIGHT,padx=5, pady=5)
        #DONE BOTTOM BUTTONS


    def memberSwapUI(self,indexes):
        '''
        This creates the window which
        allows the user to swap
        individual members and reweigh
        teams.

        @param:
            indexes = int[]
        '''
        #RESETING WINDOW
        self.h = 400
        self.w = 800
        self.resetWindow()
        self.parent.title("Swapping Members")

        #CREATING SCROLL AREA
        scrollFrame = Frame(self)
        scrollFrame.pack(fill=X, side=TOP)

        self.teamlisting1 = Listbox(scrollFrame, width=self.w, height=9)

        self.teamlisting2 = Listbox(scrollFrame, width=self.w, height=9)

        count = 1
        team = self.interface.teams[indexes[0]]
        for student in team.members:
            teamstring = ""
            teamstring += student.name
            self.teamlisting1.insert(END, teamstring)
        count += 1

        team = self.interface.teams[indexes[1]]
        for student in team.members:
            teamstring = ""
            teamstring += student.name
            self.teamlisting2.insert(END, teamstring)
        count += 1

        self.teamlisting1.pack(padx=5, pady=5)
        self.teamlisting2.pack(padx=5, pady=5)
        #DONE SCROLL AREA

        #CREATING BOTTOM BUTTONS
        frame = Frame(self, borderwidth=1)
        frame.pack(fill=BOTH, expand=True)
        self.pack(fill=BOTH, expand=True)

        backButton = Button(self,text="Back",command=lambda: self.swapSizeCheck(indexes))
        backButton.pack(side=LEFT, padx=5, pady=5)
        exitButton = Button(self,text="Exit",command=self.parent.destroy)
        exitButton.pack(side=RIGHT, padx=5, pady=5)
        swapButton = Button(self,text="Swap Team",command= lambda: self.switchTeams(indexes))
        swapButton.pack(side=RIGHT,padx=5, pady=5)
        #DONE BOTTOM BUTTONS

    def emailScreen(self):
        '''
        This starts the email login screen
        '''
        if(len(self.teamlisting.curselection()) < 1):
            messagebox.showinfo("Error","Please select one or more teams")
            return

        if(self.remember):
            self.emailTeams()
            return

        self.emailWindow = Toplevel(self.parent)
        self.centerWindow(self.emailWindow)

        #CREATING EMAIL FRAME
        emailFrame = Frame(self.emailWindow)
        emailFrame.pack(fill=X, side=TOP)
        emailLabel = Label(emailFrame, text="Email address:", background="white")
        emailLabel.pack(side=LEFT, padx=15, pady=10)

        self.emailEntry = Entry(emailFrame, width=20)
        self.emailEntry.insert(0,"")
        self.emailEntry.pack(side=LEFT, padx=43, pady=10)
        #EMAIL FRAME DONE

        #CREATING PASSWORD FRAME
        passwordFrame = Frame(self.emailWindow)
        passwordFrame.pack(fill=X, side=TOP)
        passwordLabel = Label(passwordFrame, text="Password:"******"white")
        passwordLabel.pack(side=LEFT, padx=17, pady=10)

        self.passwordEntry = Entry(passwordFrame, width=20, show="*")
        self.passwordEntry.insert(0,"")
        self.passwordEntry.pack(side=LEFT, padx=65, pady=10)
        #PASSWORD FRAME DONE

        #CREATING REMEMBER FRAME
        rememberFrame = Frame(self.emailWindow)
        rememberFrame.pack(fill=X, side=TOP)
        rememberLabel = Label(rememberFrame, text="Remember Username/Password", background="white")
        rememberLabel.pack(side=LEFT, padx=15, pady=10)

        self.rememberCheck = Checkbutton(rememberFrame)
        self.rememberCheck.pack(side=LEFT, padx=15, pady=10)
        #REMEMBER FRAME DONE

        #CREATING BOTTOM BUTTONS
        frame = Frame(self.emailWindow, borderwidth=1)
        frame.pack(fill=BOTH, expand=True)

        exitButton = Button(self.emailWindow,text="Cancel",command=self.emailWindow.destroy)
        exitButton.pack(side=RIGHT, padx=5, pady=5)
        submitButton = Button(self.emailWindow,text="Submit",command=self.emailTeams)
        submitButton.pack(side=RIGHT,padx=5, pady=5)
        #DONE BOTTOM BUTTONS

    def emailTeams(self):
        '''
        This invokes emailing the selected teams
        '''
        success = True

        if(not self.remember):
            selection = self.teamlisting.curselection()
            email     = self.emailEntry.get()
            password  = self.passwordEntry.get()

            if(email == "" or password == ""):
                messagebox.showinfo("Error","Cannot leave fields empty")
                return

            if(len(self.rememberCheck.state()) != 0 and self.rememberCheck.state()[0] == "selected"):
                self.remember = True
                success = self.interface.sendEmail(selection,email,password,True)
            else:
                success = self.interface.sendEmail(selection,email,password)

        else:
           success = self.interface.sendEmail(self.teamlisting.curselection())

        if not success:
            self.remember = False
            messagebox.showinfo("Error","Sending the email was unsuccessful, check your email and password")
            return

        if success:
            messagebox.showinfo("Success","Email was sent successfully")
            self.emailWindow.destroy()
            return

    def loadingScreen(self):
        '''
        This starts the loading screen
        and disables all buttons
        '''
        for i in self.winfo_children():
            if Button == type(i):
                i.configure(state=DISABLED)

        self.loadWindow = Toplevel(self.parent)
        loadingstring   = "Please wait while we run the algorithm"
        loadinglabel    = Label(self.loadWindow, text=loadingstring, background="white")
        progressbar     = Progressbar(self.loadWindow, orient= "horizontal", \
                                    length=300, mode="indeterminate")
        progressbar.pack(pady=self.h/10)
        loadinglabel.pack()

        self.centerWindow(self.loadWindow)
        self.loadWindow.title("Wait")
        progressbar.start()

    def memberSwap(self):
        '''
        This will setup the call for memberSwapUI
        and check for improper/missing selections
        '''
        indexes = []
        selection = self.teamlisting.curselection()
        for i in selection:
            indexes.append(i)
        if len(indexes) == 2:
            self.memberSwapUI(indexes);
        else:
            messagebox.showinfo("Error","Please select 2 teams")

    def switchTeams(self, indexes):
        '''
        Puts selected members into the other team in
        the memberSwapUI
        @param:
            indexes = int[]
        '''
        student1 = self.teamlisting1.curselection()
        student2 = self.teamlisting2.curselection()

        if student1:
            if len(self.interface.teams[indexes[1]].members) < self.interface.teams[indexes[1]].maxsize:
                student = self.interface.teams[indexes[0]].members[int(student1[0])]
                newTeam = self.interface.teams[indexes[1]]
                oldTeam = self.interface.teams[indexes[0]]
                newTeam.insertStudent(student)
                oldTeam.remStudent(student)
                self.memberSwapUI(indexes)
            else:
                messagebox.showinfo("Max Capacity", "Group is at maximum capacity")

        if student2:
            if len(self.interface.teams[indexes[0]].members) < self.interface.teams[indexes[0]].maxsize:
                student = self.interface.teams[indexes[1]].members[int(student2[0])]
                newTeam = self.interface.teams[indexes[0]]
                oldTeam = self.interface.teams[indexes[1]]
                newTeam.insertStudent(student)
                oldTeam.remStudent(student)
                self.memberSwapUI(indexes)
            else:
                messagebox.showinfo("Max Capacity", "Group is at maximum capacity")

    def swapSizeCheck(self,indexes):
        '''
        This is a check to make sure before you back up from the
        memberSwapUI that the sizes are still correct

        @param:
            indexes = int[]
        '''
        if len(self.interface.teams[indexes[0]].members) < self.interface.teams[indexes[0]].maxsize \
                or len(self.interface.teams[indexes[1]].members) < self.interface.teams[indexes[1]].maxsize:
            if messagebox.askokcancel("WARNING", "Warning: A group is shorthanded. You sure you want to proceed?"):
                for index in indexes:
                    self.interface.algorithm.weightCalc(self.interface.teams[index])
                self.optionUI();
        else:
            for index in indexes:
                self.interface.algorithm.weightCalc(self.interface.teams[index])
            self.optionUI();

    def shuffleSelected(self):
        '''
        This is a wrapper function that
        shuffles the selected teams
        '''
        #Gets selected values
        indexes   = []
        selection = self.teamlisting.curselection()
        for i in selection:
            indexes.append(i)

        self.interface.reShuffleSelectedTeams(indexes)
        self.optionUI()

    def reRun(self):
        '''
        A wrapper function to rerun the
        algorithm
        '''

        thread = ThreadedTask(self.queue,\
            self.interface.reShuffleAll)
        thread.start()
        ThreadedTask(self.queue,self.loadingScreen).start()
        self.checkThread(thread,self.optionUI)

    def submitFiles(self):
        '''
        Checks the validity of the entry feilds for
        After checks it runs our python script.
        '''
        csvtext     = self.csvEntry.get()
        teamsize    = self.teamsizeEntry.get()
        rostertext  = self.rosterEntry.get()
        outputtext  = self.outputEntry.get()

        #Checking existance of paths and extensions
        if(not os.path.exists(csvtext) and csvtext[-4:] != ".csv"):
            messagebox.showinfo("Error","Not a CSV or the file does not exist")
            return

        #Checking existance of paths and extensions
        if(not os.path.exists(rostertext) and rostertext[-4:] != ".txt"):
           messagebox.showinfo("Error","Not a roster or the file does not exist")
           return

        #Checking existance of path
        if(not os.path.exists(outputtext)):
           messagebox.showinfo("Error","Directory dosen't exists for output")
           return

        #Checking if the string is an int and in range
        if(not self.testNumber(teamsize)):
            messagebox.showinfo("Error","Please enter a positive integer for teamsize(2,5)")
            return

        self.csvpathh    = csvtext
        self.rosterpathh = rostertext
        self.outpathh    = outputtext
        self.teamsizeh   = teamsize

        self.interface.setOutputPath(outputtext)

        self.submitButton.configure(state=DISABLED)
        runalgorithm = lambda: self.interface.runGeneral(\
                        rostertext,csvtext,int(teamsize))
        thread1 = ThreadedTask(self.queue,runalgorithm)
        thread2 = ThreadedTask(self.queue,self.loadingScreen)
        thread2.start()
        thread1.start()

        self.checkThread(thread1,self.optionUI)

    def checkThread(self,thread,function):
        '''
        This function checks to see if
        the given thread is dead, if it
        is not, it recalls a new checkThread.
        After the thread is dead, it calls the
        given function

        @param:
            thread   - ThreadedTask
            functoin - a function
        '''
        if thread.is_alive():
            self.parent.after(1000, lambda: self.checkThread(thread,function))
        else:
            function()

    def testNumber(self,i,minimum=0,maximum=5):
        '''
        Checks if i is an integer and between
        a certain range

        @param:
            i (string)
            minimum (optional int)
            maximum (optional int)
        '''
        try:
            i = int(i)
            return (i >= minimum) and (i <= maximum)
        except:
            return False

    def csvstartfilebrowser(self):
        '''
        Starts the filebrowser for the csv file
        '''
        currdir = os.getcwd()
        fileopt = [('csv files', '*.csv')]
        directo = filedialog.askopenfilename(parent=self, filetypes=fileopt, \
                                         initialdir=currdir, title="Select file")
        #clearning and setting csventry
        self.csvEntry.delete(0,'end')
        self.csvEntry.insert(0,str(directo))

    def rosterstartfilebrowser(self):
        '''
        Starts the filebrowser for the text file
        '''
        currdir = os.getcwd()
        fileopt = [('text files', '*.txt')]
        directo = filedialog.askopenfilename(parent=self, filetypes=fileopt, \
                                         initialdir=currdir, title="Select file")
        #clearning and setting rosterentry
        self.rosterEntry.delete(0,'end')
        self.rosterEntry.insert(0,str(directo))

    def outputstartfilebrowser(self):
        '''
        Starts the filebrowser for the output
        '''
        currdir = os.getcwd()
        directo = filedialog.askdirectory(parent=self,\
                                    initialdir=currdir, title="Select file")

        #clearning and setting outputentry
        self.outputEntry.delete(0,'end')
        self.outputEntry.insert(0,str(directo))
Example #17
0
class OptimizeGroup(Group):
    def __init__(self, *args, **kwargs):
        self._app = kwargs.pop('wavesyn_root')
        self.__topwin = kwargs.pop('topwin')

        super().__init__(*args, **kwargs)

        parameter_frame = Frame(self)
        parameter_frame.pack(side='left', expand='yes', fill='y')
        self.__num = LabeledEntry(parameter_frame)
        set_attributes(self.__num,
                       label_text='num',
                       entry_text='1',
                       label_width=5,
                       entry_width=8,
                       checker_function=self._app.gui.value_checker.check_int)
        self.__num.entry.bind('<Return>', lambda event: self._on_solve_click())
        self.__num.pack(side='top')

        self.__pci = LabeledEntry(parameter_frame)
        set_attributes(self.__pci,
                       label_text='PCI',
                       entry_text='100',
                       label_width=5,
                       entry_width=8,
                       checker_function=self._app.gui.value_checker.check_int)
        self.__pci.pack(side='top')

        self.__parallel_checker_variable = IntVar()
        self.__parallel_checker = Checkbutton(
            parameter_frame,
            text="Parallel",
            variable=self.__parallel_checker_variable,
            command=self._on_parallel_checker_click)
        self.__parallel_checker.pack()

        progfrm = Frame(self)
        progfrm.pack(side='left', expand='yes', fill='y')

        self.__genbtn = Button(progfrm,
                               text='Generate',
                               command=self._on_solve_click)
        self.__genbtn.pack(side='top')
        Button(progfrm, text='Stop',
               command=self._on_stop_button_click).pack(side='top')

        self.__progressbar_variable = IntVar()
        self.__finishedwav = IntVar()
        self.__progressbar = Progressbar(progfrm,
                                         orient='horizontal',
                                         variable=self.__progressbar_variable,
                                         maximum=100)
        self.__progressbar.pack(side='left')
        self.__progressbar.config(length=55)
        self.__finishedwavbar = Progressbar(progfrm,
                                            orient='horizontal',
                                            variable=self.__finishedwav)
        self.__finishedwavbar.pack(side='left')
        self.__finishedwavbar.config(length=30)

        self.name = 'Generate'

        self.getparams = None
        self.__stopflag = False

    def _on_solve_click(self):
        params = self.__topwin.parameter_group.get_parameters()
        repeat_times = self.__num.get_int()

        if self.__parallel_checker_variable.get():
            run = self.__topwin.current_algorithm.process_run
        else:
            run = self.__topwin.current_algorithm.thread_run
        with code_printer():
            run(on_finished=['store', 'draw'],
                progress_indicator='progress_dialog',
                repeat_times=repeat_times,
                **params)

    def _on_stop_button_click(self):
        self.__stopflag = True

    def _on_parallel_checker_click(self):
        topwin = self.__topwin
        if topwin.current_algorithm.need_cuda:
            self.__parallel_checker_variable.set(0)
            topwin.root_node.gui.dialogs.report(f'''{topwin.node_path}:
Current algorithm "{topwin.current_algorithm.meta.name}" need CUDA worker, which does not support multi-cpu parallel.
            ''')

    def _cancel_parallel(self):
        self.__parallel_checker_variable.set(0)
Example #18
0
 def create_other_buttons(self):
     btn = Checkbutton(self.make_frame()[0],
                       variable=self.recvar,
                       text='Recurse down subdirectories')
     btn.pack(side='top', fill='both')
    def setup_main_window(self, window) -> None:
        self.sh_window: Tk = window
        self.sh_window.title('Option chain analyzer')
        window_width: int = self.sh_window.winfo_reqwidth()
        window_height: int = self.sh_window.winfo_reqheight()
        position_right: int = int(self.sh_window.winfo_screenwidth() / 2 -
                                  window_width / 2)
        position_down: int = int(self.sh_window.winfo_screenheight() / 2 -
                                 window_height / 2)
        #self.sh_window.geometry("1200x600+{}+{}".format(position_right, position_down))
        self.sh_window.geometry("1200x600+300+200")
        #self.sh_window.geometry("+{}+{}".format(position_right, position_down))

        self.sh_frame: Frame = Frame(self.sh_window)
        self.stock_frame: Frame = Frame(self.sh_window)

        top_frame: Frame = Frame(self.sh_window)
        top_frame.rowconfigure(0, weight=1)
        top_frame.columnconfigure(0, weight=1)
        top_frame.pack(anchor=S, expand=False, side=TOP)

        row_idx: int = 0

        self.index_call = True
        self.get_expiry_dates()
        date_var: StringVar = StringVar()
        date_var.set(" ")
        lbl_exp_date: Label = Label(top_frame,
                                    text='Index Expiry',
                                    justify=LEFT,
                                    font=("TkDefaultFont", 10, "bold"))
        #lbl_exp_date.grid(row=row_idx,column=0,sticky=N+S+W)
        lbl_exp_date.pack(anchor=N, expand=False, side=LEFT)
        self.date_combo_box = Combobox(top_frame,
                                       width=10,
                                       textvariable=date_var)
        self.date_combo_box.pack(anchor=N, expand=False, side=LEFT)
        #self.date_combo_box.grid(row=row_idx, column=1, sticky=N + S + E + W)
        self.date_combo_box.bind('<<ComboboxSelected>>', self.set_expiry_date)
        self.date_combo_box['values'] = tuple(self.expiry_dates)
        self.date_combo_box.set(self.expiry_dates[0])
        self.date_combo_box.configure(state='readonly')
        row_idx += 1

        self.index_call = False
        self.get_expiry_dates()
        date_var_stock: StringVar = StringVar()
        date_var_stock.set(" ")
        lbl_exp_date_stock: Label = Label(top_frame,
                                          text='Stock Expiry',
                                          justify=LEFT,
                                          font=("TkDefaultFont", 10, "bold"))
        #lbl_exp_date_stock.grid(row=row_idx,column=0,sticky=N+S+W)
        lbl_exp_date_stock.pack(anchor=N, expand=False, side=LEFT)
        self.date_combo_box_stock = Combobox(top_frame,
                                             width=10,
                                             textvariable=date_var_stock)
        self.date_combo_box_stock.pack(anchor=N, expand=False, side=LEFT)
        #self.date_combo_box_stock.grid(row=row_idx, column=1, sticky=N + S + E + W)
        self.date_combo_box_stock.bind('<<ComboboxSelected>>',
                                       self.set_expiry_date)
        self.date_combo_box_stock['values'] = tuple(self.expiry_dates)
        self.date_combo_box_stock.set(self.expiry_dates[0])
        self.date_combo_box_stock.configure(state='readonly')
        row_idx += 1

        self.check_stocks_var = IntVar()
        self.check_stocks = Checkbutton(top_frame, text = "Stocks", variable = self.check_stocks_var, \
                                    onvalue = 1, offvalue = 0, width = 10)
        #self.check_stocks.grid(row=row_idx, column=1, sticky=N + S + E + W)
        self.check_stocks.pack(anchor=N, expand=False, side=LEFT)
        self.check_stocks_var.set(0)
        row_idx += 1

        self.check_index_var = IntVar()
        self.check_index = Checkbutton(top_frame, text = "Index", variable = self.check_index_var, \
                                    onvalue = 1, offvalue = 0, width = 10)
        #self.check_index.grid(row=row_idx, column=1, sticky=N + S + E + W)
        self.check_index.pack(anchor=N, expand=False, side=LEFT)
        self.check_index_var.set(1)
        row_idx += 1

        ref_intvl: Stringvar = StringVar()
        ref_intvl.set(" ")
        lbl_refresh_interval: Label = Label(top_frame,
                                            text='Interval (min)',
                                            justify=LEFT,
                                            font=("TkDefaultFont", 10, "bold"))
        #lbl_refresh_interval.grid(row=row_idx,column=0,sticky=N+S+W)
        lbl_refresh_interval.pack(anchor=N, expand=False, side=LEFT)
        self.ref_intvl_cbox: Combobox = Combobox(top_frame,
                                                 width=10,
                                                 textvariable=ref_intvl)
        #self.ref_intvl_cbox.grid(row=row_idx, column=1, sticky=N + S + E + W)
        self.ref_intvl_cbox.pack(anchor=N, expand=False, side=LEFT)
        self.ref_intvl_cbox.bind('<<ComboboxSelected>>', self.set_ref_intvl)
        self.ref_intvl_cbox['values'] = tuple(range(10, 600, 20))
        self.ref_intvl_cbox.configure(state='readonly')
        row_idx += 1

        self.start_button: Button = Button(top_frame,
                                           text='START',
                                           command=self.main_recursive,
                                           width=10)
        #self.start_button.grid(row=row_idx, column=1, sticky=N + S + E + W)
        self.start_button.pack(anchor=N, expand=True, side=TOP)
        row_idx += 1

        canvas = tk.Canvas(self.sh_window)
        scroll_y = tk.Scrollbar(self.sh_window,
                                orient="vertical",
                                command=canvas.yview)

        bot_frame: Frame = Frame(canvas)
        #bot_frame = ScrollFrame(bot_frame)
        #bot_frame.rowconfigure(0, weight=1)
        #bot_frame.columnconfigure(0, weight=1)
        #bot_frame.grid(row=row_idx,column=0,sticky=N+S+W)
        #bot_frame = ScrollableFrame(self.sh_window)
        #bot_frame = ScrollFrame(self.sh_window)
        #bot_frame.rowconfigure(1, weight=1)
        #bot_frame.columnconfigure(0, weight=1)
        #bot_frame.pack(anchor=N, expand=False, side=LEFT)

        #bot_frame: Listbox = Listbox(self.sh_window)
        #bot_frame.pack(side=LEFT,fill='both')
        #vscrollbar = Scrollbar(self.sh_window)
        #vscrollbar.pack(side = LEFT, fill = 'both')
        #for i in range(10000):
        #    bot_frame.insert(END,i)

        self.stock_check_var: List[IntVar] = []
        self.stock_check: List[Checkbutton] = []
        int_col = 0
        tmp_row_idx = row_idx
        for stk in enumerate(self.stock_symbs):
            #if(int(stk[0])>30 and int_col==0):
            #    int_col = 1
            #    row_idx = tmp_row_idx
            self.stock_check_var.append(IntVar())
            cb = Checkbutton(bot_frame, text = stk[1], variable = self.stock_check_var[-1], \
                                    onvalue = 1, offvalue = 0, width =12)
            cb.pack()
            if (stk[1] in self.popular_stocks):
                self.stock_check_var[-1].set(1)
            else:
                self.stock_check_var[-1].set(0)
            self.stock_check.append(cb)
            row_idx += 1
        canvas.create_window(0, 0, anchor='nw', window=bot_frame)
        canvas.update_idletasks()
        canvas.configure(scrollregion=canvas.bbox('all'),
                         yscrollcommand=scroll_y.set)

        canvas.pack(fill='y', expand=False, side=LEFT)
        scroll_y.pack(fill='y', side=LEFT, expand=False)

        self.sh_window.mainloop()
Example #20
0
File: grep.py Project: 1st1/cpython
 def create_other_buttons(self):
     "Add check button to recurse down subdirectories."
     btn = Checkbutton(
             self.make_frame()[0], variable=self.recvar,
             text="Recurse down subdirectories")
     btn.pack(side="top", fill="both")
Example #21
0
class Output(LabelFrame):
    def __init__(self, parent):
        LabelFrame.__init__(self, parent, text="Output")
        self.show = IntVar(value=False)
        self.cb = Checkbutton(self, text="show output", variable=self.show)
        self.cb.pack(side="left")
Example #22
0
    def __init__(self, *args, **kwargs):
        if 'value_checker' in kwargs:
            value_checker    = kwargs.pop('value_checker')
            check_nonnegative_float  = value_checker.check_nonnegative_float
        else:
            check_nonnegative_float  = None
            
        if 'balloon' in kwargs:
            kwargs.pop('balloon')
        
        super().__init__(*args, **kwargs)
        
        self.__gui_images = []
        
        major = IntVar(0)
        minor = IntVar(0)
        self.__major = major
        self.__minor = minor
        self.__figure_observer = self.FigureObserver(self)
                                
        def askgridprop():
            win = Toplevel()
            color = ['#000000', '#000000']

            propvars = [StringVar() for i in range(4)]
            guidata = (
                {
                    'linestyle': ('Major Line Style', propvars[0], None),
                    'linewidth': ('Major Line Width', propvars[1], check_nonnegative_float)
                },
                {
                    'linestyle': ('Minor Line Style', propvars[2], None),
                    'linewidth': ('Minor Line Width', propvars[3], check_nonnegative_float)
                }
            )

            for d in guidata:
                for key in d:
                    pitem = LabeledEntry(win)
                    pitem.pack()
                    pitem.label_text = d[key][0]
                    pitem.entry['textvariable'] = d[key][1]
                    if d[key][2]:
                        pitem.checker_function = d[key][2]

            def setmajorcolor():
                c = askcolor()
                color[0] = c[1]

            def setminorcolor():
                c = askcolor()
                color[1] = c[1]
                
            Button(win, text='Major Line Color', command=setmajorcolor).pack()
            Button(win, text='Minor Line Color', command=setminorcolor).pack()

            win.protocol('WM_DELETE_WINDOW', win.quit)
            win.focus_set()
            win.grab_set()
            win.mainloop()
            win.destroy()
            
            c_major = StringVar(); c_major.set(color[0])
            c_minor = StringVar(); c_minor.set(color[1])
            guidata[0]['color'] = ('Major Line Color', c_major, None)
            guidata[1]['color'] = ('Minor Line Color', c_minor, None)
            return guidata

        def on_property_button_click():
            ret = askgridprop()
            props  = {'major':{}, 'minor':{}}
            for index, name in enumerate(('major', 'minor')):
                for key in ret[index]:
                    value = ret[index][key][1].get()
                    if value:
                        props[name][key] = value
            major.set(1)
            minor.set(1)
            self.notify_observers(major_grid=major.get(), 
                                  minor_grid=minor.get(), props=props)
                                    
        icon = ImageTk.PhotoImage(file=Scripting.root_node.get_gui_image_path('GridTab_Major.png'))
        self.__gui_images.append(icon)
        major_grid_checkbutton = Checkbutton(self, text='Grid Major', 
                                             image=icon,
                                             compound='left',
                                             variable=major, 
                                             command=self._on_check_click)
        major_grid_checkbutton.pack(fill='x')
        self.major_grid_checkbutton = major_grid_checkbutton
        
        icon = ImageTk.PhotoImage(file=Scripting.root_node.get_gui_image_path('GridTab_Minor.png'))
        self.__gui_images.append(icon)
        minor_grid_checkbutton = Checkbutton(self, text='Grid Minor', 
                                             image=icon,
                                             compound='left',
                                             variable=minor, 
                                             command=self._on_check_click)
        minor_grid_checkbutton.pack(fill='x')
        self.minor_grid_checkbutton = minor_grid_checkbutton        
        
        property_button = Button(self, text='Property', 
                             command=on_property_button_click)
        property_button.pack()
        self.property_button    = property_button
        
        self.name = 'Grid'
Example #23
0
def cliked():
    some_text = input1.get()
    txt2.config(text = some_text)

window = Tk()
window.geometry('800x600')
window.title("Welcome to new window")

txt = Label(window, bg="green", fg="black", width=30, text="это виджет Label")
txt.pack()
txt2 = Label(window, bg="blue", fg="white", width=30, text="это виджет Label 2 ")
txt2.pack()

input1 = Entry(window, bg="orange", fg="red", width=30, font=20)
input1.pack()

btn = Button(window, bg="yellow", text="Click", command = cliked)
btn.pack()

combobox = Combobox(window)
combobox['values'] = (1,2,3,4,5,'Текст1','Текст2')
combobox.current(1)
combobox.pack()


check = Checkbutton(window, text="Выбор")
check.pack()

window.mainloop()
Example #24
0
    def initWidgets(self):
        """
        Initialize all widgets in window here.
        Entries are saved in [self.entries] list.
        ----------------------------------------------------------
        5 frames are initialized and saved into [self.frames] list here:
        1) [About frame] - Frame to contain all non-food entries.
        2) [Separator frame] - Frame to contain a simple separator.
        3) [New order frame] - Frame to contain entries for adding orders to the main table.
        4) [Orders table frame] - Frame to contain table with list of added orders.
        5) [Save report frame] - Frame to contain buttons, which save a report.
        ----------------------------------------------------------
        """
        # Create 5 frames here.
        for i in range(5):
            self.frames.append(Frame(self.content))
        # Set the weights of cols and rows in the grid.
        self.configureGrid()
        # Center a window.
        self.centerWindow()

        # Place 4 frames to the window.
        self.frames[0].grid(column=0, row=0, sticky=N + E + W, padx=5, pady=3)
        self.frames[1].grid(column=0,
                            row=1,
                            sticky=N + S + E + W,
                            padx=5,
                            pady=3)
        self.frames[2].grid(column=0,
                            row=2,
                            sticky=N + S + E + W,
                            padx=5,
                            pady=3)
        self.frames[3].grid(column=0,
                            row=3,
                            sticky=N + S + E + W,
                            padx=5,
                            pady=10)
        self.frames[4].grid(column=0, row=4, sticky=S + E + W, padx=5, pady=3)

        # About frame widgets.
        Label(self.frames[0], text='Заказчик').grid(row=0,
                                                    column=0,
                                                    sticky=E,
                                                    pady=5)
        Label(self.frames[0], text='Менеджер').grid(row=0,
                                                    column=2,
                                                    sticky=E,
                                                    pady=5)
        Label(self.frames[0],
              text='Вид мероприятия',
              justify=RIGHT,
              wraplength=90).grid(row=0, column=4, sticky=E, pady=5)
        Label(self.frames[0], text='Дата').grid(row=1,
                                                column=0,
                                                sticky=E,
                                                pady=5)
        Label(self.frames[0], text='Время').grid(row=1,
                                                 column=2,
                                                 sticky=E,
                                                 pady=5)
        Label(self.frames[0],
              text='Место проведения',
              justify=RIGHT,
              wraplength=90).grid(row=1, column=4, sticky=E, pady=5)
        Label(self.frames[0],
              text='Количество персон',
              justify=RIGHT,
              wraplength=90).grid(row=1, column=6, sticky=E, pady=5)

        self.entries['client'] = Entry(self.frames[0])
        self.entries['manager'] = Entry(self.frames[0])
        self.entries['type'] = Entry(self.frames[0], width=10)
        self.entries['date'] = Entry(self.frames[0])
        self.entries['time'] = Entry(self.frames[0])
        self.entries['location'] = Entry(self.frames[0], width=10)
        self.entries['persons'] = Entry(self.frames[0], width=10)

        self.entries['client'].focus_set()
        today = date.today().isoformat().split('-')[::-1]
        self.entries['date'].insert(0, '.'.join(today))

        self.entries['client'].grid(row=0,
                                    column=1,
                                    sticky=E + W,
                                    padx=(3, 13),
                                    pady=5)
        self.entries['manager'].grid(row=0,
                                     column=3,
                                     sticky=E + W,
                                     padx=(3, 13),
                                     pady=5)
        self.entries['type'].grid(row=0,
                                  column=5,
                                  columnspan=3,
                                  sticky=E + W,
                                  padx=(3, 13),
                                  pady=5)
        self.entries['date'].grid(row=1,
                                  column=1,
                                  sticky=E + W,
                                  padx=(3, 13),
                                  pady=5)
        self.entries['time'].grid(row=1,
                                  column=3,
                                  sticky=E + W,
                                  padx=(3, 13),
                                  pady=5)
        self.entries['location'].grid(row=1,
                                      column=5,
                                      sticky=E + W,
                                      padx=(3, 13),
                                      pady=5)
        self.entries['persons'].grid(row=1,
                                     column=7,
                                     sticky=E + W,
                                     padx=(3, 13),
                                     pady=5)

        # Add a separator between [about] and [new order] frames
        sep1 = Frame(self.frames[1], height=2, borderwidth=1, relief='sunken')
        sep1.pack(fill=X, padx=1, pady=10)

        # New Order frame widgets.
        Label(self.frames[2], text='Название', anchor=E).grid(row=0,
                                                              column=0,
                                                              sticky=E)
        Label(self.frames[2], text='Комментарий', anchor=E).grid(row=1,
                                                                 column=0,
                                                                 sticky=E)
        Label(self.frames[2], text='Количество', anchor=E).grid(row=2,
                                                                column=0,
                                                                sticky=E)
        self.sum_lbl = Label(self.frames[2],
                             text='Текущая сумма заказа:\n 0 грн',
                             anchor=E,
                             justify=RIGHT)

        self.entries['name'] = AutocompleteEntry(self.frames[2])
        self.entries['comment'] = Entry(self.frames[2])
        self.entries['amount'] = Entry(self.frames[2])
        addOrder_btn = Button(self.frames[2], text='Добавить блюдо в отчет')

        self.entries['name'].set_completion_list(self.dishes_names)
        self.entries['amount'].insert(0, '1')
        addOrder_btn['command'] = lambda: self.addDish()

        self.entries['name'].grid(row=0,
                                  column=1,
                                  columnspan=5,
                                  sticky=W + E,
                                  pady=3,
                                  padx=(3, 15))
        self.entries['comment'].grid(row=1,
                                     column=1,
                                     columnspan=5,
                                     sticky=W + E,
                                     pady=3,
                                     padx=(3, 15))
        self.entries['amount'].grid(row=2,
                                    column=1,
                                    columnspan=2,
                                    sticky=W + E,
                                    pady=3,
                                    padx=(3, 15))
        addOrder_btn.grid(row=3, column=1, sticky=W, pady=3, padx=3)
        self.sum_lbl.grid(row=4, column=5, pady=0, padx=(190, 0))

        customEntry_btn = Button(self.frames[2],
                                 text='Добавить собственную строку в отчет')
        customEntry_btn['command'] = lambda: self.addCustomEntry()
        customEntry_btn.grid(row=4, column=1, sticky=W, pady=3, padx=3)

        # Orders Table frame widgets.
        self.orders_view = Treeview(self.frames[3])
        self.orders_view['columns'] = ('Weight', 'Amount', 'Comment', 'Price',
                                       'Sum')
        self.orders_view.bind('<Delete>',
                              lambda e: self.deleteEntry(e, self.orders_view))

        self.orders_view.heading('#0', text='Название')
        self.orders_view.column('#0', anchor='w', minwidth=307, width=307)
        self.orders_view.heading('Weight', text='Выход')
        self.orders_view.column('Weight',
                                anchor=CENTER,
                                minwidth=100,
                                width=100,
                                stretch=NO)
        self.orders_view.heading('Amount', text='Количество')
        self.orders_view.column('Amount',
                                anchor=CENTER,
                                minwidth=100,
                                width=100,
                                stretch=NO)
        self.orders_view.heading('Comment', text='Комментарий')
        self.orders_view.column('Comment', anchor='w', minwidth=130, width=130)
        self.orders_view.heading('Price', text='Цена, грн')
        self.orders_view.column('Price',
                                anchor=CENTER,
                                minwidth=110,
                                width=110,
                                stretch=NO)
        self.orders_view.heading('Sum', text='Сумма, грн')
        self.orders_view.column('Sum',
                                anchor=CENTER,
                                minwidth=108,
                                width=108,
                                stretch=NO)

        self.orders_view.grid(row=0,
                              column=0,
                              sticky=N + S + E + W,
                              padx=3,
                              pady=3)

        # NOTE: next [for] block is for testing purposes only.
        """
        for dish in self.dishes:
            self.orders_view.insert('', 'end',
                text=dish,
                values=[
                    self.dishes[dish]['weight'],
                    5,  # [amount] column
                    'wats up?',  # [comment] column
                    self.dishes[dish]['price'],
                    5 * float(self.dishes[dish]['price'])
                ]
            )
        """

        orders_scrlbar = Scrollbar(self.frames[3],
                                   orient=VERTICAL,
                                   command=self.orders_view.yview)
        self.orders_view['yscrollcommand'] = orders_scrlbar.set
        orders_scrlbar.grid(row=0, column=1, sticky=N + S)

        # Save Report frame widgets.
        saveWeb_btn = Button(self.frames[4], text='Сохранить отчет', width=20)
        trackweight_chkbox = Checkbutton(self.frames[4],
                                         text='Учитывать средний вес',
                                         variable=self.track_weight)

        saveWeb_btn['command'] = lambda: self.saveWeb()

        saveWeb_btn.pack(side='left', anchor=CENTER, padx=5, pady=3)
        trackweight_chkbox.pack(side='left', anchor=CENTER, pady=3, padx=3)
Example #25
0
    def __init__(self, master, event, new=False):
        Toplevel.__init__(self, master)
        self.minsize(410, 402)
        if master.winfo_ismapped():
            self.transient(master)
        self.protocol('WM_DELETE_WINDOW', self.cancel)

        self._only_nb = self.register(only_nb)

        self.event = event
        if new:
            self.title(_('New Event'))
        else:
            self.title(_('Edit Event'))
        self._new = new
        self._task = BooleanVar(self, bool(event['Task']))
        self._whole_day = BooleanVar(self, event['WholeDay'])

        # --- style
        style = Style(self)
        active_bg = style.lookup('TEntry', 'selectbackground', ('focus', ))

        self.alarms = []

        notebook = Notebook(self)
        notebook.pack(fill='both', expand=True)
        Button(self, text=_('Ok'), command=self.ok).pack(pady=(10, 6), padx=4)

        # --- event settings
        frame_event = Frame(notebook)
        notebook.add(frame_event, text=_('Event'), sticky='eswn', padding=4)
        frame_event.columnconfigure(1, weight=1)
        frame_event.rowconfigure(5, weight=1)

        self.img_moins = PhotoImage(master=self, file=IM_DEL)
        self.img_bell = PhotoImage(master=self, file=IM_BELL)
        Label(frame_event, text=_('Summary')).grid(row=0,
                                                   column=0,
                                                   padx=4,
                                                   pady=6,
                                                   sticky='e')
        Label(frame_event, text=_('Place')).grid(row=1,
                                                 column=0,
                                                 padx=4,
                                                 pady=6,
                                                 sticky='e')
        Label(frame_event, text=_('Start')).grid(row=2,
                                                 column=0,
                                                 padx=4,
                                                 pady=6,
                                                 sticky='e')
        self._end_label = Label(frame_event, text=_('End'))
        self._end_label.grid(row=3, column=0, padx=4, pady=6, sticky='e')
        frame_task = Frame(frame_event)
        frame_task.grid(row=4, column=1, padx=4, pady=6, sticky='w')
        Label(frame_event, text=_('Description')).grid(row=5,
                                                       column=0,
                                                       padx=4,
                                                       pady=6,
                                                       sticky='e')
        Label(frame_event, text=_('Category')).grid(row=6,
                                                    column=0,
                                                    padx=4,
                                                    pady=6,
                                                    sticky='e')
        Button(frame_event,
               image=self.img_bell,
               command=self.add_reminder,
               padding=0).grid(row=7, column=0, padx=4, pady=6, sticky='en')

        self.summary = Entry(frame_event, width=35)
        self.summary.insert(0, self.event['Summary'])
        self.summary.grid(row=0, column=1, padx=4, pady=6, sticky='ew')
        self.place = Entry(frame_event, width=35)
        self.place.insert(0, self.event['Place'])
        self.place.grid(row=1, column=1, padx=4, pady=6, sticky='ew')
        frame_start = Frame(frame_event)
        frame_start.grid(row=2, column=1, padx=4, pady=6, sticky='w')
        frame_end = Frame(frame_event)
        frame_end.grid(row=3, column=1, padx=4, pady=6, sticky='w')
        txt_frame = Frame(frame_event,
                          style='txt.TFrame',
                          border=1,
                          relief='sunken')
        self.desc = Text(txt_frame,
                         width=35,
                         height=4,
                         highlightthickness=0,
                         relief='flat',
                         selectbackground=active_bg)
        self.desc.insert('1.0', self.event['Description'])
        self.desc.pack(fill='both', expand=True)
        txt_frame.grid(row=5, column=1, padx=4, pady=6, sticky='ewsn')
        cats = list(CONFIG.options('Categories'))
        width = max([len(cat) for cat in cats])
        self.category = Combobox(frame_event,
                                 width=width + 2,
                                 values=cats,
                                 state='readonly')
        self.category.set(event['Category'])
        self.category.grid(row=6, column=1, padx=4, pady=6, sticky='w')
        self.frame_alarms = Frame(frame_event)
        self.frame_alarms.grid(row=7, column=1, sticky='w')

        # --- *--- task
        Checkbutton(frame_task,
                    text=_('Task'),
                    command=self._change_label,
                    variable=self._task).pack(side='left')

        self.task_progress = Combobox(frame_task,
                                      state='readonly',
                                      width=9,
                                      values=(_('Pending'), _('In Progress'),
                                              _('Completed'), _('Cancelled')))
        self.task_progress.pack(side='left', padx=(8, 4))
        self.in_progress = Combobox(
            frame_task,
            state='readonly',
            width=5,
            values=['{}%'.format(i) for i in range(0, 110, 10)])
        self.in_progress.pack(side='left', padx=4)
        if not event['Task']:
            self.task_progress.set(_('Pending'))
            self.in_progress.set('0%')
        elif '%' in event['Task']:
            self.task_progress.set(_('In Progress'))
            self.in_progress.set(event['Task'])
        else:
            self.task_progress.set(_(event['Task']))
            self.in_progress.set('0%')

        # calendar settings
        prop = {
            op: CONFIG.get('Calendar', op)
            for op in CONFIG.options('Calendar')
        }
        prop['font'] = "Liberation\ Sans 9"
        prop.update(selectforeground='white', selectbackground=active_bg)
        locale = CONFIG.get('General', 'locale')

        # --- *--- start date
        self.start_date = self.event['Start']
        self.start_entry = DateEntry(frame_start,
                                     locale=locale,
                                     width=10,
                                     justify='center',
                                     year=self.start_date.year,
                                     month=self.start_date.month,
                                     day=self.start_date.day,
                                     **prop)

        self.start_hour = Combobox(frame_start,
                                   width=3,
                                   justify='center',
                                   state='readonly',
                                   exportselection=False,
                                   values=['%02d' % i for i in range(24)])
        self.start_hour.set('%02d' % self.start_date.hour)
        self.start_min = Combobox(frame_start,
                                  width=3,
                                  justify='center',
                                  state='readonly',
                                  exportselection=False,
                                  values=['%02d' % i for i in range(0, 60, 5)])
        self.start_min.set('%02d' % self.start_date.minute)
        self.start_entry.pack(side='left', padx=(0, 18))
        self.start_hour.pack(side='left', padx=(4, 0))
        self.start_date = self.start_date.date()
        Label(frame_start, text=':').pack(side='left')
        self.start_min.pack(side='left', padx=(0, 4))
        Checkbutton(frame_start,
                    text=_("whole day"),
                    variable=self._whole_day,
                    command=self._toggle_whole_day).pack(side='left', padx=4)

        # --- *--- end date
        self.end_date = self.event['End']
        self.end_entry = DateEntry(frame_end,
                                   justify='center',
                                   locale=locale,
                                   width=10,
                                   year=self.end_date.year,
                                   month=self.end_date.month,
                                   day=self.end_date.day,
                                   **prop)

        self.end_hour = Combobox(frame_end,
                                 width=3,
                                 justify='center',
                                 state='readonly',
                                 exportselection=False,
                                 values=['%02d' % i for i in range(24)])
        self.end_hour.set('%02d' % self.end_date.hour)
        self.end_min = Combobox(frame_end,
                                width=3,
                                justify='center',
                                state='readonly',
                                exportselection=False,
                                values=['%02d' % i for i in range(0, 60, 5)])
        self.end_min.set('%02d' % self.end_date.minute)
        self.end_entry.pack(side='left', padx=(0, 18))

        self.end_hour.pack(side='left', padx=(4, 0))
        Label(frame_end, text=':').pack(side='left')
        self.end_min.pack(side='left', padx=(0, 4))
        self.end_date = self.end_date.date()

        for date in self.event['Reminders'].values():
            self.add_reminder(date)

        self._toggle_whole_day()

        # --- repetition settings
        frame_rep = Frame(notebook)
        notebook.add(frame_rep, text=_('Repetition'), padding=4, sticky='eswn')
        frame_rep.columnconfigure(0, weight=1)
        frame_rep.columnconfigure(1, weight=1)
        frame_rep.rowconfigure(1, weight=1)
        self._repeat = BooleanVar(self, bool(self.event['Repeat']))
        repeat = {
            'Frequency': 'year',
            'Limit': 'always',
            'NbTimes': 1,
            'EndDate': (datetime.now() + timedelta(days=1)).date(),
            'WeekDays': [self.start_date.isocalendar()[2] - 1]
        }
        repeat.update(self.event['Repeat'])

        self._repeat_freq = StringVar(self, repeat['Frequency'])
        Checkbutton(frame_rep,
                    text=_('Repeat event'),
                    variable=self._repeat,
                    command=self._toggle_rep).grid(row=0,
                                                   column=0,
                                                   columnspan=2,
                                                   padx=4,
                                                   pady=6,
                                                   sticky='w')
        # --- *--- Frequency
        frame_freq = LabelFrame(frame_rep, text=_('Frequency'))
        frame_freq.grid(row=1, column=0, sticky='eswn', padx=(0, 3))
        self._lfreq = Label(frame_freq, text=_('Every:'))
        self._lfreq.grid(row=0, column=0, padx=4, pady=2, sticky='e')

        self._freqs = []
        for i, val in enumerate(['Year', 'Month', 'Week']):
            r = Radiobutton(frame_freq,
                            text=_(val),
                            variable=self._repeat_freq,
                            value=val.lower(),
                            command=self._toggle_wd)
            r.grid(row=i, column=1, padx=4, pady=2, sticky='nw')
            self._freqs.append(r)

        frame_days = Frame(frame_freq)
        frame_days.grid(row=2, column=2, padx=4, pady=2, sticky='nw')
        self._week_days = []
        days = get_day_names("wide", locale=locale)
        days = [days[i] for i in range(7)]
        for day in days:
            ch = Checkbutton(frame_days, text=day)
            ch.pack(anchor='w')
            self._week_days.append(ch)

        for d in repeat['WeekDays']:
            self._week_days[int(d)].state(('selected', ))

        # --- *--- Limit
        frame_lim = LabelFrame(frame_rep, text=_('Limit'))
        frame_lim.grid(row=1, column=1, sticky='eswn', padx=(3, 0))
        frame_lim.grid(row=1, column=1, sticky='eswn', padx=(3, 0))
        self._repeat_lim = StringVar(self, repeat['Limit'])

        # always
        r1 = Radiobutton(frame_lim,
                         text=_('Always'),
                         value='always',
                         variable=self._repeat_lim,
                         command=self._toggle_lim)
        r1.grid(row=0, column=0, sticky='w')
        # until
        r2 = Radiobutton(frame_lim,
                         text=_('Until'),
                         value='until',
                         variable=self._repeat_lim,
                         command=self._toggle_lim)
        r2.grid(row=1, column=0, sticky='w')
        until_date = repeat['EndDate']
        self.until_entry = DateEntry(frame_lim,
                                     width=10,
                                     justify='center',
                                     locale=locale,
                                     year=until_date.year,
                                     month=until_date.month,
                                     day=until_date.day,
                                     **prop)

        self.until_entry.grid(row=1,
                              column=1,
                              columnspan=2,
                              sticky='w',
                              padx=(4, 10),
                              pady=2)

        # after
        r3 = Radiobutton(frame_lim,
                         text=_('After'),
                         value='after',
                         variable=self._repeat_lim,
                         command=self._toggle_lim)
        r3.grid(row=2, column=0, sticky='w')
        frame_after = Frame(frame_lim,
                            style='txt.TFrame',
                            relief='sunken',
                            border=1)
        self.s_after = Spinbox(frame_after,
                               from_=0,
                               to=100,
                               width=3,
                               justify='center',
                               relief='flat',
                               highlightthickness=0,
                               validate='key',
                               validatecommand=(self._only_nb, '%P'),
                               disabledbackground='white')
        self.s_after.pack()
        self.s_after.delete(0, 'end')
        self.s_after.insert(0, str(repeat['NbTimes']))
        frame_after.grid(row=2, column=1, padx=4, pady=2, sticky='w')
        self._llim = Label(frame_lim, text=_('times'))
        self._llim.grid(row=2, column=2, padx=0, pady=2, sticky='w')

        self._rb_lim = [r1, r2, r3]

        self._toggle_rep()
        self._change_label()

        # --- bindings
        self.bind('<Configure>')
        self.task_progress.bind('<<ComboboxSelected>>',
                                self._toggle_in_progress)
        self.start_entry.bind('<<DateEntrySelected>>', self._select_start)
        self.end_entry.bind('<<DateEntrySelected>>', self._select_end)
        self.start_hour.bind("<<ComboboxSelected>>", self._select_start_hour)
        self.start_min.bind("<<ComboboxSelected>>", self._select_start_min)
        self.end_min.bind("<<ComboboxSelected>>", self._select_end_time)
        self.end_hour.bind("<<ComboboxSelected>>", self._select_end_time)
        self.bind_class("TCombobox",
                        "<<ComboboxSelected>>",
                        self.__clear_selection,
                        add=True)

        # self.wait_visibility(self)
        # self.grab_set()
        self.summary.focus_set()
Example #26
0
class OptimizeGroup(Group):
    def __init__(self, *args, **kwargs):
        self._app = kwargs.pop('wavesyn_root')   
        self.__topwin = kwargs.pop('topwin')

        super().__init__(*args, **kwargs)
                
        parameter_frame    = Frame(self)
        parameter_frame.pack(side='left', expand='yes', fill='y')
        self.__num = LabeledEntry(parameter_frame)
        set_attributes(self.__num,
            label_text   = 'num',
            entry_text   = '1',
            label_width  = 5,
            entry_width  = 8,
            checker_function   = self._app.gui.value_checker.check_int
        )
        self.__num.entry.bind('<Return>', lambda event: self._on_solve_click())
        self.__num.pack(side='top')

        self.__pci  = LabeledEntry(parameter_frame)
        set_attributes(self.__pci,
            label_text   = 'PCI',
            entry_text   = '100',
            label_width  = 5,
            entry_width  = 8,
            checker_function = self._app.gui.value_checker.check_int
        )
        self.__pci.pack(side='top')
        
        self.__parallel_checker_variable    = IntVar()
        self.__parallel_checker  = Checkbutton(parameter_frame, text="Parallel", variable=self.__parallel_checker_variable, command=self._on_parallel_checker_click)
        self.__parallel_checker.pack()
        
        progfrm = Frame(self)
        progfrm.pack(side='left', expand='yes', fill='y')

        self.__genbtn = Button(progfrm, text='Generate', command=self._on_solve_click)
        self.__genbtn.pack(side='top')  
        Button(progfrm, text='Stop', command=self._on_stop_button_click).pack(side='top')         
        
        self.__progressbar_variable = IntVar()
        self.__finishedwav = IntVar()        
        self.__progressbar = Progressbar(progfrm, orient='horizontal', variable=self.__progressbar_variable, maximum=100)
        self.__progressbar.pack(side='left')
        self.__progressbar.config(length=55)   
        self.__finishedwavbar = Progressbar(progfrm, orient='horizontal', variable=self.__finishedwav)
        self.__finishedwavbar.pack(side='left')
        self.__finishedwavbar.config(length=30)  

        self.name = 'Generate'

        self.getparams = None
        self.__stopflag = False

        
    def _on_solve_click(self):
        params = self.__topwin.parameter_group.get_parameters()
        repeat_times = self.__num.get_int()   
        
        if self.__parallel_checker_variable.get():
            run = self.__topwin.current_algorithm.process_run
        else:
            run = self.__topwin.current_algorithm.thread_run
        with code_printer():
            run(on_finished=['store', 'plot'], progress_indicator='progress_dialog', repeat_times=repeat_times, **params)


    def _on_stop_button_click(self):
        self.__stopflag = True
        
        
    def _on_parallel_checker_click(self):
        topwin = self.__topwin
        if topwin.current_algorithm.need_cuda:
            self.__parallel_checker_variable.set(0)
            topwin.root_node.gui.dialogs.report(f'''{topwin.node_path}:
Current algorithm "{topwin.current_algorithm.meta.name}" need CUDA worker, which does not support multi-cpu parallel.
            ''')
            
            
    def _cancel_parallel(self):
        self.__parallel_checker_variable.set(0)
Example #27
0
    def initUI(self):

        self.master.title("MTTR Automation Tool")
        self.pack(fill=BOTH, expand=False)

        # -------------menu---------------------------#

        # menu = Menu(self.master)
        # self.master.config (menu)
        # filemenu = Menu(menu)
        # menu.add_cascade(label='File', menu=filemenu)
        # filemenu.add_command(label='New')
        # filemenu.add_command(label='Open...')
        # filemenu.add_separator()
        # filemenu.add_command(label='Exit', command=self.quit)
        # helpmenu = Menu(menu)
        # menu.add_cascade(label='Help', menu=helpmenu)
        # helpmenu.add_command(label='About')

        # -------------user name ---------------------------#
        # StringVar() is the variable class
        # we create an instance of this class
        username = StringVar()

        frame1 = Frame(self)
        frame1.pack(fill=X)

        lbl1 = Label(frame1, text="User Name : ", width=30)
        lbl1.pack(side=LEFT, padx=5, pady=5)

        entry1 = Entry(frame1, textvariable=username)
        entry1.pack(fill=X, padx=5, expand=False)
        # -------------Password ---------------------------#

        password = StringVar()

        frame2 = Frame(self)
        frame2.pack(fill=X)

        lbl2 = Label(frame2, text="Password :"******"*")

        # -----------Start Date--------------------------- #

        start_date = StringVar()

        frame17 = Frame(self)
        frame17.pack(fill=X)

        lbl8 = Label(frame17, text="Start Date (ONLY) DD-MMM-YYYY :", width=30)
        lbl8.pack(side=LEFT, padx=5, pady=5)

        entry6 = Entry(frame17, textvariable=start_date)
        entry6.pack(fill=X, padx=5, expand=False)

        # -----------End Date--------------------------- #

        end_date = StringVar()

        frame18 = Frame(self)
        frame18.pack(fill=X)

        lbl9 = Label(frame18, text="End Date (ONLY) DD-MMM-YYYY :", width=30)
        lbl9.pack(side=LEFT, padx=5, pady=5)

        entry7 = Entry(frame18, textvariable=end_date)
        entry7.pack(fill=X, padx=5, expand=False)

        # -------------Status---------------------------#
        frame11 = Frame(self)
        frame11.pack(fill=BOTH, expand=False)

        lbl10 = Label(frame11, text="Status", width=100)
        lbl10.pack(side=LEFT, anchor=N, padx=5, pady=5)

        #
        frame19 = Frame(self)
        # frame1 = tk.Frame(root, width=100, height=100, background="bisque")
        frame19.pack(fill=BOTH, expand=False)

        status = IntVar()
        rdo3 = Radiobutton(frame19, text='Closed', variable=status, value=1)
        rdo3.pack(side=LEFT, anchor=N, padx=5, pady=5)
        status.set(1)
        # chk1.pack(side=BOTTOM)

        rdo4 = Radiobutton(frame19,
                           text='Waiting for 3rd Party',
                           variable=status,
                           value=2)
        rdo4.pack(side=LEFT, anchor=W, padx=5, pady=5)

        # -------------Source File---------------------------#
        source_file = StringVar()

        frame5 = Frame(self)
        frame5.pack(fill=BOTH, expand=False)

        lbl5 = Label(
            frame5,
            text="Source File(.csv)/File to Save (for webscrapping)(.csv)",
            width=30)
        lbl5.pack(side=LEFT, anchor=N, padx=5, pady=5)

        entry5 = Entry(frame5, textvariable=source_file)
        entry5.pack(fill=BOTH, pady=5, padx=5, expand=False)

        # -------------MTTR Template File ---------------------------#
        template_file_path = StringVar()

        frame3 = Frame(self)
        frame3.pack(fill=BOTH, expand=False)

        lbl3 = Label(frame3, text="MTTR Template File(.xlsx)", width=30)
        lbl3.pack(side=LEFT, anchor=N, padx=5, pady=5)

        entry3 = Entry(frame3, textvariable=template_file_path)
        entry3.pack(fill=BOTH, pady=5, padx=5, expand=False)

        # -------------Part Station File---------------------------#
        part_station_file = StringVar()

        frame4 = Frame(self)
        frame4.pack(fill=BOTH, expand=False)

        lbl4 = Label(frame4, text="Part Station File(.xlsx)", width=30)
        lbl4.pack(side=LEFT, anchor=N, padx=5, pady=5)

        entry4 = Entry(frame4, textvariable=part_station_file)
        entry4.pack(fill=BOTH, pady=5, padx=5, expand=False)

        # -------------Save File Directory---------------------------#
        xls_file_with_correction = StringVar()

        frame13 = Frame(self)
        frame13.pack(fill=BOTH, expand=False)

        lbl11 = Label(frame13, text="Excel File Save Path(.xlsx)", width=30)
        lbl11.pack(side=LEFT, anchor=N, padx=5, pady=5)

        entry7 = Entry(frame13, textvariable=xls_file_with_correction)
        entry7.pack(fill=BOTH, pady=5, padx=5, expand=False)

        # -------------Save File Directory---------------------------#
        save_directory = StringVar()

        frame20 = Frame(self)
        frame20.pack(fill=BOTH, expand=False)

        lbl5 = Label(frame20, text="Directory to save", width=30)
        lbl5.pack(side=LEFT, anchor=N, padx=5, pady=5)

        entry6 = Entry(frame20, textvariable=save_directory)
        entry6.pack(fill=BOTH, pady=5, padx=5, expand=False)

        # -------------Operation Selection ---------------------------#
        frame6 = Frame(self)
        frame6.pack(fill=BOTH, expand=False)

        lbl6 = Label(frame6,
                     text="Select the operation that wish to run:",
                     width=100)
        lbl6.pack(side=LEFT, anchor=N, padx=5, pady=5)
        #
        frame7 = Frame(self)
        # frame1 = tk.Frame(root, width=100, height=100, background="bisque")
        frame7.pack(fill=BOTH, expand=False)

        var1 = IntVar()
        chk1 = Checkbutton(frame7,
                           text='Web Scrapping (firefox only)',
                           variable=var1)
        chk1.pack(side=LEFT, anchor=N, padx=5, pady=5)
        # chk1.pack(side=BOTTOM)

        frame8 = Frame(self)
        # frame1 = tk.Frame(root, width=100, height=100, background="bisque")
        frame8.pack(fill=BOTH, expand=False)

        var2 = IntVar()
        rdo4 = Radiobutton(frame8,
                           text='Correction Without Calculating',
                           variable=var2,
                           value=1)
        rdo4.pack(side=LEFT, anchor=N, padx=5, pady=5)
        var2.set(1)

        rdo5 = Radiobutton(
            frame8,
            text='Correction With Calculating and export to txt file',
            variable=var2,
            value=2,
            command="")
        rdo5.pack(side=LEFT, anchor=W, padx=5, pady=5)

        frame9 = Frame(self)
        # frame1 = tk.Frame(root, width=100, height=100, background="bisque")
        frame9.pack(fill=BOTH, expand=False)

        rdo6 = Radiobutton(
            frame9,
            text=
            'Correction With Calculating and export to excel file according to template file format',
            variable=var2,
            value=3,
            command="")
        rdo6.pack(side=BOTTOM, anchor=W, padx=5, pady=5)

        # -------------Web Browser---------------------------#
        frame11 = Frame(self)
        frame11.pack(fill=BOTH, expand=False)

        lbl7 = Label(
            frame11,
            text=
            "Select which web Browser to use :(use for web scrapping only)",
            width=100)
        lbl7.pack(side=LEFT, anchor=N, padx=5, pady=5)

        #
        frame12 = Frame(self)
        # frame1 = tk.Frame(root, width=100, height=100, background="bisque")
        frame12.pack(fill=BOTH, expand=False)

        v = IntVar()
        rdo1 = Radiobutton(frame12, text='Firefox', variable=v, value=1)
        rdo1.pack(side=LEFT, anchor=N, padx=5, pady=5)
        v.set(1)
        # chk1.pack(side=BOTTOM)

        rdo2 = Radiobutton(frame12, text='Chrome', variable=v, value=2)
        rdo2.pack(side=LEFT, anchor=W, padx=5, pady=5)

        rdo3 = Radiobutton(frame12, text='IE', variable=v, value=3)
        rdo3.pack(side=LEFT, anchor=W, padx=5, pady=5)

        # -------------Log Message ---------------------------#
        frame15 = Frame(self)
        frame15.pack(fill=BOTH, expand=False)

        lbl8 = Label(frame15, text="Message Log:", width=100)
        lbl8.pack(side=LEFT, anchor=N, padx=5, pady=5)

        frame16 = Frame(self)
        # frame1 = tk.Frame(root, width=100, height=100, background="bisque")
        frame16.pack(fill=BOTH, expand=False)

        scrollbar = Scrollbar(frame16)
        scrollbar.pack(side=RIGHT, anchor=N, fill=Y, padx=5, pady=5)

        # Example
        self.mylist = Listbox(frame16, yscrollcommand=scrollbar.set)

        # for line in range(200):
        #     mylist.insert(END, "I am EMPTY, PLease don't surprise" )
        self.mylist.pack(side=LEFT, fill=BOTH, expand=True)
        scrollbar.config(command=self.mylist.yview)

        # self.master.title("Buttons")
        # self.style = Style()
        # self.style.theme_use("default")
        #
        frame = Frame(self, relief=RAISED, borderwidth=1)
        frame.pack(fill=BOTH, expand=True)
        #
        self.pack(fill=BOTH, expand=True)
        #
        closeButton = Button(self, text="Close/Quit", command=self.client_exit)
        closeButton.pack(side=RIGHT, padx=5, pady=5)
        self.okButton = Button(
            self,
            text="OK to Run",
            command=lambda: self.
            run(username, password, start_date, end_date, status, source_file,
                template_file_path, part_station_file,
                xls_file_with_correction, save_directory, var1, var2, v))
        self.okButton.pack(side=RIGHT)

        # -------------Progress Bar ---------------------------#

        frame16 = Frame(self)
        frame16.pack(fill=BOTH, expand=False)

        self.pbar = Progressbar(frame16, length=300, mode='indeterminate')
        self.pbar.pack(side=LEFT, anchor=W, padx=5, pady=5)
Example #28
0
    def __init__(self, *args, **kwargs):
        if 'value_checker' in kwargs:
            value_checker = kwargs.pop('value_checker')
            check_nonnegative_float = value_checker.check_nonnegative_float
        else:
            check_nonnegative_float = None

        if 'balloon' in kwargs:
            kwargs.pop('balloon')

        super().__init__(*args, **kwargs)

        self.__gui_images = []

        major = IntVar(0)
        minor = IntVar(0)
        self.__major = major
        self.__minor = minor
        self.__figure_observer = self.FigureObserver(self)

        def askgridprop():
            win = Toplevel()
            color = ['#000000', '#000000']

            propvars = [StringVar() for i in range(4)]
            guidata = ({
                'linestyle': ('Major Line Style', propvars[0], None),
                'linewidth':
                ('Major Line Width', propvars[1], check_nonnegative_float)
            }, {
                'linestyle': ('Minor Line Style', propvars[2], None),
                'linewidth':
                ('Minor Line Width', propvars[3], check_nonnegative_float)
            })

            for d in guidata:
                for key in d:
                    pitem = LabeledEntry(win)
                    pitem.pack()
                    pitem.label_text = d[key][0]
                    pitem.entry['textvariable'] = d[key][1]
                    if d[key][2]:
                        pitem.checker_function = d[key][2]

            def setmajorcolor():
                c = askcolor()
                color[0] = c[1]

            def setminorcolor():
                c = askcolor()
                color[1] = c[1]

            Button(win, text='Major Line Color', command=setmajorcolor).pack()
            Button(win, text='Minor Line Color', command=setminorcolor).pack()

            win.protocol('WM_DELETE_WINDOW', win.quit)
            win.focus_set()
            win.grab_set()
            win.mainloop()
            win.destroy()

            c_major = StringVar()
            c_major.set(color[0])
            c_minor = StringVar()
            c_minor.set(color[1])
            guidata[0]['color'] = ('Major Line Color', c_major, None)
            guidata[1]['color'] = ('Minor Line Color', c_minor, None)
            return guidata

        def on_property_button_click():
            ret = askgridprop()
            props = {'major': {}, 'minor': {}}
            for index, name in enumerate(('major', 'minor')):
                for key in ret[index]:
                    value = ret[index][key][1].get()
                    if value:
                        props[name][key] = value
            major.set(1)
            minor.set(1)
            self.notify_observers(
                Event(kwargs=dict(major_grid=major.get(),
                                  minor_grid=minor.get(),
                                  props=props)))

        with open(Scripting.root_node.get_gui_image_path("GridTab_Major.psd"),
                  "rb") as image_file:
            icon = ImageTk.PhotoImage(
                psd.get_pil_image(image_file, read_channels=4)[0])
        self.__gui_images.append(icon)
        major_grid_checkbutton = Checkbutton(self,
                                             text='Grid Major',
                                             image=icon,
                                             compound='left',
                                             variable=major,
                                             command=self._on_check_click)
        major_grid_checkbutton.pack(fill='x')
        self.major_grid_checkbutton = major_grid_checkbutton

        with open(Scripting.root_node.get_gui_image_path("GridTab_Minor.psd"),
                  "rb") as image_file:
            icon = ImageTk.PhotoImage(
                psd.get_pil_image(image_file, read_channels=4)[0])
        self.__gui_images.append(icon)
        minor_grid_checkbutton = Checkbutton(self,
                                             text='Grid Minor',
                                             image=icon,
                                             compound='left',
                                             variable=minor,
                                             command=self._on_check_click)
        minor_grid_checkbutton.pack(fill='x')
        self.minor_grid_checkbutton = minor_grid_checkbutton

        property_button = Button(self,
                                 text='Property',
                                 command=on_property_button_click)
        property_button.pack()
        self.property_button = property_button

        self.name = 'Grid'
class App(Tk):
    def __init__(self, master=None):
        super().__init__(master)
        self.style = ThemedStyle(self)
        self.style.set_theme('elegance')
        self.iconbitmap(r'data\app.ico')
        self.minsize(450, 300)

        self.title('WoT Battle Counter')
        self.menu_bar = Menu(self)
        self.content = Frame(self)
        self.entry = Entry(self.content)
        self.player_list = Listbox(self.content)
        self.count_button = Button(self)
        self.scrollbar = Scrollbar(self.content)
        self.buttons_frame = Frame(self)
        self.sort_button = Checkbutton(self.buttons_frame)
        self.progressbar = Progressbar(self.buttons_frame)
        self.sort_variable = IntVar(self)
        self.PlayerObjects = []
        self.replays = []
        self.player_names = []
        self.offset = 0
        self.skirmish_value = 1
        self.advance_value = 1
        self.clan_war_value = 3

    def create_app(self):
        # Config menu entries and attach them
        self.menu_bar.add_command(label='Config',
                                  command=self.open_config_window)
        self.menu_bar.add_command(label='Open replay files',
                                  command=self.open_skirmish_files)
        self.menu_bar.add_command(label='Open list', command=self.load_list)
        self.menu_bar.add_command(label='Save list', command=self.save_list)
        self.menu_bar.add_command(label='Export to file',
                                  command=self.export_to_file)
        self.menu_bar.add_command(label='About', command=about)
        self.config(menu=self.menu_bar)

        # Config main content window
        self.content.pack(fill='both', expand=1)

        # Config Text Entry + bind enter key
        self.entry.config(exportselection=0)
        self.entry.pack(fill='x')
        self.entry.bind('<Return>', self.add_player)

        # Config Listbox + bind delete key
        self.player_list.config(yscrollcommand=self.scrollbar.set)
        self.scrollbar.config(command=self.player_list.yview,
                              orient='vertical')
        self.scrollbar.pack(side='right', fill='y')
        self.player_list.pack(side='left', fill='both', expand=1)
        self.player_list.bind('<Delete>', self.remove_player)

        # Count button at the bottom
        self.count_button.config(
            text='Count!', command=Thread(target=self.decode_replays).start)
        self.count_button.pack(side='right', padx=10, pady=10)
        self.count_button.state(['disabled'])

        # Config button frame + button + progressbar
        self.buttons_frame.pack(side='left',
                                fill='both',
                                pady=5,
                                padx=5,
                                expand=1)
        self.sort_button.config(text="Sort the list",
                                variable=self.sort_variable)
        self.sort_button.pack(anchor='nw', pady=3, padx=3)
        self.progressbar.config(length=360,
                                mode='indeterminate',
                                orient=HORIZONTAL,
                                maximum=10)
        self.progressbar.pack(anchor='e', pady=3, padx=3)

        # Config the style
        Style().configure('TEntry', background='white')
        Style().configure('TButton', font=('Roboto', 12))
        Style().configure('OK.TButton', font=('Roboto', 12, 'bold'))

        # Loading configuration
        self.load_config()

        # Start the app
        self.mainloop()

    def add_player(self, event):
        name = self.entry.get()
        self.entry.delete(0, 'end')
        player_obj = Player(name)
        self.PlayerObjects.append(player_obj)
        if self.sort_variable.get() == 1:
            self.PlayerObjects.sort(key=lambda player: player.name.lower())
            self.player_list.delete(0, 'end')
            for player in self.PlayerObjects:
                self.player_list.insert('end',
                                        (self.PlayerObjects.index(player) +
                                         self.offset + 1, player.name))
        else:
            self.player_list.delete(0, 'end')
            for player in self.PlayerObjects:
                self.player_list.insert('end',
                                        (self.PlayerObjects.index(player) +
                                         self.offset + 1, player.name))

    def remove_player(self, event):
        select = self.player_list.curselection()
        name = self.player_list.get(select)
        self.player_list.delete(select)
        for player in self.PlayerObjects:
            if name.split()[1] == player.name:
                self.PlayerObjects.remove(player)

        self.player_list.delete(0, 'end')
        for player in self.PlayerObjects:
            self.player_list.insert('end', (self.PlayerObjects.index(player) +
                                            self.offset + 1, player.name))

    def open_skirmish_files(self):
        directory_path = filedialog.askdirectory()
        if not path.exists(directory_path):
            return
        self.replays = self.list_dir(directory_path)
        self.count_button.state(['!disabled'])

    def save_list(self):
        file_path = filedialog.asksaveasfilename(defaultextension='.json')
        if not path.exists(file_path):
            return
        players = list()
        for player in self.PlayerObjects:
            players.append(player.name)
        if path.isfile(file_path):
            f = open(file_path, 'w')
        else:
            f = open(file_path, 'x')
        f.seek(0)
        f.write(dumps(players))

    def load_list(self):
        file_path = filedialog.askopenfilename(
            filetypes=[('json-file', '*.json'), ('all files', '*.*')])
        if path.isfile(file_path):
            self.player_list.delete(0, 'end')
            f = open(file_path, 'r')
            players = loads(f.read())
            for name in players:
                player_obj = Player(name)
                self.PlayerObjects.append(player_obj)
            for player in self.PlayerObjects:
                self.player_list.insert('end',
                                        (self.PlayerObjects.index(player) +
                                         self.offset + 1, player.name))

    def export_to_file(self):
        file_path = filedialog.asksaveasfilename(defaultextension='.txt')
        if path.isfile(file_path):
            f = open(file_path, 'w')
        elif path.exists(file_path):
            f = open(file_path, 'x')
        else:
            return
        data = str()
        for player in self.PlayerObjects:
            if player.battles >= 100:
                data += f'{player.battles}  {player.name} \n'
            elif player.battles >= 10:
                data += f'{player.battles}   {player.name} \n'
            elif player.battles > 0:
                data += f'{player.battles}    {player.name} \n'
        f.seek(0)
        f.write(data)

    def list_dir(self, path):
        entries = listdir(path)
        re_replay = compile('\.wotreplay')
        re_file = compile('\.')
        replays = []
        # recursive function for searching in subdirectories for .wotreplay files and putting them into a list
        for entry in entries:
            if not search(re_file, entry):
                new_path = path + "/" + entry
                new_replays = self.list_dir(new_path)
                for replay in new_replays:
                    replays.append(replay)
            elif search(re_replay, entry):
                replays.append((path + '/' + entry))
            elif not search(re_replay, entry) and search(re_file, entry):
                continue
        return replays

    def decode_replays(self):
        self.progressbar.start()
        thread_queue = Queue()
        replay_list_1 = [
            self.replays[x] for x in range(0, round(len(self.replays) / 4))
        ]
        replay_list_2 = [
            self.replays[x] for x in range(round(len(self.replays) / 4),
                                           round(len(self.replays) / 4) * 2)
        ]
        replay_list_3 = [
            self.replays[x] for x in range(
                round(len(self.replays) / 4) * 2,
                round(len(self.replays) / 4) * 3)
        ]
        replay_list_4 = [
            self.replays[x] for x in range(
                round(len(self.replays) / 4) * 3, len(self.replays))
        ]

        thread_1 = Thread(target=self.convert_binary_data,
                          args=(replay_list_1, thread_queue))
        thread_2 = Thread(target=self.convert_binary_data,
                          args=(replay_list_2, thread_queue))
        thread_3 = Thread(target=self.convert_binary_data,
                          args=(replay_list_3, thread_queue))
        thread_4 = Thread(target=self.convert_binary_data,
                          args=(replay_list_4, thread_queue))

        threads = (thread_1, thread_2, thread_3, thread_4)

        for thread in threads:
            thread.start()

        sleep(1)
        if self.listen_for_result(threads):
            self.player_names = thread_queue.get()
            for name in thread_queue.get():
                self.player_names.append(name)
            for name in thread_queue.get():
                self.player_names.append(name)
            for name in thread_queue.get():
                self.player_names.append(name)

        # COUNTING TIME!
        for name in self.player_names:
            for player in self.PlayerObjects:
                if name[0] == player.name:
                    player.battles += name[1]

        # Insert names together with battle count back into the list
        self.player_list.delete(0, 'end')
        for player in self.PlayerObjects:
            if player.battles > 0:
                self.player_list.insert(
                    'end', (self.PlayerObjects.index(player) + self.offset + 1,
                            player.name, player.battles))
            else:
                continue
        self.progressbar.stop()

    def listen_for_result(self, threads):
        # Check if all replay results have come in
        alive_threads = 0
        for thread in threads:
            thread.join(0.1)
        for thread in threads:
            if thread.is_alive():
                print("thread not ded")
                alive_threads += 1
        if alive_threads > 0:
            if self.listen_for_result(threads):
                return True
        return True

    def convert_binary_data(self, replays, queue):
        player_names = list()
        for replay in range(len(replays)):
            filename_source = replays[replay]
            f = open(filename_source, 'rb')
            f.seek(8)
            size = f.read(4)
            data_block_size = unpack('I', size)[0]
            f.seek(12)
            my_block = f.read(int(data_block_size))

            # Convert binary data into a json and then into an iterable tuple
            json_replay = loads(my_block)
            players_dict = [(v, k)
                            for (k, v) in dict.items(json_replay['vehicles'])]

            # Extract names and append to a list
            for player_id in players_dict:
                player_name = player_id[0]['name']
                if json_replay['battleType'] == 20:
                    player_names.append((player_name, self.skirmish_value))
                elif json_replay['battleType'] == 13:
                    player_names.append((player_name, self.clan_war_value))
                else:
                    player_names.append((player_name, 1))
        queue.put(player_names)

    def open_config_window(self):
        config_window = Toplevel(self)
        config_window.iconbitmap(r'data\app.ico')
        config_window.minsize(500, 350)

        config_frame = Labelframe(config_window)
        config_frame.config(text="App Configuration",
                            relief='groove',
                            borderwidth=5)
        config_frame.pack(expand=1, fill='both', padx=5, pady=5)

        offset_title = Label(config_frame)
        offset_title.config(text='Numbering offset (Default 0)')
        offset_title.pack(anchor='nw', padx=5, pady=5)

        offset_entry = Entry(config_frame)
        offset_entry.config(
            width=10,
            exportselection=0,
            validate='key',
            validatecommand=(offset_entry.register(validate_config_entry),
                             '%P'))
        offset_entry.pack(anchor='nw', padx=5, pady=5)

        battle_value_frame = Labelframe(config_frame)
        battle_value_frame.config(text='Battle weighting',
                                  relief='groove',
                                  borderwidth=5)
        battle_value_frame.pack(anchor='nw',
                                fill='both',
                                expand=1,
                                padx=5,
                                pady=5)

        descriptor_frame = Frame(battle_value_frame)
        descriptor_frame.pack(side='left', fill='both', expand=1)

        entry_frame = Frame(battle_value_frame)
        entry_frame.pack(side='left', fill='both', expand=1)

        skirmish_title = Label(descriptor_frame)
        skirmish_title.config(text='Skirmish weighting (Default = 1):')
        skirmish_title.pack(anchor='nw', padx=5, pady=7)

        skirmish_entry = Entry(entry_frame)
        skirmish_entry.config(
            width=10,
            exportselection=0,
            validate='key',
            validatecommand=(skirmish_entry.register(validate_config_entry),
                             '%P'))
        skirmish_entry.pack(anchor='nw', padx=5, pady=5)

        advance_title = Label(descriptor_frame)
        advance_title.config(text='Advance weighting (Default = 1):')
        advance_title.pack(anchor='nw', padx=5, pady=10)

        advance_entry = Entry(entry_frame)
        advance_entry.config(
            width=10,
            exportselection=0,
            validate='key',
            validatecommand=(advance_entry.register(validate_config_entry),
                             '%P'))
        advance_entry.pack(anchor='nw', padx=5, pady=5)

        clan_war_title = Label(descriptor_frame)
        clan_war_title.config(text='Clan War weighting (Default = 3):')
        clan_war_title.pack(anchor='nw', padx=5, pady=6)

        clan_war_entry = Entry(entry_frame)
        clan_war_entry.config(
            width=10,
            exportselection=0,
            validate='key',
            validatecommand=(clan_war_entry.register(validate_config_entry),
                             '%P'))
        clan_war_entry.pack(anchor='nw', padx=5, pady=5)

        buttons_frame = Frame(config_frame)
        buttons_frame.pack(anchor='sw', fill='both', expand=0)

        apply_button = Button(buttons_frame)
        apply_button.config(text='Apply',
                            command=partial(self.config_apply, offset_entry,
                                            skirmish_entry, advance_entry,
                                            clan_war_entry))
        apply_button.pack(side='right', padx=5, pady=5)

        cancel_button = Button(buttons_frame)
        cancel_button.config(text='Cancel',
                             command=lambda: config_window.destroy())
        cancel_button.pack(side='right', padx=5, pady=5)

        ok_button = Button(buttons_frame)
        ok_button.config(text='OK',
                         style='OK.TButton',
                         command=partial(self.config_ok, offset_entry,
                                         skirmish_entry, advance_entry,
                                         clan_war_entry, config_window))
        ok_button.pack(side='right', padx=5, pady=5)

        offset_entry.insert('end', self.offset)
        skirmish_entry.insert('end', self.skirmish_value)
        advance_entry.insert('end', self.advance_value)
        clan_war_entry.insert('end', self.clan_war_value)

    def config_ok(self, offset, skirmish, advance, clan_war, window):
        self.offset = int(offset.get())
        self.skirmish_value = int(skirmish.get())
        self.advance_value = int(advance.get())
        self.clan_war_value = int(clan_war.get())
        data = {
            'offset': offset.get(),
            'skirmish_value': skirmish.get(),
            'advance_value': advance.get(),
            'clan_war_value': clan_war.get()
        }
        if path.isfile(r'config.json'):
            f = open(r'config.json', 'w')
        else:
            f = open(r'config.json', 'x')
        f.seek(0)
        f.write(dumps(data))
        window.destroy()

    def config_apply(self, offset, skirmish, advance, clan_war):
        self.offset = int(offset.get())
        self.skirmish_value = int(skirmish.get())
        self.advance_value = int(advance.get())
        self.clan_war_value = int(clan_war.get())
        data = {
            'offset': offset.get(),
            'skirmish_value': skirmish.get(),
            'advance_value': advance.get(),
            'clan_war_value': clan_war.get()
        }
        if path.isfile(r'config.json'):
            f = open(r'config.json', 'w')
        else:
            f = open(r'config.json', 'x')
        f.seek(0)
        f.write(dumps(data))

    def load_config(self):
        if path.isfile(r'config.json'):
            f = open(r'config.json', 'r')
            data = loads(f.read())
            print(data)
            self.offset = int(data['offset'])
            self.skirmish_value = int(data['skirmish_value'])
            self.advance_value = int(data['advance_value'])
            self.clan_war_value = int(data['clan_war_value'])
        else:
            pass
Example #30
0
def unt_1():
    newwin = Toplevel(tk)
    newwin.title('New Window')
    newwin.geometry("400x300")
    newwin.resizable(0, 0)

    display = Label(
        newwin,
        text="UBT also has 140 points:",
    )
    display.pack()

    chk_state = BooleanVar()
    chk_state.set(True)  # задайте проверку состояния чекбокса
    display1 = Checkbutton(newwin,
                           text='history ----- 15 points',
                           var=chk_state)
    display1.pack()

    chk_state = BooleanVar()
    chk_state.set(True)  # задайте проверку состояния чекбокса
    display2 = Checkbutton(newwin,
                           text='grammar --- 20 points,',
                           var=chk_state)
    display2.pack()

    chk_state = BooleanVar()
    chk_state.set(True)  # задайте проверку состояния чекбокса
    display3 = Checkbutton(newwin,
                           text='mathematics grammar --- 15 points,',
                           var=chk_state)
    display3.pack()

    chk_state = BooleanVar()
    chk_state.set(True)
    display4 = Checkbutton(newwin, text='Predmet 1---40,', var=chk_state)
    display4.pack()

    chk_state = BooleanVar()
    chk_state.set(True)  # задайте проверку состояния чекбокса
    display5 = Checkbutton(
        newwin,
        text='UBT can be taken 4 times. (January, March, May, June,',
        var=chk_state)
    display5.pack()

    chk_state = BooleanVar()
    chk_state.set(True)  # задайте проверку состояния чекбокса
    display6 = Checkbutton(newwin,
                           text='You can win a grant from May to June,',
                           var=chk_state)
    display6.pack()

    chk_state = BooleanVar()
    chk_state.set(True)  # задайте проверку состояния чекбокса
    display7 = Checkbutton(newwin,
                           text='You can choose your own dates,',
                           var=chk_state)
    display7.pack()
class NSE:
    def stop_all(self) -> None:
        self.stop = True

    def main_recursive(self) -> None:
        if (self.first_run):
            #print("FIRST time")
            self.refresh_data()
            self.first_run = False
        self.curr_time = time.time()
        time_passed = int(self.curr_time - self.prev_time)
        if (time_passed > self.interval):
            self.refresh_data()
        else:
            self.sh_window.after((10 * 1000), self.main_recursive)
            return
        if (not self.stop):
            self.sh_window.after((10 * 1000), self.main_recursive)
            return

    def __init__(self, window: Tk) -> None:
        self.first_run_live_price: List[float] = []
        self.plot_only: bool = True
        self.graph_index, = plt.plot([], [], 'o-', label='BANKNIFTY')
        self.first_run: bool = True
        self.dict_dfs_INDEX: dict[pd.DataFrame] = {}
        self.dict_dfs_STOCK: dict[pd.DataFrame] = {}
        self.nb_names: List[String] = [
            'PCR OTM', 'DIFF OTM', 'PCR FAR OTM', 'CE-OTM', 'PE-OTM',
            'CE-FAR_OTM', 'PE-FAR_OTM', 'LTP', 'PCR'
        ]
        for i in self.nb_names:
            self.dict_dfs_INDEX[i] = pd.DataFrame()
            self.dict_dfs_STOCK[i] = pd.DataFrame()
        self.stop: bool = False
        self.curr_time = ""
        self.interval = 5  #seconds
        self.red: str = "#e53935"
        self.green: str = "#00e676"
        self.df_INDEX: pd.DataFrame = pd.DataFrame()
        self.df_STOCK: pd.DataFrame = pd.DataFrame()
        self.popular_stocks: List[str] = ['AUROPHARMA','TATASTEEL','ASHOKLEY','AXISBANK', 'BAJAJ-AUTO', 'BAJAJFINSV',\
                                          'BRITANNIA','DRREDDY','GLENMARK','HDFC', 'HDFCBANK',\
                                          'ICICIBANK','INDUSINDBK','INFY','MANAPPURAM','MARUTI',\
                                          'MUTHOOTFIN','RELIANCE','SBILIFE', 'SBIN','TATAMOTORS',\
                                          'TCS','WIPRO','ZEEL']
        self.hdr: Dict[str, str] = {
            'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 \
                                (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36',
            'accept-language': 'en-US,en;q=0.9'
        }
        self.stock_symbs: List[str] = [
            'AARTIIND', 'ACC', 'ADANIENT', 'ADANIPORTS', 'AMARAJABAT',
            'AMBUJACEM', 'APOLLOHOSP', 'APOLLOTYRE', 'ASHOKLEY', 'ASIANPAINT',
            'AUROPHARMA', 'AXISBANK', 'BAJAJ-AUTO', 'BAJAJFINSV', 'BAJFINANCE',
            'BALKRISIND', 'BANDHANBNK', 'BANKBARODA', 'BATAINDIA', 'BEL',
            'BERGEPAINT', 'BHARATFORG', 'BHARTIARTL', 'BHEL', 'BIOCON',
            'BOSCHLTD', 'BPCL', 'BRITANNIA', 'CADILAHC', 'CANBK', 'CHOLAFIN',
            'CIPLA', 'COALINDIA', 'COFORGE', 'COLPAL', 'CONCOR', 'CUMMINSIND',
            'DABUR', 'DIVISLAB', 'DLF', 'DRREDDY', 'EICHERMOT', 'ESCORTS',
            'EXIDEIND', 'FEDERALBNK', 'GAIL', 'GLENMARK', 'GMRINFRA',
            'GODREJCP', 'GODREJPROP', 'GRASIM', 'HAVELLS', 'HCLTECH', 'HDFC',
            'HDFCAMC', 'HDFCBANK', 'HDFCLIFE', 'HEROMOTOCO', 'HINDALCO',
            'HINDPETRO', 'HINDUNILVR', 'IBULHSGFIN', 'ICICIBANK', 'ICICIGI',
            'ICICIPRULI', 'IDEA', 'IDFCFIRSTB', 'IGL', 'INDIGO', 'INDUSINDBK',
            'INDUSTOWER', 'INFY', 'IOC', 'ITC', 'JINDALSTEL', 'JSWSTEEL',
            'JUBLFOOD', 'KOTAKBANK', 'LALPATHLAB', 'LICHSGFIN', 'LT', 'LUPIN',
            'MANAPPURAM', 'MARICO', 'MARUTI', 'MCDOWELL-N', 'MFSL', 'MGL',
            'MINDTREE', 'MOTHERSUMI', 'MRF', 'MUTHOOTFIN', 'NATIONALUM',
            'NAUKRI', 'NESTLEIND', 'NMDC', 'NTPC', 'ONGC', 'PAGEIND', 'PEL',
            'PETRONET', 'PFC', 'PIDILITIND', 'PNB', 'POWERGRID', 'PVR',
            'RAMCOCEM', 'RBLBANK', 'RECLTD', 'RELIANCE', 'SAIL', 'SBILIFE',
            'SBIN', 'SHREECEM', 'SIEMENS', 'SRF', 'SRTRANSFIN', 'SUNPHARMA',
            'SUNTV', 'TATACHEM', 'TATACONSUM', 'TATAMOTORS', 'TATAPOWER',
            'TATASTEEL', 'TCS', 'TECHM', 'TITAN', 'TORNTPHARM', 'TORNTPOWER',
            'TVSMOTOR', 'UBL', 'ULTRACEMCO', 'UPL', 'VEDL', 'VOLTAS', 'WIPRO'
        ]
        #self.stock_symbs: List[str] = ['INFY','UPL', 'VEDL', 'VOLTAS', 'WIPRO', 'ZEEL']
        #self.stock_symbs: List[str] = ['INFY','UPL']
        self.stock_symbs = self.popular_stocks
        self.indices: List[str] = ['NIFTY', 'BANKNIFTY']
        #self.indices: List[str] = ['BANKNIFTY']
        self.SYMBS: List[String] = self.indices
        self.stock_symb: String = ""
        self.session: requests.Session = requests.Session()
        self.make_intial_nse_connection()
        self.expiry_date: String = ""
        self.setup_main_window(window)
        self.resposne: requests.Response = requests.Response()

    def make_intial_nse_connection(self) -> None:
        self.session.close()
        self.session = requests.Session()
        url_oc = 'https://www.nseindia.com/option-chain'
        try:
            self.response = self.session.get(url_oc,
                                             headers=self.hdr,
                                             timeout=5)
        except:
            self.sh_window.after((10 * 1000), self.make_intial_nse_connection)
            return
        self.cookies = self.response.cookies
        if (self.stock_symb != ""):
            try:
                self.response = self.session.get(url,
                                                 headers=self.hdr,
                                                 timeout=5,
                                                 cookies=self.cookies)
            except:
                #self.make_intial_nse_connection()
                self.sh_window.after((10 * 1000),
                                     self.make_intial_nse_connection)
                return

    def refresh_data(self) -> None:
        self.col_time = datetime.now().strftime("%H:%M:%S")
        self.prev_time = time.time()

        if (self.sh_frame):
            self.sh_frame.destroy()
        self.sh_frame: Frame = Frame(self.sh_window, height=2)
        self.sh_frame.rowconfigure(0, weight=1)
        self.sh_frame.columnconfigure(0, weight=1)
        self.sh_frame.pack(anchor=N, fill="x", expand=False)

        if (self.stock_frame):
            self.stock_frame.destroy()
        self.stock_frame: Frame = Frame(self.sh_window)
        self.stock_frame.rowconfigure(3, weight=1)
        self.stock_frame.columnconfigure(0, weight=1)
        self.stock_frame.pack(anchor=N, fill="both", expand=True)

        if (self.check_index_var.get()):
            self.SYMBS = self.indices
            self.index_call = True

            if (self.plot_only):
                self.get_data_plot_only()
            else:
                self.set_sheet(self.sh_frame)
                self.sheet_formatting()
            self.draw_plots()

        if (self.check_stocks_var.get()):
            self.SYMBS = self.stock_symbs
            #selected_symbs = []
            #for i in range(len(self.stock_check_var)):
            #    if(self.stock_check_var[i].get()):
            #        selected_symbs.append(self.stock_check[i].text)
            ##self.SYMBS.extend(selected_symbs)
            self.index_call = False
            self.set_sheet(self.stock_frame)
            self.sheet_formatting()

    def get_data_plot_only(self):
        self.NB_DF: List[pd.Dataframe] = []
        df, dict_dfs = self.append_df_with_OC()
        for key in dict_dfs.keys():
            self.NB_DF.append(pd.concat([df, dict_dfs[key]], axis=1))

    def set_sheet(self, my_frame: Frame) -> None:
        self.NB: Notebook = Notebook(my_frame)
        self.NB.pack(anchor=N, fill="both", expand=True)
        self.NBF: List[Frame] = []
        self.NBS: List[tksheet.Sheet] = []
        self.NB_DF: List[pd.Dataframe] = []

        df, dict_dfs = self.append_df_with_OC()
        for key in dict_dfs.keys():
            self.NBF.append(Frame(self.NB))
            self.NB_DF.append(pd.concat([df, dict_dfs[key]], axis=1))
            self.NB.add(self.NBF[-1], text=key)
            sh = tksheet.Sheet(self.NBF[-1],
                               column_width=80,
                               align="center",
                               headers=list(self.NB_DF[-1].columns),
                               header_font=("TkDefaultFont", 10, "bold"),
                               empty_horizontal=0,
                               empty_vertical=20,
                               header_height=35)
            sh.enable_bindings(
                ("toggle_select", "drag_select", "column_select", "row_select",
                 "column_width_resize", "arrowkeys", "right_click_popup_menu",
                 "rc_select", "copy", "select_all"))
            sh.pack(anchor=W, fill="both", expand=True)
            self.NBS.append(sh)

    def set_expiry_date(self, event) -> None:
        self.expiry_date = self.date_combo_box.get()

    def set_ref_intvl(self, event) -> None:
        self.interval = float(self.ref_intvl_cbox.get())

    def sheet_formatting(self) -> None:
        num_std_cols = 3  #Symb & ATM
        for i in range(len(self.NBS)):
            curr_sh = self.NBS[i]
            num_cols = len(self.NB_DF[i].columns)
            for col in enumerate(self.NB_DF[i].columns):
                curr_sh.set_column_data(col[0], values=self.NB_DF[i][col[1]])
            if (not self.first_run):
                for i in range(curr_sh.get_total_rows()):
                    for j in range(num_std_cols, num_cols - 2, 1):
                        diff = float(curr_sh.get_cell_data(i, j)) - float(
                            curr_sh.get_cell_data(i, j + 1))
                        perc_change = 1.
                        if (float(curr_sh.get_cell_data(i, j - 1)) > 0.0):
                            perc_change = diff * 100 / float(
                                curr_sh.get_cell_data(i, j - 1))
                        if (diff < 0.):
                            curr_sh.highlight_cells(row=i,
                                                    column=j,
                                                    bg=self.red,
                                                    fg='white')
                        elif diff == 0.0:
                            curr_sh.highlight_cells(row=i,
                                                    column=j,
                                                    bg='white',
                                                    fg='black')
                        else:
                            curr_sh.highlight_cells(row=i,
                                                    column=j,
                                                    bg='blue',
                                                    fg='white')
                        if perc_change > 40.:
                            curr_sh.highlight_cells(row=i,
                                                    column=j,
                                                    bg='green',
                                                    fg='white')
            curr_sh.set_currently_selected(0, num_cols - 1)
            curr_sh.refresh()

    def setup_main_window(self, window) -> None:
        self.sh_window: Tk = window
        self.sh_window.title('Option chain analyzer')
        window_width: int = self.sh_window.winfo_reqwidth()
        window_height: int = self.sh_window.winfo_reqheight()
        position_right: int = int(self.sh_window.winfo_screenwidth() / 2 -
                                  window_width / 2)
        position_down: int = int(self.sh_window.winfo_screenheight() / 2 -
                                 window_height / 2)
        #self.sh_window.geometry("1200x600+{}+{}".format(position_right, position_down))
        self.sh_window.geometry("1200x600+300+200")
        #self.sh_window.geometry("+{}+{}".format(position_right, position_down))

        self.sh_frame: Frame = Frame(self.sh_window)
        self.stock_frame: Frame = Frame(self.sh_window)

        top_frame: Frame = Frame(self.sh_window)
        top_frame.rowconfigure(0, weight=1)
        top_frame.columnconfigure(0, weight=1)
        top_frame.pack(anchor=S, expand=False, side=TOP)

        row_idx: int = 0

        self.index_call = True
        self.get_expiry_dates()
        date_var: StringVar = StringVar()
        date_var.set(" ")
        lbl_exp_date: Label = Label(top_frame,
                                    text='Index Expiry',
                                    justify=LEFT,
                                    font=("TkDefaultFont", 10, "bold"))
        #lbl_exp_date.grid(row=row_idx,column=0,sticky=N+S+W)
        lbl_exp_date.pack(anchor=N, expand=False, side=LEFT)
        self.date_combo_box = Combobox(top_frame,
                                       width=10,
                                       textvariable=date_var)
        self.date_combo_box.pack(anchor=N, expand=False, side=LEFT)
        #self.date_combo_box.grid(row=row_idx, column=1, sticky=N + S + E + W)
        self.date_combo_box.bind('<<ComboboxSelected>>', self.set_expiry_date)
        self.date_combo_box['values'] = tuple(self.expiry_dates)
        self.date_combo_box.set(self.expiry_dates[0])
        self.date_combo_box.configure(state='readonly')
        row_idx += 1

        self.index_call = False
        self.get_expiry_dates()
        date_var_stock: StringVar = StringVar()
        date_var_stock.set(" ")
        lbl_exp_date_stock: Label = Label(top_frame,
                                          text='Stock Expiry',
                                          justify=LEFT,
                                          font=("TkDefaultFont", 10, "bold"))
        #lbl_exp_date_stock.grid(row=row_idx,column=0,sticky=N+S+W)
        lbl_exp_date_stock.pack(anchor=N, expand=False, side=LEFT)
        self.date_combo_box_stock = Combobox(top_frame,
                                             width=10,
                                             textvariable=date_var_stock)
        self.date_combo_box_stock.pack(anchor=N, expand=False, side=LEFT)
        #self.date_combo_box_stock.grid(row=row_idx, column=1, sticky=N + S + E + W)
        self.date_combo_box_stock.bind('<<ComboboxSelected>>',
                                       self.set_expiry_date)
        self.date_combo_box_stock['values'] = tuple(self.expiry_dates)
        self.date_combo_box_stock.set(self.expiry_dates[0])
        self.date_combo_box_stock.configure(state='readonly')
        row_idx += 1

        self.check_stocks_var = IntVar()
        self.check_stocks = Checkbutton(top_frame, text = "Stocks", variable = self.check_stocks_var, \
                                    onvalue = 1, offvalue = 0, width = 10)
        #self.check_stocks.grid(row=row_idx, column=1, sticky=N + S + E + W)
        self.check_stocks.pack(anchor=N, expand=False, side=LEFT)
        self.check_stocks_var.set(0)
        row_idx += 1

        self.check_index_var = IntVar()
        self.check_index = Checkbutton(top_frame, text = "Index", variable = self.check_index_var, \
                                    onvalue = 1, offvalue = 0, width = 10)
        #self.check_index.grid(row=row_idx, column=1, sticky=N + S + E + W)
        self.check_index.pack(anchor=N, expand=False, side=LEFT)
        self.check_index_var.set(1)
        row_idx += 1

        ref_intvl: Stringvar = StringVar()
        ref_intvl.set(" ")
        lbl_refresh_interval: Label = Label(top_frame,
                                            text='Interval (min)',
                                            justify=LEFT,
                                            font=("TkDefaultFont", 10, "bold"))
        #lbl_refresh_interval.grid(row=row_idx,column=0,sticky=N+S+W)
        lbl_refresh_interval.pack(anchor=N, expand=False, side=LEFT)
        self.ref_intvl_cbox: Combobox = Combobox(top_frame,
                                                 width=10,
                                                 textvariable=ref_intvl)
        #self.ref_intvl_cbox.grid(row=row_idx, column=1, sticky=N + S + E + W)
        self.ref_intvl_cbox.pack(anchor=N, expand=False, side=LEFT)
        self.ref_intvl_cbox.bind('<<ComboboxSelected>>', self.set_ref_intvl)
        self.ref_intvl_cbox['values'] = tuple(range(10, 600, 20))
        self.ref_intvl_cbox.configure(state='readonly')
        row_idx += 1

        self.start_button: Button = Button(top_frame,
                                           text='START',
                                           command=self.main_recursive,
                                           width=10)
        #self.start_button.grid(row=row_idx, column=1, sticky=N + S + E + W)
        self.start_button.pack(anchor=N, expand=True, side=TOP)
        row_idx += 1

        canvas = tk.Canvas(self.sh_window)
        scroll_y = tk.Scrollbar(self.sh_window,
                                orient="vertical",
                                command=canvas.yview)

        bot_frame: Frame = Frame(canvas)
        #bot_frame = ScrollFrame(bot_frame)
        #bot_frame.rowconfigure(0, weight=1)
        #bot_frame.columnconfigure(0, weight=1)
        #bot_frame.grid(row=row_idx,column=0,sticky=N+S+W)
        #bot_frame = ScrollableFrame(self.sh_window)
        #bot_frame = ScrollFrame(self.sh_window)
        #bot_frame.rowconfigure(1, weight=1)
        #bot_frame.columnconfigure(0, weight=1)
        #bot_frame.pack(anchor=N, expand=False, side=LEFT)

        #bot_frame: Listbox = Listbox(self.sh_window)
        #bot_frame.pack(side=LEFT,fill='both')
        #vscrollbar = Scrollbar(self.sh_window)
        #vscrollbar.pack(side = LEFT, fill = 'both')
        #for i in range(10000):
        #    bot_frame.insert(END,i)

        self.stock_check_var: List[IntVar] = []
        self.stock_check: List[Checkbutton] = []
        int_col = 0
        tmp_row_idx = row_idx
        for stk in enumerate(self.stock_symbs):
            #if(int(stk[0])>30 and int_col==0):
            #    int_col = 1
            #    row_idx = tmp_row_idx
            self.stock_check_var.append(IntVar())
            cb = Checkbutton(bot_frame, text = stk[1], variable = self.stock_check_var[-1], \
                                    onvalue = 1, offvalue = 0, width =12)
            cb.pack()
            if (stk[1] in self.popular_stocks):
                self.stock_check_var[-1].set(1)
            else:
                self.stock_check_var[-1].set(0)
            self.stock_check.append(cb)
            row_idx += 1
        canvas.create_window(0, 0, anchor='nw', window=bot_frame)
        canvas.update_idletasks()
        canvas.configure(scrollregion=canvas.bbox('all'),
                         yscrollcommand=scroll_y.set)

        canvas.pack(fill='y', expand=False, side=LEFT)
        scroll_y.pack(fill='y', side=LEFT, expand=False)

        self.sh_window.mainloop()

    def get_stock_symbols(self) -> None:
        url = 'https://www.nseindia.com/api/master-quote'
        url_oc = 'https://www.nseindia.com/'
        response = self.session.get(url_oc, headers=self.hdr, timeout=5)
        ck = response.cookies
        response = self.session.get(url,
                                    headers=self.hdr,
                                    timeout=5,
                                    cookies=ck)
        json_data = response.json()
        self.stock_symbs = list(json_data)

    def get_option_chain_data(self) -> None:
        if self.index_call:
            self.url = 'https://www.nseindia.com/api/option-chain-indices?symbol=' + self.stock_symb
        else:
            self.url = 'https://www.nseindia.com/api/option-chain-equities?symbol=' + self.stock_symb
        try:
            self.response = self.session.get(self.url,
                                             headers=self.hdr,
                                             timeout=5,
                                             cookies=self.cookies)
            if self.response.status_code == 401:
                self.session.close()
                self.session = requests.Session()
                request = self.session.get(self.url_oc,
                                           headers=self.hdr,
                                           timeout=5)
                self.cookies = dict(request.cookies)
                self.response = self.session.get(self.url,
                                                 headers=self.hdr,
                                                 timeout=5,
                                                 cookies=self.cookies)
                print("reset cookies")
        except Exception as err:
            print(self.response)
            print(err, "5")
            #self.make_intial_nse_connection()
            self.sh_window.after((10 * 1000), self.main_recursive)
            return
            #try:
            #    self.session.close()
            #    self.session = requests.Session()
            #    request = self.session.get(self.url_oc, headers=self.hdr, timeout=5)
            #    self.cookies = dict(request.cookies)
            #    self.response = self.session.get(self.url,headers=self.hdr,timeout=5,cookies=self.cookies)
            #    print("reset cookies")
            #except Exception as err:
            #    print(request)
            #    print(response)
            #    print(err, "5")
            #    return

    def get_expiry_dates(self) -> Tuple:
        if self.index_call:
            self.stock_symb = 'NIFTY'
        else:
            self.stock_symb = 'INFY'
        self.get_option_chain_data()
        json_data = self.response.json()
        self.expiry_dates: List = []
        self.expiry_dates = json_data['records']['expiryDates']

    def draw_plots(self):
        symbb = "BANKNIFTY"
        self.plot_keys = ['PCR OTM', 'LTP']
        mrk_type = ['-ro', '--gs']
        #self.plot_keys = ['PCR OTM']
        idx: Int = -1
        plt.clf()
        maxx = 0.0
        minn = 10000.0
        for key in enumerate(self.plot_keys):
            idx = -1
            try:
                idx = self.nb_names.index(key[1])
            except:
                pass
            if (idx != -1):
                xx = self.NB_DF[idx].loc[self.NB_DF[idx]['SYMB'] == symbb]
                y_data = (xx[xx.columns[3:]].values)
                y_dat = (y_data[0].tolist())
                y_dat.reverse()
                x_data = range(len(y_dat))
                if (minn > min(y_dat)):
                    minn = min(y_dat)
                if (maxx < max(y_dat)):
                    maxx = max(y_dat)
                if self.index_call:
                    #self.graph_index.set_ydata(y_dat)
                    #self.graph_index.set_xdata(x_data)
                    plt.plot(x_data,
                             y_dat,
                             mrk_type[key[0]],
                             label=key[1],
                             markersize=1)
                    plt.legend()
                    plt.xlim([0, 1.1 * len(y_dat)])
        plt.ylim([.9 * minn, 1.1 * maxx])
        plt.pause(.0001)
        plt.show(block=False)
        strr = datetime.today().strftime('%Y-%m-%d')
        plt.title(symbb + "--->" + strr)
        plt.savefig(strr + '.pdf', dpi=300)

    def append_df_with_OC(self):
        self.diff_otm: List = []
        self.atms: List = []
        self.pcr: List = []
        self.pcr_otm: List = []
        self.pcr_far_otm: List = []
        self.live_prices: List[float] = []
        self.DIFF_otm: List[float] = []
        self.call_sum_otm: List[float] = []
        self.put_sum_otm: List[float] = []
        self.call_sum_far_otm: List[float] = []
        self.put_sum_far_otm: List[float] = []
        for stk in enumerate(self.SYMBS):
            self.stock_symb = stk[1]
            self.get_option_chain_data()
            if self.response is not None:
                try:
                    json_data = self.response.json()
                except:
                    json_data = {}
                    return
            #print(stk)
            #quote = nse.get_quote(stk)
            #print(quote['data'][0]['lastPrice'])
            #print(json_data['records']['data'])
            #try:
            #    self.live_prices.append(float(quote['data'][0]['lastPrice'].replace(',','')))
            #except:
            #    self.live_prices.append('null')
            if self.index_call:
                match_date = self.date_combo_box.get()
            else:
                match_date = self.date_combo_box_stock.get()
            my_atm: float = 0.0
            strike_prices: List[float] = [data['strikePrice'] for data in json_data['records']['data'] \
                                       if (str(data['expiryDate']).lower() == str(match_date).lower())]
            ce_values: List[dict] = [data['CE'] for data in json_data['records']['data'] \
                        if "CE" in data and (str(data['expiryDate'].lower()) == str(match_date.lower()))]
            pe_values: List[dict] = [data['PE'] for data in json_data['records']['data'] \
                        if "PE" in data and (str(data['expiryDate'].lower()) == str(match_date.lower()))]

            ce_data: pd.DataFrame = pd.DataFrame(ce_values)
            pe_data: pd.DataFrame = pd.DataFrame(pe_values)

            #print(list(ce_data.columns))
            curr_price = ce_data['underlyingValue'][0]
            if (self.first_run):
                self.first_run_live_price.append(curr_price)
            try:
                diff = [abs(x - curr_price) for x in strike_prices]
                min_pos = diff.index(min(diff))
                my_atm = strike_prices[min_pos]
                self.atms.append(my_atm)
            except:
                self.atms.append('null')

            self.live_prices.append(curr_price /
                                    self.first_run_live_price[stk[0]])
            ce_data_otm: pd.DataFrame = ce_data[min_pos:min_pos + 4]
            pe_data_otm: pd.DataFrame = pe_data[min_pos - 2:min_pos + 2]

            ce_data_far_otm: pd.DataFrame = ce_data[min_pos + 4:min_pos + 8]
            pe_data_far_otm: pd.DataFrame = pe_data[min_pos - 7:min_pos - 3]

            call_sum_otm = ce_data_otm['openInterest'].sum()
            put_sum_otm = pe_data_otm['openInterest'].sum()
            diff_otm = (ce_data_otm['changeinOpenInterest'].sum() -
                        pe_data_otm['changeinOpenInterest'].sum()
                        ) / ce_data_otm['changeinOpenInterest'].sum()

            if (call_sum_otm == 0.):
                call_sum_otm = 0.001
            if (put_sum_otm == 0.):
                put_sum_otm = 0.001

            call_sum_far_otm = ce_data_far_otm['openInterest'].sum()
            put_sum_far_otm = pe_data_far_otm['openInterest'].sum()

            if (call_sum_far_otm == 0.):
                call_sum_far_otm = 0.001
            if (put_sum_far_otm == 0.):
                put_sum_far_otm = 0.001

            diff_far_otm = call_sum_far_otm - put_sum_far_otm

            if (ce_data['openInterest'].sum() != 0):
                pcr_ratio = float(pe_data['openInterest'].sum()) / float(
                    ce_data['openInterest'].sum())
            else:
                pcr_ratio = float(pe_data['openInterest'].sum()) / .001
            self.pcr.append(pcr_ratio)
            self.call_sum_otm.append(call_sum_otm)
            self.put_sum_otm.append(put_sum_otm)
            self.call_sum_far_otm.append(call_sum_far_otm)
            self.put_sum_far_otm.append(put_sum_far_otm)
            self.pcr_otm.append(put_sum_otm / call_sum_otm)
            self.pcr_far_otm.append(put_sum_far_otm / call_sum_far_otm)
            self.diff_otm.append(diff_otm)

        self.live_price_normalized = list(
            map(mul, self.pcr_otm, self.live_prices))
        #self.live_price_normalized = self.live_prices
        if (self.index_call):
            self.df_INDEX['SYMB'] = self.SYMBS
            self.df_INDEX['ATM'] = self.atms
            self.df_INDEX['CONST PRICE'] = self.first_run_live_price
            self.dict_dfs_INDEX['PCR'].insert(0, self.col_time, self.pcr)
            self.dict_dfs_INDEX['PCR'][self.col_time] = self.dict_dfs_INDEX[
                'PCR'][self.col_time].round(3)
            self.dict_dfs_INDEX['CE-OTM'].insert(0, self.col_time,
                                                 self.call_sum_otm)
            self.dict_dfs_INDEX['PE-OTM'].insert(0, self.col_time,
                                                 self.put_sum_otm)
            self.dict_dfs_INDEX['CE-FAR_OTM'].insert(0, self.col_time,
                                                     self.call_sum_far_otm)
            self.dict_dfs_INDEX['PE-FAR_OTM'].insert(0, self.col_time,
                                                     self.put_sum_far_otm)
            self.dict_dfs_INDEX['LTP'].insert(0, self.col_time,
                                              self.live_price_normalized)
            self.dict_dfs_INDEX['LTP'][self.col_time] = self.dict_dfs_INDEX[
                'LTP'][self.col_time].round(3)
            self.dict_dfs_INDEX['PCR OTM'].insert(0, self.col_time,
                                                  self.pcr_otm)
            self.dict_dfs_INDEX['PCR OTM'][
                self.col_time] = self.dict_dfs_INDEX['PCR OTM'][
                    self.col_time].round(3)
            self.dict_dfs_INDEX['PCR FAR OTM'].insert(0, self.col_time,
                                                      self.pcr_far_otm)
            self.dict_dfs_INDEX['PCR FAR OTM'][
                self.col_time] = self.dict_dfs_INDEX['PCR FAR OTM'][
                    self.col_time].round(3)
            self.dict_dfs_INDEX['DIFF OTM'].insert(0, self.col_time,
                                                   self.diff_otm)
            self.dict_dfs_INDEX['DIFF OTM'][
                self.col_time] = self.dict_dfs_INDEX['DIFF OTM'][
                    self.col_time].round(3)
            self.dict_dfs_INDEX['DIFF OTM'][
                self.col_time] = self.dict_dfs_INDEX['DIFF OTM'][
                    self.col_time].round(3)

            return self.df_INDEX, self.dict_dfs_INDEX
        else:
            self.df_STOCK['SYMB'] = self.SYMBS
            self.df_STOCK['ATM'] = self.atms
            self.df_STOCK['CONST PRICE'] = self.first_run_live_price
            self.dict_dfs_STOCK['PCR'].insert(0, self.col_time, self.pcr)
            self.dict_dfs_STOCK['PCR'][self.col_time] = self.dict_dfs_STOCK[
                'PCR'][self.col_time].round(3)
            self.dict_dfs_STOCK['CE-OTM'].insert(0, self.col_time,
                                                 self.call_sum_otm)
            self.dict_dfs_STOCK['PE-OTM'].insert(0, self.col_time,
                                                 self.put_sum_otm)
            self.dict_dfs_STOCK['CE-FAR_OTM'].insert(0, self.col_time,
                                                     self.call_sum_far_otm)
            self.dict_dfs_STOCK['PE-FAR_OTM'].insert(0, self.col_time,
                                                     self.put_sum_far_otm)
            self.dict_dfs_STOCK['LTP'].insert(0, self.col_time,
                                              self.live_price_normalized)
            self.dict_dfs_STOCK['LTP'][self.col_time] = self.dict_dfs_INDEX[
                'LTP'][self.col_time].round(3)
            self.dict_dfs_STOCK['PCR OTM'].insert(0, self.col_time,
                                                  self.pcr_otm)
            self.dict_dfs_STOCK['PCR OTM'][
                self.col_time] = self.dict_dfs_STOCK['PCR OTM'][
                    self.col_time].round(3)
            self.dict_dfs_STOCK['PCR FAR OTM'].insert(0, self.col_time,
                                                      self.pcr_far_otm)
            self.dict_dfs_STOCK['PCR FAR OTM'][
                self.col_time] = self.dict_dfs_STOCK['PCR FAR OTM'][
                    self.col_time].round(3)
            self.dict_dfs_STOCK['DIFF OTM'].insert(0, self.col_time,
                                                   self.diff_otm)
            self.dict_dfs_STOCK['DIFF OTM'][
                self.col_time] = self.dict_dfs_STOCK['DIFF OTM'][
                    self.col_time].round(3)
            return self.df_STOCK, self.dict_dfs_STOCK
 def create_other_buttons(self):
     btn = Checkbutton(self.make_frame()[0],
                       variable=self.recvar,
                       text="Recurse down subdirectories")
     btn.pack(side="top", fill="both")
        borderwidth=4,
        foreground='#00FFFF',  # Cyan
        fieldbackground='#FF00FF',  # Magenta
        troughcolor='#FFFF00',  # Yellow
        arrowcolor='#A52A2A',  # brown
        focuscolor='#40E0D0'  # turquoise
    )
    return ppout


root = Tk()
style = Style()
tWidg = 'TCheckbutton'
combo = Combobox(root, values=sorted(style.theme_names()), state='readonly')
combo.set(style.theme_use())
combo.bind('<<ComboboxSelected>>', lambda _e: theme_changed(combo.get()))
combo.pack()

out = theme_changed(style.theme_use())

button = Checkbutton(root, text="Normal Button")
button.pack()

button = Checkbutton(root, style="Custom." + tWidg, text="Custom Button")
button.pack()

mess = Message(root, text='layout \n\n' + out, width=250)
mess.pack()

root.mainloop()
Example #34
0
def startPassGen():
    global root
    root = Toplevel()
    root.attributes('-topmost', True)
    root.title("  Password Generator")
    root.geometry("350x380")
    # root.resizable(0,0)
    root.configure(bg="white")
    root.iconphoto(True, PhotoImage(file=assetpath + 'padlock.png'))
    root.tk.call('tk', 'scaling', 1.6)

    style = Style()
    style.configure("TLabel", background="white")
    style.configure('TCheckbutton', background='white')

    mainf = Frame(root, bg="white")
    mainf.pack(pady=20, padx=20, ipadx=10, ipady=10)

    f1 = Frame(mainf, bg="white")
    f1.pack()
    icon = ImageTk.PhotoImage(
        Image.open(assetpath + 'key.png').resize((45, 45)))
    Label(f1, image=icon, bg="white").grid(row=0,
                                           column=0,
                                           rowspan=2,
                                           padx=2,
                                           pady=5)
    Label(f1, text="Pass-Gen", font=('ARIAL', 15, 'bold'),
          bg="white").grid(row=0, column=2)
    Label(f1, text="Password Generator", bg="white").grid(row=1, column=2)

    f2 = Frame(mainf, bg="white")
    f2.pack(padx=10, pady=(30, 15))
    global passe
    passe = Entry(f2, width=30)
    passe.pack(side=LEFT)
    copyi = ImageTk.PhotoImage(
        Image.open(assetpath + 'copy.png').resize((25, 25)))
    copyb = Button(f2,
                   image=copyi,
                   bg="white",
                   bd=0,
                   activebackground="white",
                   command=lambda: copy2clip(passe.get()))
    copyb.pack(side=LEFT, padx=2)

    global length
    length = 8

    lenf = Frame(mainf)
    lenf.pack()
    Label(lenf, text="Length  ", bg="white").pack(side=LEFT)
    s = Spinbox(lenf,
                from_=4,
                to=25,
                width=5,
                command=lambda: setlength(s.get()))
    s.set(8)
    s.pack(side=LEFT)

    upper = BooleanVar()
    digit = BooleanVar()
    special = BooleanVar()
    upper.set(True)
    digit.set(True)
    special.set(True)
    f3 = Frame(mainf, bg="white")
    f3.pack(padx=10, pady=10)
    capb = Checkbutton(f3,
                       text="Include Capitals",
                       variable=upper,
                       offvalue=False,
                       onvalue=True)
    capb.pack(anchor=W, pady=5)
    digitb = Checkbutton(f3,
                         text="Include Digits",
                         variable=digit,
                         offvalue=False,
                         onvalue=True)
    digitb.pack(anchor=W, pady=5)
    specialb = Checkbutton(f3,
                           text="Include Special Symbols",
                           variable=special,
                           offvalue=False,
                           onvalue=True)
    specialb.pack(anchor=W, pady=5)

    genb = Button(mainf,
                  text="Generate",
                  command=lambda: passGen(length, upper.get(), digit.get(),
                                          special.get()),
                  bg="turquoise3",
                  activebackground="turquoise3",
                  bd=0)
    genb.pack(pady=10, ipadx=20, padx=(43, 10), side=LEFT)
    exitb = Button(mainf,
                   text="Exit",
                   command=exitPassGen,
                   bg="firebrick1",
                   activebackground="firebrick1",
                   bd=0,
                   width=37)
    exitb.pack(pady=10, ipadx=20, padx=(10, 30), side=LEFT)

    root.mainloop()
Example #35
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        from tkinter import TOP, BOTTOM, LEFT, RIGHT, BOTH
        from tkinter.ttk import Checkbutton, Button, Label, Frame
        # Acquire continuously
        self._continuous = False
        # Data source
        self._source = StreamReader()
        # File writer
        self._writer = DataHandler()
        # Last acquired data
        self.new_data = {}
        # Sampling frequency
        self._freq = tkinter.IntVar()
        self._freq.set(5000)
        # Sampling integration time
        self._time = tkinter.IntVar()
        self._time.set(2)
        # Data scaling
        self._scaling = {'prefactor': 1.0, 'unit': 'V'}
        # Flag: save all data to a folder
        self._save_all = tkinter.BooleanVar()
        # Channel enable flags
        self._channels = [tkinter.BooleanVar() for i in range(4)]
        self._channels[0].set(True)
        # Status display.
        self._status_label = tkinter.StringVar()
        # Main figure
        self._fig = LiveFigure()
        FigureCanvasTkAgg(self._fig, master=self)
        # Figure toolbar
        toolbar = NavigationToolbar2Tk(self._fig.canvas, self)
        toolbar.update()
        toolbar.pack(side=TOP)
        self._fig.canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
        # Area for channel selection, start/stop/save controls and status.
        buttonbar = Frame(self, relief=tkinter.SUNKEN)
        Label(buttonbar, text="Channels").pack(side=LEFT)
        for i, v in enumerate(self._channels):
            cb = Checkbutton(buttonbar, text="AIN%d" % i, variable=v,
                             command=self._on_channel_change)
            cb.pack(side=LEFT, expand=0, padx=4)
        # Buttons, right to left
        buttons = [
                   ("Save last", self._save_current),
                   ("Stop", self._source.stop_acquisition),
                   ("Start", self.start),
                   ]
        for label, fn in buttons:
            if label == "Start":
                b = Button(master=buttonbar, text=label)
                b.bind('<Button>', fn)
            else:
                b = Button(master=buttonbar, text=label, command=fn)
            b.pack(side=RIGHT)

        cb = Checkbutton(buttonbar, text="save all", variable=self._save_all,
                         command=self._on_save_all)
        cb.pack(side=RIGHT, expand=0, padx=8)
        buttonbar.pack(fill=tkinter.X)

        lbl = Label(self, relief=tkinter.SUNKEN, anchor=tkinter.W,
                    textvariable=self._status_label)
        lbl.pack(side=BOTTOM, fill=tkinter.X)

        # Menu to set sampling rate
        from collections import OrderedDict
        self._menus = OrderedDict()
        self._menus['freq'] = tkinter.Menu(self, tearoff=False)
        self._menus['time'] = tkinter.Menu(self, tearoff=False)
        self._menus['scaling'] = tkinter.Menu(self, tearoff=False)
        # Populate sample-freq menu
        self._fill_freq_menu()
        # Populate sample-time menu
        for t in [1, 2, 3, 4, 5, 10]:
            txt = "%.2f s" % t
            self._menus['time'].add_radiobutton(label=txt, value=t,
                                                variable=self._time)
        # Sampling settings menus
        menubar = tkinter.Menu(self.master)
        menubar.add_command(label="Open", command=self._on_open)
        for k, m in self._menus.items():
            menubar.add_cascade(label=k.capitalize(), menu=m)
        self._menus['scaling'].add_command(label='set unit',
                                           command=self._set_unit)
        self._menus['scaling'].add_command(label='set prefactor',
                                           command=self._set_prefactor)
        menubar.add_command(label="About", command=self._about)
        self.master.config(menu=menubar)
        # Traces on sampling variables to configure hardware and rescale axes.
        self._time.trace('w', lambda *_: self._source.set_sampling(time=self._time.get()))
        self._freq.trace('w', lambda *_: self._source.set_sampling(rate=self._freq.get()))
        self._time.trace('w', lambda *_: self._fig.rescale())
        self._freq.trace('w', lambda *_: self._fig.rescale())
        # Set channels on StreamReader to match initial selection.
        self._on_channel_change()
        # Start polling
        self._poll()