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))
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)
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()
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
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'
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'
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))
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)
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()
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)
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
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)
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))
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)
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()
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")
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")
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'
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()
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)
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()
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)
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)
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
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()
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()
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()