class StrategyShareToplevel(Parent): """ Toplevel to display a list of strategy with checkboxes to allow selecting which should be shared. """ def __init__(self, master, client, database, strategy_frame, **kwargs): """ :param master: master widget :param client: network.strategy.client.StrategyClient :param database: results.strategies.StrategyDataBase :param strategy_frame: frames.strategy.StrategyFrame :param kwargs: SnapToplevel keyword arguments """ resizable = kwargs.pop("resizable", False) self._client = client self._database = database self._frame = strategy_frame Parent.__init__(self, master, **kwargs) self.wm_title("GSF Parser: Strategy Sharing") self.wm_resizable(resizable, resizable) # Configure the Treeview self.tree = CheckboxTreeview(master=self, height=16) self.tree.column("#0", width=200) self.tree.heading("#0", text="Strategy") self.tree.config(show=("headings", "tree")) self.scroll_bar = ttk.Scrollbar(self, orient=tk.VERTICAL, command=self.tree.yview) self.tree.config(yscrollcommand=self.scroll_bar.set) self.update_strategy_tree() self.share_button = ttk.Button(self, text="Share Strategies", command=self.share_strategies) self.grid_widgets() def grid_widgets(self): self.tree.grid(row=1, column=1, sticky="nswe", padx=5, pady=5) self.scroll_bar.grid(row=1, column=2, sticky="ns", padx=(0, 5), pady=5) self.share_button.grid(row=2, column=1, columnspan=2, sticky="nswe", padx=5, pady=(0, 5)) def share_strategies(self): for strategy in self.strategies_to_share: self._client.send_strategy(strategy) messagebox.showinfo("Info", "Selected Strategies sent.") def update_strategy_tree(self): self.tree.delete(*self.tree.get_children("")) for strategy in sorted(self._database.keys()): self.tree.insert("", tk.END, iid=strategy, text=strategy) @property def strategies_to_share(self): for strategy in self.tree.get_checked(): yield self._database[strategy]
class LeftPanel: def __init__(self, root, frame): self.root = root self.frame = Frame(frame) # Create the toolbar as a frame self.frame.columnconfigure(0, weight=1) self.frame.columnconfigure(1, weight=1) self.frame.rowconfigure(0, weight=1) self.frame.rowconfigure(1, weight=1) self.frame.grid_rowconfigure(1, minsize=70) self.img1 = Image.open("icons/open-folder.png").convert('RGBA') self.useImg1 = ImageTk.PhotoImage(self.img1) self.path = os.path.dirname(__file__) #self.style = ttk.Style() #self.style.configure('Treeview', rowheight=40) self.tree = CheckboxTreeview(self.frame) #self.tree.pack(expand=YES, fill=BOTH) self.tree.heading("#0", text="Ficheiros") self.dir = self.tree.insert('', 'end', text=self.path, open=True) self.Subs(self.path, self.dir) self.tree.grid(row=0, column=0, columnspan=2, padx=4, pady=4, sticky=ALL) Button(self.frame, image=self.useImg1, width=70, height=70, command=self.browse_button).grid(row=2, column=1, padx=4, pady=4, sticky=E) self.frame.pack(side=TOP, fill=BOTH) def Subs(self, path, parent): for p in os.listdir(path): abspath = os.path.join(path, p) parent_element = self.tree.insert(parent, 'end', text=p, open=True) if os.path.isdir(abspath): self.Subs(abspath, parent_element) def browse_button(self): self.path = tkFileDialog.askdirectory() def set_dir(self): sourcePath = str(self.path) os.chdir(sourcePath)
class TreeviewConstructor(object): logger = CustomAdapter(logging.getLogger(str(__name__)), None) @debug(lvl=logging.NOTSET, prefix='') def __init__(self, master, frame_main, checkwidth=0): self.master = master # Done self.frame = frame_main # Done self.col_obj_dict = {} # Done self.column_lst = [] # Done self.col_disp_lst = [] # Done self.item_obj_dict = {} self.treeview = CheckboxTreeview(self.frame) # Done self.ysb = ttk.Scrollbar(self.frame) # Done self.xsb = ttk.Scrollbar(self.frame) # Done self.checkwidth = checkwidth self.manager = BusyManager(self.frame) self.populate_frame() # Done @debug(lvl=logging.NOTSET, prefix='') def populate_frame(self): self.frame.columnconfigure(0, weight=1) # Done self.frame.rowconfigure(0, weight=1) # Done self.treeview.grid(row=0, column=0, sticky=tk.NSEW) # Done self.ysb.config(orient=tk.VERTICAL, command=self.treeview.yview) # Done self.xsb.config(orient=tk.HORIZONTAL, command=self.treeview.xview) # Done self.treeview['yscroll'] = self.ysb.set # Done self.treeview['xscroll'] = self.xsb.set # Done self.ysb.grid(row=0, column=1, sticky=tk.NS) # Done self.xsb.grid(row=1, column=0, sticky=tk.EW) # Done @debug(lvl=logging.NOTSET, prefix='') def populate_cols(self): col_obj = TreeColumn(order=0, col_id='#0', hdr_txt="", anchor=tk.W, stretch=tk.NO, minwidth=0, width=self.checkwidth, display=False) TreeviewConstructor.logger.log(logging.NOTSET, "Column ID: {col_id} Header Text: {hdr_txt}". format(col_id=col_obj.col_id, hdr_txt=col_obj.hdr_txt)) self.col_obj_dict[col_obj.col_id] = col_obj for col_key, column in sorted(self.col_obj_dict.items(), key=lambda x: x[1].order): self.column_lst.append(column.col_id) if column.display: self.col_disp_lst.append(column.col_id) self.treeview.config(columns=self.column_lst, displaycolumns=self.col_disp_lst) self.treeview.tag_configure('red', foreground='red2') self.treeview.tag_configure('evenrow', background='gray85') self.treeview.tag_configure('oddrow', background='white') for col in self.col_obj_dict.values(): TreeviewConstructor.logger.log( logging.NOTSET, "Column ID: {col_id} Header Text: {hdr_txt} Anchor: {anchor}".format( col_id=col.col_id, hdr_txt=col.hdr_txt, anchor=col.anchor)) if col.hdr_txt in (None, ""): header = col.col_id else: header = col.hdr_txt self.treeview.heading(column=col.col_id, text=header, anchor=col.anchor, command=lambda _col=col.col_id: self.treeview_sort_column(_col, False)) self.treeview.column(col.col_id, minwidth=col.minwidth, width=col.width, stretch=col.stretch) @debug(lvl=logging.DEBUG, prefix='') def populate_items(self): for item in self.item_obj_dict.values(): TreeRow.logger.log(logging.NOTSET, "Item Info: {0}".format(item.iid)) self.treeview.insert(item.parent, item.index, iid=item.iid, values=item.values_list) for tag in item.tags_list: self.treeview.tag_add(item.iid, tag) @debug(lvl=logging.DEBUG, prefix='') def stripe_rows(self): for item in self.item_obj_dict.values(): self.treeview.tag_del(item.iid, 'evenrow') self.treeview.tag_del(item.iid, 'oddrow') row_num = self.treeview.index(item.iid) if row_num % 2 == 0: self.treeview.tag_add(item.iid, 'evenrow') elif row_num % 2 != 0: self.treeview.tag_add(item.iid, 'oddrow') @debug(lvl=logging.DEBUG, prefix='') def treeview_sort_column(self, col, reverse): self.manager.busy() item_list = [(self.treeview.set(k, col), k) for k in self.treeview.get_children('')] item_list.sort(reverse=reverse) # rearrange items in sorted positions for index, (val, k) in enumerate(item_list): self.treeview.move(k, '', index) self.stripe_rows() # reverse sort next time self.treeview.heading(col, command=lambda: self.treeview_sort_column(col, not reverse)) self.manager.not_busy() @debug(lvl=logging.DEBUG, prefix='') def tv_refresh(self): # self.manager.busy() item_list = list(self.treeview.get_children('')) item_list.sort(key=lambda x: int(x)) for item_iid, item_obj in sorted(self.item_obj_dict.items()): TreeRow.logger.log(logging.NOTSET, "Item ID: {0}".format(item_iid)) # l = self.treeview.get_children('') for index, k in enumerate(item_list): TreeRow.logger.log(logging.NOTSET, "k: {0}".format(k)) if str(item_iid) == str(k): self.treeview.delete(k) item_obj.index = index self.treeview.insert(item_obj.parent, item_obj.index, iid=item_obj.iid, values=item_obj.values_list) item_list.remove(k) break self.stripe_rows()
class TreeviewConstructor(ttk.Frame): logger = CustomAdapter(logging.getLogger(str(__name__)), None) @debug(lvl=logging.DEBUG, prefix='') def __init__(self, master, *args, **kwargs): self.col_obj_dict = {} self.column_lst = [] self.col_disp_lst = [] self.item_obj_dict = {} self.master = master # noinspection PyArgumentList super().__init__(self.master, *args, **kwargs) self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) self.treeview = CheckboxTreeview(self) TreeviewConstructor.logger.log(logging.DEBUG, "10") self.treeview.grid(row=0, column=0, sticky=tk.NSEW) TreeviewConstructor.logger.log(logging.DEBUG, "11") self.ysb = ttk.Scrollbar(self) TreeviewConstructor.logger.log(logging.DEBUG, "12") self.ysb.grid(row=0, column=1, sticky=tk.NS) TreeviewConstructor.logger.log(logging.DEBUG, "13") self.ysb.config(orient=tk.VERTICAL, command=self.treeview.yview) TreeviewConstructor.logger.log(logging.DEBUG, "14") self.xsb = ttk.Scrollbar(self) TreeviewConstructor.logger.log(logging.DEBUG, "15") self.xsb.grid(row=1, column=0, sticky=tk.EW) TreeviewConstructor.logger.log(logging.DEBUG, "16") self.xsb.config(orient=tk.HORIZONTAL, command=self.treeview.xview) TreeviewConstructor.logger.log(logging.DEBUG, "17") self.treeview['yscroll'] = self.ysb.set TreeviewConstructor.logger.log(logging.DEBUG, "18") self.treeview['xscroll'] = self.xsb.set TreeviewConstructor.logger.log(logging.DEBUG, "19") # self.manager = BusyManager(self.frame) @debug(lvl=logging.DEBUG, prefix='') def populate_cols(self, checkwidth): col_obj = TreeColumn(order=0, col_id='#0', hdr_txt="", anchor=tk.W, stretch=tk.NO, minwidth=0, width=checkwidth, display=False) TreeviewConstructor.logger.log( logging.DEBUG, "Column ID: {col_id} Header Text: {hdr_txt}".format( col_id=col_obj.col_id, hdr_txt=col_obj.hdr_txt)) self.col_obj_dict[col_obj.col_id] = col_obj for col_key, column in sorted(self.col_obj_dict.items(), key=lambda x: x[1].order): self.column_lst.append(column.col_id) if column.display: self.col_disp_lst.append(column.col_id) self.treeview.config(columns=self.column_lst, displaycolumns=self.col_disp_lst) self.treeview.tag_configure('red', foreground='red4', background='IndianRed1') self.treeview.tag_configure('parent_evenrow', background='gray85') self.treeview.tag_configure('child_evenrow', background="honeydew3") self.treeview.tag_configure('parent_oddrow', background='white') self.treeview.tag_configure('child_oddrow', background="honeydew2") for col in self.col_obj_dict.values(): TreeviewConstructor.logger.log( logging.DEBUG, "Column ID: {col_id} Header Text: {hdr_txt} Anchor: {anchor}". format(col_id=col.col_id, hdr_txt=col.hdr_txt, anchor=col.anchor)) if col.hdr_txt in (None, ""): header = col.col_id else: header = col.hdr_txt if col.col_id == '#0': self.treeview.heading(column=col.col_id, text="", anchor=col.anchor, command=lambda _col=col.col_id: self. treeview_sort_column(_col, False)) else: self.treeview.heading(column=col.col_id, text=header, anchor=col.anchor, command=lambda _col=col.col_id: self. treeview_sort_column(_col, False)) self.treeview.column(col.col_id, minwidth=col.minwidth, width=col.width, stretch=col.stretch) @debug(lvl=logging.DEBUG, prefix='') def populate_items(self): for item in self.item_obj_dict.values(): TreeviewConstructor.logger.log(logging.NOTSET, "Item Info: {0}".format(item.iid)) self.treeview.insert(item.parent, item.index, iid=item.iid, values=item.values_list) for tag in item.tags_list: self.treeview.tag_add(item.iid, tag) @debug(lvl=logging.DEBUG, prefix='') def stripe_rows(self): for item in self.item_obj_dict.values(): self.treeview.tag_del(item.iid, 'parent_evenrow') self.treeview.tag_del(item.iid, 'child_evenrow') self.treeview.tag_del(item.iid, 'parent_oddrow') self.treeview.tag_del(item.iid, 'child_oddrow') row_num = self.treeview.index(item.iid) if row_num % 2 == 0: if item.parent == "": self.treeview.tag_add(item.iid, 'child_evenrow') else: self.treeview.tag_add(item.iid, 'parent_evenrow') elif row_num % 2 != 0: if item.parent == "": self.treeview.tag_add(item.iid, 'child_oddrow') else: self.treeview.tag_add(item.iid, 'parent_oddrow') @debug(lvl=logging.DEBUG, prefix='') def treeview_sort_column(self, col, reverse): # self.manager.busy() item_list = [(self.treeview.set(k, col), k) for k in self.treeview.get_children('')] item_list.sort(reverse=reverse) # rearrange items in sorted positions for index, (val, k) in enumerate(item_list): self.treeview.move(k, '', index) self.stripe_rows() # reverse sort next time self.treeview.heading( col, command=lambda: self.treeview_sort_column(col, not reverse)) # self.manager.not_busy() @debug(lvl=logging.DEBUG, prefix='') def tv_refresh(self): # self.manager.busy() item_list = list(self.treeview.get_children('')) item_list.sort(key=lambda x: int(x)) for item_iid, item_obj in sorted(self.item_obj_dict.items()): TreeviewConstructor.logger.log(logging.DEBUG, "Item ID: {0}".format(item_iid)) # l = self.treeview.get_children('') for index, k in enumerate(item_list): TreeviewConstructor.logger.log(logging.DEBUG, "k: {0}".format(k)) if str(item_iid) == str(k): self.treeview.delete(k) item_obj.index = index self.treeview.insert(item_obj.parent, item_obj.index, iid=item_obj.iid, values=item_obj.values_list) item_list.remove(k) break self.stripe_rows() # self.manager.not_busy() @debug(lvl=logging.DEBUG, prefix='') def add_column(self, order=None, col_id=None, hdr_txt="", anchor=tk.W, stretch=tk.YES, minwidth=0, width=50, display=True, desc=None): col_obj = TreeColumn(order=order, col_id=col_id, hdr_txt=hdr_txt, anchor=anchor, stretch=stretch, minwidth=minwidth, width=width, display=display, desc=desc) self.col_obj_dict[col_obj.col_id] = col_obj @debug(lvl=logging.NOTSET, prefix='') def add_item(self, iid, parent="", index=tk.END, values_dict=None): item_obj = TreeRow(treeview_const=self, iid=iid, parent=parent, index=index, values_dict=values_dict) self.item_obj_dict[item_obj.iid] = item_obj @debug(lvl=logging.DEBUG, prefix='') def columns_from_query(self, query, hide_list=None, pref_order=None): if pref_order is None: pref_order = [] if hide_list is None: hide_list = [] col_order = 1 col_order += len(pref_order) TreeviewConstructor.logger.log( logging.DEBUG, "Column Order Starting Value: {0}".format(str(col_order))) for desc in query.column_descriptions: name = desc.get('name').replace("'", "").replace('"', "") TreeviewConstructor.logger.log(logging.DEBUG, "Column Name: {0}".format(name)) disp = True if name in hide_list: disp = False cust_order = col_order if name in pref_order: cust_order = pref_order.index(name) + 1 self.add_column(order=cust_order, col_id=name.replace(" ", "_"), hdr_txt=name, display=disp, desc=desc) if name not in pref_order: col_order += 1 @debug(lvl=logging.DEBUG, prefix='') def rows_from_query(self, query, id_col="line_number", limit=None, parent_col=None): counter = 1 for row in query.all(): temp_dict = {} for col_obj in self.col_obj_dict.values(): # noinspection PyProtectedMember value = row._asdict().get(col_obj.hdr_txt) if isinstance(value, str): value.replace("{", "").replace("}", "") temp_dict[str(col_obj.order)] = value counter += 1 if counter == limit: break parent = "" if parent_col is not None: # noinspection PyProtectedMember if str(row._asdict().get(id_col)) != str( row._asdict().get(parent_col)): # noinspection PyProtectedMember parent = str(row._asdict().get(parent_col)) # noinspection PyProtectedMember self.add_item(iid=str(row._asdict().get(id_col)), values_dict=temp_dict, parent=parent) @debug(lvl=logging.DEBUG, prefix='') def populate_query(self, query, hide_list=None, pref_order=None, id_col="line_number", limit=None, checkwidth=0, parent_col=None): the_query = query self.columns_from_query(the_query, hide_list, pref_order) self.populate_cols(checkwidth=checkwidth) self.rows_from_query(the_query, id_col, limit, parent_col) self.populate_items() self.stripe_rows()
main_tree.insert("", "end", text="Anantha" + "kumar" + 'Kondra' + 'Anantha Kumar Kondra') vsbar = tk.Scrollbar(checkingFrame, orient=tk.VERTICAL, command=main_tree.yview) vsbar.grid(row=0, column=1, sticky=tk.NS) hsbar = tk.Scrollbar(checkingFrame, orient=tk.HORIZONTAL, command=main_tree.xview) hsbar.grid(row=1, column=0, sticky=tk.EW) main_tree.config(xscroll=hsbar.set, yscroll=vsbar.set) main_tree.grid(row=0, column=0) canvas_tree.create_window((0, 0), window=main_tree, anchor=tk.NW) canvas_tree.configure(yscrollcommand=vsbar.set, xscrollcommand=hsbar.set) main_tree.update_idletasks() bbox = canvas_tree.bbox(tk.ALL) canvas_tree.configure(scrollregion=bbox, width=400, height=400) # can=tk.Canvas(f1,width=500) # tree=CheckboxTreeview(can,show='tree') # tree.column('#0',minwidth=350,stretch=True,width=300) # tree.insert("", "end", "1", text="1"+'2') # tree.insert("1", "end", "11", text="11") # tree.insert("1", "end", "12", text="Anantha"+"kumar"+'Kondra'+'Anantha Kumar Kondra') # tree.insert("11", "end", "111",text="Anantha"+"kumar"+'Kondra'+'Anantha Kumar Kondra' ) # tree.insert("", "end", "2", text="Anantha"+"kumar"+'Kondra'+'Anantha Kumar Kondra')
f1 = tk.Frame(root, width=490, height=490) f1.grid() can = tk.Canvas(f1, width=500) tree = CheckboxTreeview(can, show='tree') tree.column('#0', minwidth=350, stretch=True, width=300) tree.insert("", "end", "1", text="1" + '2') tree.insert("1", "end", "11", text="11") tree.insert("1", "end", "12", text="Anantha" + "kumar" + 'Kondra' + 'Anantha Kumar Kondra') tree.insert("11", "end", "111", text="Anantha" + "kumar" + 'Kondra' + 'Anantha Kumar Kondra') tree.insert("", "end", "2", text="Anantha" + "kumar" + 'Kondra' + 'Anantha Kumar Kondra') tree.grid() xscrol = ttk.Scrollbar(can, orient=tk.HORIZONTAL, command=tree.xview) xscrol.grid_anchor(anchor=tk.S) xscrol.grid(sticky='ew') tree.config(xscroll=xscrol.set) can.grid(row=0, column=0, sticky=tk.N + tk.S + tk.E + tk.W) root.mainloop()
def Main(): window = tkinter.Tk() window.title('Security Checker') # Title window.geometry('500x350+450+200') # Resolution window['padx'] = 8 # window.iconbitmap(default="Appwheel.ico") # App icon title_font = tkfont.Font(family='Arial', size=10, weight="bold") # Fonts within the App label1 = ttk.Label(text="Check the boxes:", font=title_font) # Writings within the App label1.grid(row=0, column=0, sticky="nw", pady=8) window.grid_columnconfigure(0, weight=1) window.grid_columnconfigure(1, weight=1) window.grid_columnconfigure(2, weight=3) window.grid_columnconfigure(3, weight=2) window.grid_columnconfigure(4, weight=2) window.grid_rowconfigure(0, weight=1) window.grid_rowconfigure(1, weight=10) window.grid_rowconfigure(2, weight=2) window.grid_rowconfigure(3, weight=3) window.grid_rowconfigure(4, weight=3) tree = CheckboxTreeview # Variable tree equals tree view # Edit dictionaries as you like # Dict #1 cisco = { 1: "enable secret", 2: "aaa new-model", 3: "service-password encryption", 4: "ip ssh version 2", 5: "motd", 6: "no logging console", 7: "no logging monitor", 8: "vtp password" } # Dict 2 smbv1_patch = { 100: "KB4012598", 101: "KB4012212", 102: "KB4012215", 103: "KB4012213", 104: "KB4012216", 105: "KB4012214", 106: "KB4012217", 107: "KB4012606", 108: "KB4013198", 109: "KB4013429" } # What should not be present in a configuration files should_not_be = [ "enable password", "snmp-server community public", "transport input telnet", "EnableSMB1Protocol : True" ] scrollbar1 = ttk.Scrollbar(window, orient="vertical", command=tree.yview) # Scroll bar scrollbar1.grid(row=1, column=6, sticky='nse') tree = CheckboxTreeview(yscrollcommand=scrollbar1) tree.grid(column=0, columnspan=6, row=1, sticky="news") # Tree position tree.insert("", "end", "1", text="1. CISCO Hardening") tree.insert("1", "end", "sub0", text="1.1 Generic configs") tree.insert("sub0", "end", cisco[1], text="1.1.1 Password Hash") tree.insert("sub0", "end", cisco[3], text="1.1.2 Password Encryption") tree.insert("sub0", "end", cisco[2], text="1.1.3 AAA configuration") tree.insert("sub0", "end", cisco[4], text="1.1.4 SSH version 2") tree.insert("sub0", "end", cisco[5], text="1.1.5 MOTD") tree.insert("sub0", "end", cisco[8], text="1.1.6 VTP Password") tree.insert("sub0", "end", cisco[6], text="1.1.7 No logging console") tree.insert("sub0", "end", cisco[7], text="1.1.8 No logging monitor") tree.insert("", "end", "2", text="2. Microsoft SMBv1 Patching Check") tree.insert("2", "end", smbv1_patch[100], text="2.1 Windows Vista & Server 2008 (KB4012598)") tree.insert("2", "end", "sub10", text="2.2 Windows 7 & Server 2008 R2") tree.insert("sub10", "end", smbv1_patch[101], text="2.2 KB4012212") tree.insert("sub10", "end", smbv1_patch[102], text="2.3 KB4012215") tree.insert("2", "end", "sub11", text="2.4 Windows 8.1 & Server 2012 & 2012 R2") tree.insert("sub11", "end", smbv1_patch[103], text="2.4 KB4012213") tree.insert("sub11", "end", smbv1_patch[104], text="2.5 KB4012216") tree.insert("sub11", "end", smbv1_patch[105], text="2.6 KB4012214") tree.insert("sub11", "end", smbv1_patch[106], text="2.7 KB4012217") tree.insert("2", "end", "sub12", text="2.8 Windows 10 & Server 2016") tree.insert("sub12", "end", smbv1_patch[107], text="2.8 KB4012606") tree.insert("sub12", "end", smbv1_patch[108], text="2.7 KB4013198") tree.insert("sub12", "end", smbv1_patch[109], text="2.8 KB4013429") button2 = ttk.Button(text="Quit", command=sys.exit) # Close Button button2.grid(row=4, column=0, sticky='ws', padx=10, pady=10) # Close button position checked_boxes = list() # List for appending selected boxes lines_in_conf_file = list() # List for appending the read file passed = str('Passed\t\t') not_passed = str('Not Passed\t\t') def box_select(just): # Function for appending selected boxes checked_boxes.append(tree.get_checked()) tree.bind('<<TreeviewSelect>>', box_select) def file_open(): if len(tree.get_checked()) > 0: readfile = filedialog.askopenfilename(initialdir="/", title="Select " "configuration" " file", filetypes=(("txt " "files", "*.txt *.html"), ("all " "files", "*.*"))) try: with open(readfile, "r", encoding='utf-8') as opened_file: for i in opened_file: pass encodings = 'utf-8' except UnicodeDecodeError: encodings = 'utf-16' with open(readfile, "r", encoding=encodings) as opened_file: for read_line in opened_file: lines_in_conf_file.append(read_line.strip('\n')) with open("temp.txt", "a") as conf: # Opens file --ONCE-- for clause in checked_boxes[-1]: # Loops over selection for line in lines_in_conf_file: # Loops over conf file if clause in line: # Checks what equals between loops conf.write("{}".format(passed) + clause + "\n") # Writing them into a file break # Ends IF statement and continues with else: # a loop on a conf file if clause in should_not_be: # Checks if selection in not wanted list conf.write( "{}".format(passed) + clause + "\n") # if yes, writes to a file "PASSED" else: conf.write( "{}".format(not_passed) + clause + "\n") # if not, writes to a file "NOT # PASSED" checked_configs() else: pop_up_msg() def checked_configs(): checked = tkinter.Tk() # checked.iconbitmap(default="Appwheel.ico") # App icon checked.geometry('650x500+650+300') # Resolution checked.wm_title("Security Checker") checked.grid_columnconfigure(0, weight=1) checked.grid_columnconfigure(1, weight=1) checked.grid_columnconfigure(2, weight=3) checked.grid_columnconfigure(3, weight=2) checked.grid_columnconfigure(4, weight=2) checked.grid_rowconfigure(0, weight=1) checked.grid_rowconfigure(1, weight=10) checked.grid_rowconfigure(2, weight=2) checked.grid_rowconfigure(3, weight=3) checked.grid_rowconfigure(4, weight=3) label2 = ttk.Label(checked, text='Security check report:', font=title_font) label2.grid(row=0, column=0, sticky='ew', padx=10, pady=10) button3 = ttk.Button(checked, text="Quit", command=sys.exit) button3.grid(row=4, column=0, sticky='ws', padx=10, pady=10) def save_report_to_file(): save_file = filedialog.asksaveasfile(mode='w', defaultextension=".txt", initialdir="/", title="Save " "report", filetypes=(("txt " "files", "*.txt"), ("all " "files", "*.*"))) if save_file: with open('temp.txt', 'r') as temp_file: for i in temp_file: save_file.write(i) else: return button4 = ttk.Button(checked, text="Save to..", command=save_report_to_file) button4.grid(row=4, column=5, sticky='es', padx=10, pady=10) checked = Text(checked) checked.grid(column=0, columnspan=6, row=1, sticky="news") checked.insert('1.0', ''.join(open("temp.txt", "r"))) checked.mainloop() def pop_up_msg(): popup = tkinter.Tk() # popup.iconbitmap(default="Appwheel.ico") # App icon popup.wm_title("Security Checker") label3 = ttk.Label( popup, text='Please select at least 1 checkbox to continue', font=title_font) label3.grid(row=0, column=0, sticky='ew', padx=10, pady=10) button5 = ttk.Button(popup, text="Okay", command=popup.destroy) button5.grid(row=1, column=0, padx=10, pady=10) popup.mainloop() button1 = ttk.Button(text="Next", command=file_open) button1.grid(row=4, column=5, sticky='es', padx=10, pady=10) # Open's Browse Button window.mainloop()