class NewActionModulation(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() def initUI(self): self.parent.title("Test") self.frameTab = Frame(self, relief=RAISED, borderwidth=1) self.frameTab.grid(row=3, column=0, columnspan=4) self.grid(row=0, column=0) self.frameTab.grid(row=0, column=0) self.note_book = Notebook(self.frameTab) self.specific_actions = ActionModulation.ActionModulation(self.note_book) self.note_book.add(self.specific_actions.getFrame(), text="specific actions") self.general_actions = GeneralActionModulation.GeneralActionModulation(self.note_book) self.note_book.add(self.general_actions.getFrame(), text="general actions") self.note_book.grid(row=0, column=0) self.frameButtons = Frame(self, relief=RAISED, borderwidth=1) self.frameButtons.grid(row=3, column=0, columnspan=4) self.buttonReset = Button(self.frameButtons, text="Reset") self.buttonReset.grid(row=0, column=0) self.buttonAbort = Button(self.frameButtons, text="Abort") self.buttonAbort.grid(row=0, column=1) self.buttonStop = Button(self.frameButtons, text="Stop") self.buttonStop.grid(row=0, column=2) self.buttonSendAction = Button(self.frameButtons, text="Send Action") self.buttonSendAction.grid(row=0, column=4) self.buttonSendEmotion = Button(self.frameButtons, text="Send Emotion") self.buttonSendEmotion.grid(row=0, column=5) def getCurrentTab(self): return self.note_book.index(self.note_book.select()) def getFirstTab(self): return self.specific_actions def getSecondTab(self): return self.general_actions def getButtonSendAction(self): return self.buttonSendAction def getButtonSendEmotion(self): return self.buttonSendEmotion def getButtonReset(self): return self.buttonReset def getButtonAbort(self): return self.buttonAbort def getButtonStop(self): return self.buttonStop
def show_control(master, data): """Выводит блокнот управления с пятью закладками""" if data.is_restart: reload(control_a) reload(control_b) reload(control_c) reload(control_d) reload(control_e) reload(control_f) from control_a import show_goods from control_b import show_calc from control_c import show_sales_goods from control_d import show_sales from control_e import show_others from control_f import show_plus def tab_changes(tab): """функция, срабатывающая при нажатии закладок переключения между правыми (основными) фреймами""" window_names = controlTabs.tabs() index = window_names.index(controlTabs.select()) if not FLAGS[index]: CONTROL[index](workArea[index], data) #нужна ли эта дата? FLAGS[index] = True else: CONTROL[index].renew() CONTROL = (show_goods, show_calc, show_sales_goods, show_sales, show_others, show_plus) FLAGS = [False, False, False, False, False, False] heads = (u' Товары ', u' Калькуляции ', u' Акционные товары ', u' Акционные цены ', u' Категории, скидки, причины списания ', u' Дополнительно ') workArea = [] controlTabs = Notebook(master) for q in range (6): frame = Canvas(controlTabs, relief=GROOVE, highlightthickness=0) if USE_BACKGROUND: frame.create_image(0,0, anchor='nw', image=data.photo) controlTabs.add(frame, text=heads[q]) workArea.append(frame) controlTabs.pack(side=TOP, fill=BOTH, expand=YES) controlTabs.bind('<<NotebookTabChanged>>', tab_changes) Style().configure("TNotebook.Tab", font=('Verdana', FONT_SIZE))
class ConverterFrame(Frame): def __init__(self, converter, master=None): Frame.__init__(self, master) master.title("Ai Variable tool") self.converter = converter self.grid(row=0, sticky=(tk.N + tk.E + tk.W + tk.S)) self.grid_columnconfigure(0, weight=1) self.grid_rowconfigure(0, weight=1) self.tabbedPane = Notebook(self, name="tabbed-pane") self.tabbedPane.grid(row=0, column=0, sticky=(tk.N + tk.E + tk.W + tk.S)) self.btnSave = tk.Button(self, text="Guardar", command=self.btnSaveCallback) self.btnSave.grid(row=1, column=0, sticky=(tk.N + tk.E + tk.W + tk.S)) self.rawTextPanel = RawTextPane(self.tabbedPane) self.rawTextPanel.grid(row=0, column=0, sticky=(tk.N + tk.E + tk.W + tk.S)) self.numbersPanel = NumbersPane(self.tabbedPane) self.numbersPanel.grid(row=0, column=0, sticky=(tk.N + tk.E + tk.W + tk.S)) self.tabbedPane.add(self.numbersPanel, text="Series de numeros") self.tabbedPane.add(self.rawTextPanel, text="Texto en crudo") self.panels = [self.numbersPanel, self.rawTextPanel] def btnSaveCallback(self): filename = tkFileDialog.asksaveasfilename( initialdir=".", title="Select file", filetypes=(("Xml files", "*.xml"), ("All files", "*.*"))) current_idx = self.tabbedPane.index("current") work_text = self.panels[current_idx].getText() self.converter.convert(work_text) if not self.converter.save(filename): tkMessageBox.showerror("Error", "El archivo no ha sido almacenado.") else: tkMessageBox.showinfo( "Exito", "El archivo ha sido almacenado adecuadamente.")
def main(): root = tk.Tk() root.geometry("600x400+150+150") app = frame_make(root) fileloc = "list.txt" # Local directory file #Format: [short name],[long name],[path to sh file] global termID, frameID, winID termID = [] # PIDs in Terminals frameID = [] # Frame ID winID = [] # Window IDs of the Terminal windows gameID = [] # List of short names as we add them note = Notebook(root) with open(fileloc, 'rb') as csvfile: read = csv.reader(csvfile, delimiter=',', quotechar='|') for i, row in enumerate(read): if len(row) > 0: shortname, longname, command = map(str.strip, row) frameID.append(tk.Frame(note)) note.add(frameID[i], text=shortname) lbutton = 'Launch: ' + longname launch_command = lambda com, j: lambda : send_launch_game(com, j) lg = tk.Button(frameID[i], text=lbutton, command=launch_command(command, i)) #kg = tk.Button(frameID[i], # text="Stop Game", # command=lambda: send_kill_game(wip,i)) gameID.append(shortname) lg.pack(in_=frameID[i]) #kg.pack(in_=frameID[i]) term = tk.Frame(frameID[i], height=300, width=500) term.pack(fill=tk.BOTH,side='top', expand=tk.YES) wip = term.winfo_id() winID.append(wip) note.pack(fill='both', expand=True) tk.Button(root, text='Refresh List',command= lambda : refresh_tabs(note, fileloc, gameID)).pack(side='left') tk.Button(root, text='Exit', command=root.destroy).pack(side='right') #tk.Button(root, text='Exit',command=destroy_all(root)).pack(side='right') root.mainloop() send_kill_all() #At end of program, kill all open terminal processes
class Tabs: def __init__(self, parent): self.root = Notebook(parent) self.frames = {} # self.frame1 = Frame(self.root) # self.root.add(self.frame1, text=label1) # self.frame2 = Frame(self.root) # self.root.add(self.frame2, text=label2) # self.frame3 = Frame(self.root) # self.root.add(self.frame3, text=label3) def add_frame(self, frame, label): # self.frames.append(frame) self.root.add(frame, text=label) self.frames[label] = frame def get_root(self): return self.root
def report_sell(master, from_date=None, to_date=None, cathegory=-1, from_check=None, to_check=None, item=None, discount=None): """Создает и выводи на экран окно с отчетом по продажам, составленным на основании заданных фильтров""" def press(index): """функция, срабатывающая при нажатии кнопок переключения между видами сортировок. Переключает вкладки в блокноте""" window_names = tabs.tabs() tabs.select(window_names[index]) def make_query_sell(from_date=None, to_date=None, cathegory=-1, from_check=None, to_check=None, item=None, discount=None): """Возвращает кортеж запросов для последующего использования при составлении отчета по продажам""" select = queries.report_sell_query() if cathegory <> -1: for q in range(len(select)): new_select = [] for element in select[q]: if element.goods.cathegory == cathegory: new_select.append(element) select[q] = new_select if item: for q in range(len(select)): new_select = [] for element in select[q]: if element.goods == item: new_select.append(element) select[q] = new_select if from_check and to_check: for q in range(len(select)): new_select = [] for element in select[q]: if (element.check.id >= from_check) and (element.check.id <= to_check): new_select.append(element) select[q] = new_select elif from_check: for q in range(len(select)): new_select = [] for element in select[q]: if element.check.id >= from_check: new_select.append(element) select[q] = new_select elif to_check: for q in range(len(select)): new_select = [] for element in select[q]: if element.check.id <= to_check: new_select.append(element) select[q] = new_select if discount <> None: if discount: for q in range(len(select)): new_select = [] for element in select[q]: if element.discount: new_select.append(element) select[q] = new_select else: for q in range(len(select)): new_select = [] for element in select[q]: if not element.discount: new_select.append(element) select[q] = new_select if from_date and to_date: for q in range(len(select)): new_select = [] for element in select[q]: if (element.check.date_time >= from_date) and \ (element.check.date_time <= to_date + timedelta(days=1)): new_select.append(element) select[q] = new_select elif from_date: for q in range(len(select)): new_select = [] for element in select[q]: if element.check.date_time >= from_date: new_select.append(element) select[q] = new_select elif to_date: for q in range(len(select)): new_select = [] for element in select[q]: if element.check.date_time <= to_date + timedelta(days=1): new_select.append(element) select[q] = new_select return select def show(frame, iterator): """Выводит на экран выборку, заданную в iterator""" scrollbar = Scrollbar(frame) tree = Treeview(frame, selectmode='none', padding=3, style='Custom.Treeview', height=REPORT_HEIGHT, yscrollcommand=scrollbar.set) tree.pack(side=LEFT, fill=BOTH, expand=YES) scrollbar.config(command=tree.yview) scrollbar.pack(side=LEFT, fill=Y) tree.tag_configure('1', font=('Verdana', FONT_SIZE_REPORT)) tree.tag_configure('2', font=('Verdana', FONT_SIZE_REPORT), background='#f5f5ff') Style().configure('Custom.Treeview', rowheight=FONT_SIZE_REPORT*2) columns = ['#' + str(x + 1) for x in range(8)] tree.configure(columns=columns) for q in range(len(header)): tree.heading('#%d' % (q + 1), text=header[q], anchor='w') tree.column('#%d' % (q + 1), width=REPORT_SCALE * col_width[q + 1], anchor='w') tree.heading('#0', text='', anchor='w') tree.column('#0', width=0, anchor='w', minwidth=0) flag = True summ = 0 for item in iterator: value = item.quantity * item.price * (100 - item.discount) / 100 summ += value col = [] col.append(add_s(item.check.id)) col.append(add_s(item.goods.cathegory.name)) col.append(add_s(item.goods.name)) col.append(add_s(item.quantity)) col.append(add_s(item.discount) +'%' if item.discount else ' -- ') col.append(add_s(u'%6.2f грн.' % value)) col.append(add_s(item.check.date_time.strftime('%d.%m.%Y'))) col.append(add_s(item.check.date_time.time())[:8]) flag = not flag if flag: tree.insert('', 'end', text='', values=col, tag='2') else: tree.insert('', 'end', text='', values=col, tag='1') return summ # --------------------------------------------# tl = Toplevel(master) tl.title(u'Отчет по продажам') bottom = Frame(tl, relief=SUNKEN) bottom.pack(side=BOTTOM, fill=X) showArea = [] tabs = Notebook(tl, style='Hidden.TNotebook') for q in range (4): frame = Frame(tabs, height=REPORT_HEIGHT) tabs.add(frame, text='') showArea.append(frame) tabs.pack(side=TOP, fill=BOTH, expand=YES) Style().layout('Hidden.TNotebook.Tab', '') header = [u'Чек', u'Категория', u'Товар', u'Кол-во', u'Скидка', u'Стоимость', u'Дата', u'Время'] col_width = (0, 10, 15, 38, 10, 10, 20, 16, 16) #---------------------TEST----------- ## cathegory = list(Cathegory.select())[1] ## item = Assortiment.get(Assortiment.name == u'Солнышко') ## from_check = 12 ## to_check = 16 ## discount = False ## from_date = datetime(year=2014, month=9, day=25) ## to_date = datetime(year=2014, month=9, day=25) #------------------------------------ query = make_query_sell(from_date, to_date, cathegory, from_check, to_check, item, discount) for q in range(len(query)): summ = show(showArea[q], query[q]) Button(bottom, text=u'Сортировка\nпо чеку', command=lambda: press(0)).pack( side=LEFT, padx=REPORT_PAD, pady=REPORT_PAD) Button(bottom, text=u'Сортировка\nпо категории', command=lambda: press(1) ).pack(side=LEFT, padx=REPORT_PAD, pady=REPORT_PAD) Button(bottom, text=u'Сортировка\nпо товару', command=lambda:press(2)).pack( side=LEFT, padx=REPORT_PAD, pady=REPORT_PAD) Button(bottom, text=u'Сортировка\nпо дате', command=lambda: press(3)).pack( side=LEFT, padx=REPORT_PAD, pady=REPORT_PAD) Button(bottom, text=u'Экспорт в\nMS Excel').pack( side=RIGHT, padx=REPORT_PAD, pady=REPORT_PAD) Label(bottom, text=u'Итого: %.2f грн.' % summ, font=('Lucida Console', FONT_SIZE_BIG,'bold')).pack(side=RIGHT, padx=REPORT_PAD, pady=REPORT_PAD) tl.focus_set()
def __init__(self, master): self.fname="" #global variables self.t1=StringVar() self.t2=StringVar() self.t3=StringVar() self.t4=StringVar() self.t5=StringVar() self.t6=StringVar() self.t7=StringVar() self.t8=StringVar() self.var1=StringVar() self.var2=StringVar() self.var3=StringVar() self.var4=StringVar() self.var5=StringVar() self.var6=StringVar() self.var7=StringVar() self.var8=StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=870, height=420) #end #title of window master.title("Airolib-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont=tkFont.Font(family="Helvetica", size=15,underline = True) self.myfontnew=tkFont.Font(family="Helvetica", size=11,underline = True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb,name="frame_content", bg="white") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook # repeat for each tab self.frame_content7 = Frame(nb, name='frame_content7', bg="white") nb.add(self.frame_content7, text="Detect Devices") self.frame_content5 = Frame(nb, name='frame_content5', bg="white") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text = 'Airolib-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) btndetect=Button(self.frame_content7, text = 'Detect', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 1, column = 0, padx = 5, pady = 5) btndbrowse=Button(self.frame_content7, text = 'Attach File', command =self.browse_file, height=2, width=15, font=self.customFont).grid(row = 3, column = 0, padx = 5, pady = 5) self.lilnew1=Listbox(self.frame_content7,bg="black", fg="white", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row = 1, column = 1, rowspan=3) #End Label(self.frame_content, text = 'Airolib-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) Label(self.frame_content, text = 'Options :',font=self.myfontnew, bg="white").grid(row = 1, column = 1) #Button(self.frame_content, text = 'ivs', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 0, padx = 5, pady = 5) #Button(self.frame_content, text = 'gpsd', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 1, padx = 5, pady = 5) #Button(self.frame_content, text = 'write', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 2, padx = 5, pady = 5) #command Listbox Label(self.frame_content5, text = 'Edit Command From Here',font=self.myfontnew, bg="white", justify=LEFT).grid(row = 0, column = 0) TextCommandBox=Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output=Text(self.frame_content5,bg="black", fg="white", font=self.myfont, height=20, width=42) self.output.grid(row = 0, column = 1, padx=50, pady=5, rowspan=3) btnsubmit=Button(self.frame_content5, width=15, height=2, text="Get Result", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear=Button(self.frame_content5, width=15, height=2, text="Clear Output", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "--stats", \ onvalue = "--stats", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var1) self.C1.grid(row = 2, column = 0, padx = 5, pady = 5) self.t1=Text(self.frame_content,height=1,width = 20) self.t1.grid(row = 2, column = 1, padx = 5, pady = 5) l1=Label(self.frame_content, text = ': Output some information about the database.',font=self.myfont, bg="white", justify=LEFT).grid(row = 2, column = 2, padx = 5, pady = 5) self.C2 = Checkbutton(self.frame_content, text = "--sql", \ onvalue = "--sql", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var2) self.C2.grid(row = 3, column = 0, padx = 5, pady = 5) self.t2=Text(self.frame_content,height=1,width = 20) self.t2.grid(row = 3, column = 1, padx = 5, pady = 5) l2=Label(self.frame_content, text = ': Execute the specified SQL statement.',font=self.myfont, bg="white", justify=LEFT).grid(row = 3, column = 2, padx = 5, pady = 5) self.C3 = Checkbutton(self.frame_content, text = "--clean", \ onvalue = "--clean", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var3) self.C3.grid(row = 4, column = 0, padx = 5, pady = 5) self.t3=Text(self.frame_content,height=1,width = 20) self.t3.grid(row = 4, column = 1, padx = 5, pady = 5) l3=Label(self.frame_content, text = ': Perform steps to clean the database from old junk.',font=self.myfont, bg="white", justify=LEFT).grid(row = 4, column = 2, padx = 5, pady = 5) self.C4 = Checkbutton(self.frame_content, text = "- -batch", \ onvalue = "--verify", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var4) self.C4.grid(row = 5, column = 0, padx = 5, pady = 5) self.t4=Text(self.frame_content,height=1,width = 20) self.t4.grid(row = 5, column = 1, padx = 5, pady = 5) l4=Label(self.frame_content, text = ': Start batch-processing all combinations of ESSIDs and passwords.',font=self.myfont, bg="white", justify=LEFT).grid(row = 5, column = 2, padx = 5, pady = 5) self.C5 = Checkbutton(self.frame_content, text = "--verify", \ onvalue = "--verify", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var5) self.C5.grid(row = 6, column = 0, padx = 5, pady = 5) self.t5=Text(self.frame_content,height=1,width = 20) self.t5.grid(row = 6, column = 1, padx = 5, pady = 5) l5=Label(self.frame_content, text = ': Verify a set of randomly chosen PMKs.',font=self.myfont, bg="white", justify=LEFT).grid(row = 6, column = 2, padx = 5, pady = 5) self.C6 = Checkbutton(self.frame_content, text = "--export", \ onvalue = "--export", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var6) self.C6.grid(row = 7, column = 0, padx = 5, pady = 5) self.t6=Text(self.frame_content,height=1,width = 20) self.t6.grid(row = 7, column = 1, padx = 5, pady = 5) l6=Label(self.frame_content, text = ': Export to a cowpatty file.',font=self.myfont, bg="white", justify=LEFT).grid(row = 7, column = 2, padx = 5, pady = 5) self.C7 = Checkbutton(self.frame_content, text = "--import cowpatty", \ onvalue = "--import cowpatty", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var7) self.C7.grid(row = 8, column = 0, padx = 5, pady = 5) self.t7=Text(self.frame_content,height=1,width = 20) self.t7.grid(row = 8, column = 1, padx = 5, pady = 5) l7=Label(self.frame_content, text = ': Import a cowpatty file and create the database.',font=self.myfont, bg="white", justify=LEFT).grid(row = 8, column = 2, padx = 5, pady = 5) self.C8 = Checkbutton(self.frame_content, text = "--import", \ onvalue = "--import", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var8) self.C8.grid(row = 9, column = 0, padx = 5, pady = 5) self.t8=Text(self.frame_content,height=1,width = 20) self.t8.grid(row = 9, column = 1, padx = 5, pady = 5) l8=Label(self.frame_content, text = ': Import a text flat file as a list of either ESSIDs or passwords and create the database.',font=self.myfont, bg="white", justify=LEFT).grid(row = 9, column = 2, padx = 5, pady = 5)
def report_storage(master, cathegory=-1, item=None): """Создает и выводи на экран окно с отчетом по остаткам""" def press(index): """функция, срабатывающая при нажатии кнопок переключения между видами сортировок. Переключает вкладки в блокноте""" window_names = tabs.tabs() tabs.select(window_names[index]) def make_query_storage(cathegory=-1, item=None): """Возвращает кортеж запросов для последующего использования при составлении отчета по остаткам""" select = queries.report_storage_query() if cathegory <> -1: for q in range(len(select)): new_select = [] for element in select[q]: if element.cathegory == cathegory: new_select.append(element) select[q] = new_select if item: for q in range(len(select)): new_select = [] for element in select[q]: if element == item: new_select.append(element) select[q] = new_select return select def show(frame, iterator): """Выводит на экран выборку, заданную в iterator""" scrollbar = Scrollbar(frame) tree = Treeview(frame, selectmode='none', padding=3, style='Custom.Treeview', height=REPORT_HEIGHT, yscrollcommand=scrollbar.set) tree.pack(side=LEFT, fill=BOTH, expand=YES) scrollbar.config(command=tree.yview) scrollbar.pack(side=LEFT, fill=Y) tree.tag_configure('1', font=('Verdana', FONT_SIZE_REPORT)) tree.tag_configure('2', font=('Verdana', FONT_SIZE_REPORT), background='#f5f5ff') tree.tag_configure('red1', font=('Verdana', FONT_SIZE_REPORT), foreground='red') tree.tag_configure('red2', font=('Verdana', FONT_SIZE_REPORT), background='#f5f5ff', foreground='red') tree.tag_configure('grey1', font=('Verdana', FONT_SIZE_REPORT), foreground='#dddddd') tree.tag_configure('grey2', font=('Verdana', FONT_SIZE_REPORT), background='#f5f5ff', foreground='#dddddd') Style().configure('Custom.Treeview', rowheight=FONT_SIZE_REPORT*2) columns = ['#' + str(x + 1) for x in range(4)] tree.configure(columns=columns) for q in range(len(header)): tree.heading('#%d' % (q + 1), text=header[q], anchor='w') tree.column('#%d' % (q + 1), width=REPORT_SCALE * col_width[q + 1], anchor='w') tree.heading('#0', text='', anchor='w') tree.column('#0', width=0, anchor='w', minwidth=0) flag = True for item in iterator: if not item.calculation: col = [] col.append(add_s(item.cathegory.name if item.cathegory else u'-Нет-')) col.append(add_s(item.name)) storage = queries.items_in_storage(item) col.append(add_s(storage)) col.append(add_s(item.measure)) if int(storage) > 0: flag = not flag if flag: tree.insert('', 'end', text='', values=col, tag='2') else: tree.insert('', 'end', text='', values=col, tag='1') elif storage == '0': flag = not flag if flag: tree.insert('', 'end', text='', values=col, tag='grey2') else: tree.insert('', 'end', text='', values=col, tag='grey1') else: flag = not flag if flag: tree.insert('', 'end', text='', values=col, tag='red2') else: tree.insert('', 'end', text='', values=col, tag='red1') # --------------------------------------------# tl = Toplevel(master) tl.title(u'Отчет по остаткам') bottom = Frame(tl, relief=SUNKEN) bottom.pack(side=BOTTOM, fill=X) showArea = [] tabs = Notebook(tl, style='Hidden.TNotebook') for q in range (2): frame = Frame(tabs, height=REPORT_HEIGHT) tabs.add(frame, text='') showArea.append(frame) tabs.pack(side=TOP, fill=BOTH, expand=YES) Style().layout('Hidden.TNotebook.Tab', '') header = [u'Категория', u'Товар', u'Кол-во', u'Ед.изм.'] col_width = (0, 15, 38, 14, 8) query = make_query_storage(cathegory, item) for q in range(len(query)): summ = show(showArea[q], query[q]) Button(bottom, text=u'Сортировка\nпо категории', command=lambda: press(0) ).pack(side=LEFT, padx=REPORT_PAD, pady=REPORT_PAD) Button(bottom, text=u'Сортировка\nпо товару', command=lambda:press(1)).pack( side=LEFT, padx=REPORT_PAD, pady=REPORT_PAD) Button(bottom, text=u'Экспорт в\nMS Excel').pack( side=RIGHT, padx=REPORT_PAD, pady=REPORT_PAD) tl.focus_set()
class MainWindow(object): def __init__(self, root, debugger): ''' ----------------------------------------------------- | main button toolbar | ----------------------------------------------------- | < ma | in content area > | | | | | | | File list | File name | Inspector | | (stack/ | Code area | | | breakpnts) | | | | | | | | | | | ----------------------------------------------------- | status bar area | ----------------------------------------------------- ''' # Obtain and expand the current working directory. base_path = os.path.abspath(os.getcwd()) base_path = os.path.normcase(base_path) + '/' # Create a filename normalizer based on the CWD. self.filename_normalizer = filename_normalizer(base_path) self.debugger = debugger # Associate the debugger with this view. self.debugger.view = self # Root window self.root = root self.root.title('Bugjar') self.root.geometry('1024x768') # Prevent the menus from having the empty tearoff entry self.root.option_add('*tearOff', False) # Catch the close button self.root.protocol("WM_DELETE_WINDOW", self.cmd_quit) # Catch the "quit" event. self.root.createcommand('exit', self.cmd_quit) # Setup the menu self._setup_menubar() # Set up the main content for the window. self._setup_button_toolbar() self._setup_main_content() self._setup_status_bar() # Now configure the weights for the root frame self.root.columnconfigure(0, weight=1) self.root.rowconfigure(0, weight=0) self.root.rowconfigure(1, weight=1) self.root.rowconfigure(2, weight=0) debugger.start() ###################################################### # Internal GUI layout methods. ###################################################### def _setup_menubar(self): # Menubar self.menubar = Menu(self.root) # self.menu_Apple = Menu(self.menubar, name='Apple') # self.menubar.add_cascade(menu=self.menu_Apple) self.menu_file = Menu(self.menubar) self.menubar.add_cascade(menu=self.menu_file, label='File') self.menu_program = Menu(self.menubar) self.menubar.add_cascade(menu=self.menu_program, label='Program') self.menu_help = Menu(self.menubar) self.menubar.add_cascade(menu=self.menu_help, label='Help') # self.menu_Apple.add_command(label='Test', command=self.cmd_dummy) # self.menu_file.add_command(label='New', command=self.cmd_dummy, accelerator="Command-N") self.menu_file.add_command(label='Open...', command=self.cmd_open_file, accelerator="Command-O") self.root.bind('<Command-o>', self.cmd_open_file) # self.menu_file.add_command(label='Close', command=self.cmd_dummy) self.menu_program.add_command(label='Run', command=self.cmd_run, accelerator="R") self.root.bind('<r>', self.cmd_run) self.menu_program.add_command(label='Step', command=self.cmd_step, accelerator="S") self.root.bind('<s>', self.cmd_step) self.menu_program.add_command(label='Next', command=self.cmd_next, accelerator="N") self.root.bind('<n>', self.cmd_next) self.menu_program.add_command(label='Return', command=self.cmd_return, accelerator="BackSpace") self.root.bind('<BackSpace>', self.cmd_return) self.menu_help.add_command(label='Open Documentation', command=self.cmd_bugjar_docs) self.menu_help.add_command(label='Open Bugjar project page', command=self.cmd_bugjar_page) self.menu_help.add_command(label='Open Bugjar on GitHub', command=self.cmd_bugjar_github) self.menu_help.add_command(label='Open BeeWare project page', command=self.cmd_beeware_page) # last step - configure the menubar self.root['menu'] = self.menubar def _setup_button_toolbar(self): ''' The button toolbar runs as a horizontal area at the top of the GUI. It is a persistent GUI component ''' # Main toolbar self.toolbar = Frame(self.root) self.toolbar.grid(column=0, row=0, sticky=(W, E)) # Buttons on the toolbar self.run_button = Button(self.toolbar, text='Run', command=self.cmd_run) self.run_button.grid(column=0, row=0) self.step_button = Button(self.toolbar, text='Step', command=self.cmd_step) self.step_button.grid(column=1, row=0) self.next_button = Button(self.toolbar, text='Next', command=self.cmd_next) self.next_button.grid(column=2, row=0) self.return_button = Button(self.toolbar, text='Return', command=self.cmd_return) self.return_button.grid(column=3, row=0) self.toolbar.columnconfigure(0, weight=0) self.toolbar.rowconfigure(0, weight=0) def _setup_main_content(self): ''' Sets up the main content area. It is a persistent GUI component ''' # Main content area self.content = PanedWindow(self.root, orient=HORIZONTAL) self.content.grid(column=0, row=1, sticky=(N, S, E, W)) # Create subregions of the content self._setup_file_lists() self._setup_code_area() self._setup_inspector() # Set up weights for the left frame's content self.content.columnconfigure(0, weight=1) self.content.rowconfigure(0, weight=1) self.content.pane(0, weight=1) self.content.pane(1, weight=2) self.content.pane(2, weight=1) def _setup_file_lists(self): self.file_notebook = Notebook(self.content, padding=(0, 5, 0, 5)) self.content.add(self.file_notebook) self._setup_stack_frame_list() self._setup_breakpoint_list() def _setup_stack_frame_list(self): self.stack_frame = Frame(self.content) self.stack_frame.grid(column=0, row=0, sticky=(N, S, E, W)) self.file_notebook.add(self.stack_frame, text='Stack') self.stack = StackView(self.stack_frame, normalizer=self.filename_normalizer) self.stack.grid(column=0, row=0, sticky=(N, S, E, W)) # # The tree's vertical scrollbar self.stack_scrollbar = Scrollbar(self.stack_frame, orient=VERTICAL) self.stack_scrollbar.grid(column=1, row=0, sticky=(N, S)) # # Tie the scrollbar to the text views, and the text views # # to each other. self.stack.config(yscrollcommand=self.stack_scrollbar.set) self.stack_scrollbar.config(command=self.stack.yview) # Setup weights for the "stack" tree self.stack_frame.columnconfigure(0, weight=1) self.stack_frame.columnconfigure(1, weight=0) self.stack_frame.rowconfigure(0, weight=1) # Handlers for GUI events self.stack.bind('<<TreeviewSelect>>', self.on_stack_frame_selected) def _setup_breakpoint_list(self): self.breakpoints_frame = Frame(self.content) self.breakpoints_frame.grid(column=0, row=0, sticky=(N, S, E, W)) self.file_notebook.add(self.breakpoints_frame, text='Breakpoints') self.breakpoints = BreakpointView(self.breakpoints_frame, normalizer=self.filename_normalizer) self.breakpoints.grid(column=0, row=0, sticky=(N, S, E, W)) # The tree's vertical scrollbar self.breakpoints_scrollbar = Scrollbar(self.breakpoints_frame, orient=VERTICAL) self.breakpoints_scrollbar.grid(column=1, row=0, sticky=(N, S)) # Tie the scrollbar to the text views, and the text views # to each other. self.breakpoints.config(yscrollcommand=self.breakpoints_scrollbar.set) self.breakpoints_scrollbar.config(command=self.breakpoints.yview) # Setup weights for the "breakpoint list" tree self.breakpoints_frame.columnconfigure(0, weight=1) self.breakpoints_frame.columnconfigure(1, weight=0) self.breakpoints_frame.rowconfigure(0, weight=1) # Handlers for GUI events self.breakpoints.tag_bind('breakpoint', '<Double-Button-1>', self.on_breakpoint_double_clicked) self.breakpoints.tag_bind('breakpoint', '<<TreeviewSelect>>', self.on_breakpoint_selected) self.breakpoints.tag_bind('file', '<<TreeviewSelect>>', self.on_breakpoint_file_selected) def _setup_code_area(self): self.code_frame = Frame(self.content) self.code_frame.grid(column=1, row=0, sticky=(N, S, E, W)) # Label for current file self.current_file = StringVar() self.current_file_label = Label(self.code_frame, textvariable=self.current_file) self.current_file_label.grid(column=0, row=0, sticky=(W, E)) # Code display area self.code = DebuggerCode(self.code_frame, debugger=self.debugger) self.code.grid(column=0, row=1, sticky=(N, S, E, W)) # Set up weights for the code frame's content self.code_frame.columnconfigure(0, weight=1) self.code_frame.rowconfigure(0, weight=0) self.code_frame.rowconfigure(1, weight=1) self.content.add(self.code_frame) def _setup_inspector(self): self.inspector_frame = Frame(self.content) self.inspector_frame.grid(column=2, row=0, sticky=(N, S, E, W)) self.inspector = InspectorView(self.inspector_frame) self.inspector.grid(column=0, row=0, sticky=(N, S, E, W)) # The tree's vertical scrollbar self.inspector_scrollbar = Scrollbar(self.inspector_frame, orient=VERTICAL) self.inspector_scrollbar.grid(column=1, row=0, sticky=(N, S)) # Tie the scrollbar to the text views, and the text views # to each other. self.inspector.config(yscrollcommand=self.inspector_scrollbar.set) self.inspector_scrollbar.config(command=self.inspector.yview) # Setup weights for the "breakpoint list" tree self.inspector_frame.columnconfigure(0, weight=1) self.inspector_frame.columnconfigure(1, weight=0) self.inspector_frame.rowconfigure(0, weight=1) self.content.add(self.inspector_frame) def _setup_status_bar(self): # Status bar self.statusbar = Frame(self.root) self.statusbar.grid(column=0, row=2, sticky=(W, E)) # Current status self.run_status = StringVar() self.run_status_label = Label(self.statusbar, textvariable=self.run_status) self.run_status_label.grid(column=0, row=0, sticky=(W, E)) self.run_status.set('Not running') # Main window resize handle self.grip = Sizegrip(self.statusbar) self.grip.grid(column=1, row=0, sticky=(S, E)) # Set up weights for status bar frame self.statusbar.columnconfigure(0, weight=1) self.statusbar.columnconfigure(1, weight=0) self.statusbar.rowconfigure(0, weight=0) ###################################################### # Utility methods for controlling content ###################################################### def show_file(self, filename, line=None, breakpoints=None): """Show the content of the nominated file. If specified, line is the current line number to highlight. If the line isn't currently visible, the window will be scrolled until it is. breakpoints is a list of line numbers that have current breakpoints. If refresh is true, the file will be reloaded and redrawn. """ # Set the filename label for the current file self.current_file.set(self.filename_normalizer(filename)) # Update the code view; this means changing the displayed file # if necessary, and updating the current line. if filename != self.code.filename: self.code.filename = filename for bp in self.debugger.breakpoints(filename).values(): if bp.enabled: self.code.enable_breakpoint(bp.line) else: self.code.disable_breakpoint(bp.line) self.code.line = line ###################################################### # TK Main loop ###################################################### def mainloop(self): self.root.mainloop() ###################################################### # TK Command handlers ###################################################### def cmd_quit(self): "Quit the debugger" self.debugger.stop() self.root.quit() def cmd_run(self, event=None): "Run until the next breakpoint, or end of execution" self.debugger.do_run() def cmd_step(self, event=None): "Step into the next line of code" self.debugger.do_step() def cmd_next(self, event=None): "Run the next line of code in the current frame" self.debugger.do_next() def cmd_return(self, event=None): "Return to the previous frame" self.debugger.do_return() def cmd_open_file(self, event=None): "Open a file in the breakpoint pane" filename = tkFileDialog.askopenfilename( initialdir=os.path.abspath(os.getcwd())) if filename: # Convert to canonical form filename = os.path.abspath(filename) filename = os.path.normcase(filename) # Show the file contents self.code.filename = filename # Ensure the file appears on the breakpoint list self.breakpoints.insert_filename(filename) # Show the breakpoint panel self.file_notebook.select(self.breakpoints_frame) # ... select the new filename self.breakpoints.selection_set(filename) # .. and clear any currently selected item on the stack tree self.stack.selection_remove(self.stack.selection()) def cmd_bugjar_page(self): "Show the Bugjar project page" webbrowser.open_new('http://pybee.org/bugjar') def cmd_bugjar_github(self): "Show the Bugjar GitHub repo" webbrowser.open_new('http://github.com/pybee/bugjar') def cmd_bugjar_docs(self): "Show the Bugjar documentation" # If this is a formal release, show the docs for that # version. otherwise, just show the head docs. if len(NUM_VERSION) == 3: webbrowser.open_new('http://bugjar.readthedocs.org/en/v%s/' % VERSION) else: webbrowser.open_new('http://bugjar.readthedocs.org/') def cmd_beeware_page(self): "Show the BeeWare project page" webbrowser.open_new('http://pybee.org/') ###################################################### # Handlers for GUI actions ###################################################### def on_stack_frame_selected(self, event): "When a stack frame is selected, highlight the file and line" if event.widget.selection(): _, index = event.widget.selection()[0].split(':') line, frame = self.debugger.stack[int(index)] # Display the file in the code view self.show_file(filename=frame['filename'], line=line) # Display the contents of the selected frame in the inspector self.inspector.show_frame(frame) # Clear any currently selected item on the breakpoint tree self.breakpoints.selection_remove(self.breakpoints.selection()) def on_breakpoint_selected(self, event): "When a breakpoint on the tree has been selected, show the breakpoint" if event.widget.selection(): parts = event.widget.focus().split(':') bp = self.debugger.breakpoint((parts[0], int(parts[1]))) self.show_file(filename=bp.filename, line=bp.line) # Clear any currently selected item on the stack tree self.stack.selection_remove(self.stack.selection()) def on_breakpoint_file_selected(self, event): "When a file is selected on the breakpoint tree, show the file" if event.widget.selection(): filename = event.widget.focus() self.show_file(filename=filename) # Clear any currently selected item on the stack tree self.stack.selection_remove(self.stack.selection()) def on_breakpoint_double_clicked(self, event): "When a breakpoint on the tree is double clicked, toggle it's status" if event.widget.selection(): parts = event.widget.focus().split(':') bp = self.debugger.breakpoint((parts[0], int(parts[1]))) if bp.enabled: self.debugger.disable_breakpoint(bp) else: self.debugger.enable_breakpoint(bp) # Clear any currently selected item on the stack tree self.stack.selection_remove(self.stack.selection()) ###################################################### # Handlers for debugger responses ###################################################### def on_stack(self, stack): "A report of a new stack" # Make sure the stack frame list is displayed self.file_notebook.select(self.stack_frame) # Update the stack list self.stack.update_stack(stack) if len(stack) > 0: # Update the display of the current file line = stack[-1][0] filename = stack[-1][1]['filename'] self.show_file(filename=filename, line=line) # Select the current stack frame in the frame list self.stack.selection_set('frame:%s' % (len(stack) - 1)) else: # No current frame (probably end of execution), # so clear the current line marker self.code.line = None def on_line(self, filename, line): "A single line of code has been executed" self.run_status.set('Line (%s:%s)' % (filename, line)) def on_call(self, args): "A callable has been invoked" self.run_status.set('Call: %s' % args) def on_return(self, retval): "A callable has returned" self.run_status.set('Return: %s' % retval) def on_exception(self, name, value): "An exception has been raised" self.run_status.set('Exception: %s - %s' % (name, value)) tkMessageBox.showwarning(message='%s: %s' % (name, value)) def on_postmortem(self): "An exception has been raised" self.run_status.set('Post mortem mode') tkMessageBox.showerror( message='Entering post mortem mode. Step/Next will restart') def on_restart(self): "The code has finished running, and will start again" self.run_status.set('Not running') tkMessageBox.showinfo( message='Program has finished, and will restart.') def on_info(self, message): "The debugger needs to inform the user of something" tkMessageBox.showinfo(message=message) def on_warning(self, message): "The debugger needs to warn the user of something" tkMessageBox.showwarning(message=message) def on_error(self, message): "The debugger needs to report an error" tkMessageBox.showerror(message=message) def on_breakpoint_enable(self, bp): "A breakpoint has been enabled in the debugger" # If the breakpoint is in the currently displayed file, updated # the display of the breakpoint. if bp.filename == self.code.filename: self.code.enable_breakpoint(bp.line, temporary=bp.temporary) # ... then update the display of the breakpoint on the tree self.breakpoints.update_breakpoint(bp) def on_breakpoint_disable(self, bp): "A breakpoint has been disabled in the debugger" # If the breakpoint is in the currently displayed file, updated # the display of the breakpoint. if bp.filename == self.code.filename: self.code.disable_breakpoint(bp.line) # ... then update the display of the breakpoint on the tree self.breakpoints.update_breakpoint(bp) def on_breakpoint_ignore(self, bp, count): "A breakpoint has been ignored by the debugger" # If the breakpoint is in the currently displayed file, updated # the display of the breakpoint. if bp.filename == self.code.filename: self.code.ignore_breakpoint(bp.line) # ... then update the display of the breakpoint on the tree self.breakpoints.update_breakpoint(bp) def on_breakpoint_clear(self, bp): "A breakpoint has been cleared in the debugger" # If the breakpoint is in the currently displayed file, updated # the display of the breakpoint. if bp.filename == self.code.filename: self.code.clear_breakpoint(bp.line) # ... then update the display of the breakpoint on the tree self.breakpoints.update_breakpoint(bp)
class MainApplication(Tk): def __init__(self, network_discoverer): Tk.__init__(self) self.winfo_toplevel().title("fHTTP") self.title_font = tkfont.Font(family='Helvetica', size=14, weight='bold', slant='italic') self.h2_font = tkfont.Font(family='Helvetica', size=12, weight='bold') self.h3_font = tkfont.Font(family='Helvetica', size=11, weight='bold') self.network_discoverer = network_discoverer self.own_mac_address = network_discoverer.get_own_mac_address() self.own_ip_address = network_discoverer.get_own_ip_address() self.ip_to_mac = None self.ip_to_mac_record = None self.configure(background='darkgrey') self.is_spoofing = self.is_extracting = self.is_filtering = False self.verbose_mode = False # verbose mode on/off for output frame self.victims = None self.target = None width = int(self.winfo_screenwidth() * 0.5) height = int(self.winfo_screenheight() * 0.8) x_start = int(self.winfo_screenwidth() * 0.25) y_start = int(self.winfo_screenheight() * 0.1) self.geometry('%dx%d+%d+%d' % (width, height, x_start, y_start)) self.resizable(0, 0) # do not feel like dealing with resizable frames self.conf_menu_bar() # configure menu-bar img_icon = PhotoImage(file=media_dir + os.path.sep + 'fhttp_logo.ico') self.tk.call('wm', 'iconphoto', self._w, img_icon) for row in range(0, 100): self.rowconfigure(row, weight=1) self.columnconfigure(row, weight=1) # notebook configuration (tabs) style = Style() style.theme_settings( "default", { "TNotebook": { "configure": { "tabmargins": [0, 0, 0, 0] } }, "TNotebook.Tab": { "configure": { "padding": [8, 1, 8, 1] } } }) self.notebook = Notebook(self) self.notebook.grid(row=1, column=0, columnspan=100, rowspan=10, sticky='nesw', padx=5) # output frame configuration self.output = OutputFrame(parent=self) self.output.grid(row=13, column=0, columnspan=100, rowspan=85, sticky='nesw', padx=5) # notebook frames self.tabs = {} self.tab_mapping = OrderedDict([ (StartFrame, 'Start'), (LocalNetworkScanFrame, 'Local Network Scan'), (ARPSpoofFrame, 'ARP Spoofing'), (InjectorExtractorFrame, 'Injection and Extraction') ]) for tab in self.tab_mapping.keys(): tab_frame_name = self.tab_mapping[tab] frame = tab(parent=self.notebook, controller=self) self.notebook.add(frame, text=tab_frame_name) self.tabs[tab.__name__] = frame self.notebook.tab(self.notebook.index( self.tabs['InjectorExtractorFrame']), state=DISABLED) self.notebook.tab(self.notebook.index(self.tabs['ARPSpoofFrame']), state=DISABLED) tkMessageBox.showinfo( "fHTTP", "\n\n\nWelcome to fhttp\n\n" "We inherently trust no one, including each other\n\n\n".ljust( 500)) def conf_menu_bar(self): menu_bar = Menu(self) # help menu help_menu = Menu(menu_bar, tearoff=0) help_menu.add_command(label='About', command=self.display_about) help_menu.add_command(label='Support and Documentation', command=self.display_support_doc) # help_menu.add_separator() menu_bar.add_cascade(label='Help', menu=help_menu) menu_bar.add_command(label='Exit', command=self.quit) self.config(menu=menu_bar) def clean_output_and_attack_frame(self): self.output = OutputFrame(parent=self) self.output.grid(row=13, column=0, columnspan=100, rowspan=85, sticky='nesw', padx=5) @staticmethod def display_about(): tkMessageBox.showinfo( "About", "fhttp is an application which is capable of exploiting vulnerabilities " "such as ARP cache poisoning. The (man-in-the-middle) positions that are acquired " "through the exploitation of these vulnerabilities are then used for things such as " "packet-sniffing, the `theft' of (insecure) cookies and img-tag-injection\n\n" "Abdel K. Bokharouss and Adriaan Knapen \n") @staticmethod def display_support_doc(): webbrowser.open('https://github.com/akbokha/fhttp') def show_frame(self, page_name, select=True, update=False): frame = self.tabs[page_name] if update: try: frame.update() except AttributeError: pass if select: self.notebook.select(self.notebook.index(frame)) def scan_and_update(self): self.ip_to_mac_record = self.network_discoverer.get_ip_to_mac_mapping( update=True) self.ip_to_mac = self.ip_to_mac_record.get_all()
def initUI(self): self.parent.title('Tomosaic') # ====================================================== # menubar menuFrame = Frame(self.parent) menubar = Menu(menuFrame) self.parent.config(menu=menubar) fileFenu = Menu(menubar) fileFenu.add_command(label='Save parameters...', command=self.saveAllAttr) fileFenu.add_command(label='Load parameters...', command=self.loadAllAttr) fileFenu.add_command(label='Exit', command=self.onExit) menubar.add_cascade(label='File', menu=fileFenu) # ======================================================d # tabs tabFrame = Frame(root) tabs = Notebook(tabFrame) self.tabMeta = Frame(tabs) self.tabRegi = Frame(tabs) self.tabMerg = Frame(tabs) self.tabPhas = Frame(tabs) self.tabCent = Frame(tabs) self.tabReco = Frame(tabs) tabs.add(self.tabMeta, text='Metadata') tabs.add(self.tabRegi, text='Registration') tabs.add(self.tabMerg, text='Merging') tabs.add(self.tabPhas, text='Phase') tabs.add(self.tabCent, text='Center optimization') tabs.add(self.tabReco, text='Reconstruction') metatab_ui(self) regitab_ui(self) mergtab_ui(self) phastab_ui(self) centtab_ui(self) recotab_ui(self) tabFrame.pack() tabs.pack()
def __init__(self, master): self.fname = "" self.t1 = StringVar() self.t2 = StringVar() self.t3 = StringVar() self.t4 = StringVar() self.var1 = StringVar() self.var2 = StringVar() self.var3 = StringVar() self.var4 = StringVar() mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=550, height=350) #end #title of window master.title("Airserv-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont = tkFont.Font(family="Helvetica", size=15, underline=True) self.myfontnew = tkFont.Font(family="Helvetica", size=11, underline=True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb, name="frame_content", bg="white") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook # repeat for each tab self.frame_content7 = Frame(nb, name='frame_content7', bg="white") nb.add(self.frame_content7, text="Detect Devices") self.frame_content5 = Frame(nb, name='frame_content5', bg="white") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text='Aigraph-ng', font=self.headerfont, bg="white", padx=10, pady=10).grid(row=0, column=0) btndetect = Button(self.frame_content7, text='Detect', command=self.canvas_detect, height=2, width=15, font=self.customFont).grid(row=1, column=0, padx=5, pady=5) btndbrowse = Button(self.frame_content7, text='Attach File', command=self.browse_file, height=2, width=15, font=self.customFont).grid(row=3, column=0, padx=5, pady=5) self.lilnew1 = Listbox(self.frame_content7, bg="black", fg="white", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row=1, column=1, rowspan=3) #End Label(self.frame_content, text='Airserv-ng', font=self.headerfont, bg="white", padx=10, pady=10).grid(row=0, column=0) Label(self.frame_content, text='Options :', font=self.myfontnew, bg="white").grid(row=1, column=1) #Button(self.frame_content, text = 'ivs', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 0, padx = 5, pady = 5) #Button(self.frame_content, text = 'gpsd', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 1, padx = 5, pady = 5) #Button(self.frame_content, text = 'write', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 2, padx = 5, pady = 5) #command Listbox Label(self.frame_content5, text='Edit Command From Here', font=self.myfontnew, bg="white", justify=LEFT).grid(row=0, column=0) TextCommandBox = Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output = Text(self.frame_content5, bg="black", fg="white", font=self.myfont, height=15, width=30) self.output.grid(row=0, column=1, padx=50, pady=5, rowspan=3) btnsubmit = Button(self.frame_content5, width=15, height=2, text="Get Result", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear = Button(self.frame_content5, width=15, height=2, text="Clear Output", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "-p", \ onvalue="-p",offvalue="", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var1) self.C1.grid(row=2, column=0, padx=5, pady=5) self.t1 = Text(self.frame_content, height=1, width=20) self.t1.grid(row=2, column=1, padx=5, pady=5) l1 = Label(self.frame_content, text=': TCP port to listen on. Defaults to 666.', font=self.myfont, bg="white", justify=LEFT).grid(row=2, column=2, padx=5, pady=5) self.C2 = Checkbutton(self.frame_content, text = "-d", \ onvalue = "-d", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var2) self.C2.grid(row=3, column=0, padx=5, pady=5) self.t2 = Text(self.frame_content, height=1, width=20) self.t2.grid(row=3, column=1, padx=5, pady=5) l2 = Label(self.frame_content, text=': wifi device to serve.', font=self.myfont, bg="white", justify=LEFT).grid(row=3, column=2, padx=5, pady=5) self.C3 = Checkbutton(self.frame_content, text = "-c", \ onvalue = "-c", offvalue ="", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var3) self.C3.grid(row=4, column=0, padx=5, pady=5) self.t3 = Text(self.frame_content, height=1, width=20) self.t3.grid(row=4, column=1, padx=5, pady=5) l3 = Label(self.frame_content, text=': Channel to start on.', font=self.myfont, bg="white", justify=LEFT).grid(row=4, column=2, padx=5, pady=5) self.C4 = Checkbutton(self.frame_content, text = "-v", \ onvalue = "-v", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var4) self.C4.grid(row=5, column=0, padx=5, pady=5) self.t4 = Text(self.frame_content, height=1, width=20) self.t4.grid(row=5, column=1, padx=5, pady=5) l4 = Label(self.frame_content, text=': debug level.', font=self.myfont, bg="white", justify=LEFT).grid(row=5, column=2, padx=5, pady=5)
class View(Toplevel): def __init__(self, model): self.model = model self.model_config = self.model.get_config() self.channels_num = 0 self.channels_amount = 0 self.root = Tk() self.root.resizable(width=FALSE, height=FALSE) self.root.title("RaaS. event_proxy configurator") #: self.root.iconbitmap('resourse/vit.ico') self.config_route = self.model.get_config_route() self.panelFrame = Frame(self.root, height=60) self.canvas = Canvas(self.root, borderwidth=0) self.textFrame = Frame(self.canvas, height=340, width=600) self.mainFrame = LabelFrame(self.root, width=200, text="Main:", height=340, relief=RAISED, borderwidth=1) self.chanelFrame = LabelFrame(self.root, width=370, text="Channels:", height=340, relief=RAISED, borderwidth=1) #: self.vsb = Scrollbar(self.root, orient="horizontal", #: command=self.canvas.xview) #:self.canvas.configure(xscrollcommand=self.vsb.set) #:self.vsb.pack(side="bottom", fill="x") self.canvas.pack(side="bottom", fill="both", expand=True) self.canvas.configure(scrollregion=self.canvas.bbox("all")) self.root.protocol("WM_DELETE_WINDOW", self.quit_handler) self.tabs = Notebook(self.root) self.in_channel_text = [] self.out_port_text = [] self.out_channel_text = [] self.c = self.model.get_channels().keys() self.channels_len = len(self.model.get_channels()) #:print self.model.get_channels() self.panelFrame.pack(side='top', fill='x') self.textFrame.pack(side='bottom', fill='both', expand=1) self.mainFrame.place(x=10, y=60) self.chanelFrame.place(x=220, y=60) self.tabs.place(x=230, y=80) x = (self.root.winfo_screenwidth() - self.root.winfo_reqwidth()) / 2 y = (self.root.winfo_screenheight() - self.root.winfo_reqheight()) / 2 self.root.geometry("+%d+%d" % (x-150, y-150)) for i in range(self.channels_len): self.channels_num += 1 self.channels_amount += 1 self.f1 = Frame(self.tabs, height=290, width=350) self.tabs.add(self.f1, text='Channel {0}'.format(i + 1)) self.in_channel = Label(self.f1, text="In channel") self.out_port = Label(self.f1, text="Out port") self.out_channel = Label(self.f1, text="Out channel") self.in_channel_text.append(Entry(self.f1, width=20, bd=3)) self.in_channel_text[i].insert(0, self.c[i]) self.out_port_text.append(Entry(self.f1, width=20, bd=3)) self.out_port_text[i].insert(0, self.model.get_channels()[ self.c[i]].out_port) self.out_channel_text.append(Entry(self.f1, width=20, bd=3)) self.out_channel_text[i].insert(0, self.model.get_channels()[ self.c[i]].out_channel) self.in_channel.place(x=5, y=10) self.in_channel_text[i].place(x=5, y=30) self.out_port.place(x=5, y=50) self.out_port_text[i].place(x=5, y=70) self.out_channel.place(x=5, y=90) self.out_channel_text[i].place(x=5, y=110) self.del_ch_btn = Button(self.f1, text='Delete channel {0}'.format( self.channels_amount), command= lambda: self.del_channel(i)) self.del_ch_btn.bind("<Button-1>") self.del_ch_btn.place(x=5, y=140, width=100, height=30) self.server_host_label = Label(self.root, text="Server host") self.server_port_label = Label(self.root, text="Server port") self.raas_port_label = Label(self.root, text="Raas port") self.encoding_label = Label(self.root, text='Encoding') self.levenshtein_distance_label = Label(self.root, text='Levenshtein distance') self.window_time_label = Label(self.root, text='Window time') self.server_host_entity = Entry(self.root, width=20, bd=3) self.server_host_entity.insert(0, self.model_config['server_host']) self.server_port_entity = Entry(self.root, width=20, bd=3) self.server_port_entity.insert(0, self.model_config['server_port']) self.raas_port_entity = Entry(self.root, width=20, bd=3) self.raas_port_entity.insert(0, self.model_config['raas_port']) self.encoding_entry = Entry(self.root, width=20, bd=3) self.encoding_entry.insert(0, self.model_config['encoding']) self.levenshtein_distance_entry = Entry(self.root, width=20, bd=3) self.levenshtein_distance_entry.insert(0, self.model_config[ 'levenshtein_distance']) self.window_time_entry = Entry(self.root, width=20, bd=3) self.window_time_entry.insert(0, self.model_config['window_time']) self.var = IntVar() self.cfg_debug = self.model_config['debug'] if self.cfg_debug == 'True': self.var.set(1) else: self.var.set(0) self.check_debug = Checkbutton(self.root, text='Debug', variable=self.var) self.filter_var = IntVar() self.cfg_use_filter = self.model_config['use_filter'] if self.cfg_use_filter == 'True': self.filter_var.set(1) else: self.filter_var.set(0) self.check_use_filter = Checkbutton(self.root, text='Use filter', variable=self.filter_var) self.addBtn = Button(self.panelFrame, text='Add channel') self.saveBtn = Button(self.panelFrame, text='Save') self.quitBtn = Button(self.panelFrame, text='Quit') self.saveBtn.bind("<Button-1>", self.SaveFile) self.quitBtn.bind("<Button-1>", self.Quit) self.addBtn.bind("<Button-1>", self.add_channel) self.saveBtn.place(x=10, y=10, width=40, height=40) self.quitBtn.place(x=60, y=10, width=40, height=40) self.addBtn.place(x=220, y=10, width=80, height=40) self.server_host_label.place(x=20, y=80) self.server_host_entity.place(x=20, y=100) self.server_port_label.place(x=20, y=120) self.server_port_entity.place(x=20, y=140) self.raas_port_label.place(x=20, y=160) self.raas_port_entity.place(x=20, y=180) self.encoding_label.place(x=20, y=200) self.encoding_entry.place(x=20, y=220) self.check_debug.place(x=20, y=250) self.f = Frame(self.root, height=1, width=190, bg='grey') self.f.place(x=15, y=275) self.levenshtein_distance_label.place(x=20, y=280) self.levenshtein_distance_entry.place(x=20, y=300) self.window_time_label.place(x=20, y=320) self.window_time_entry.place(x=20, y=340) self.check_use_filter.place(x=20, y=370) def del_channel(self, numb): rwidth = self.root.winfo_width() rheight = self.root.winfo_height() if self.channels_num > 6: self.chanelFrame.config(width=self.chanelFrame.winfo_width() - 65) self.root.geometry("%dx%d" % (rwidth - 65, rheight)) if self.channels_num == 6: self.chanelFrame.config(width=self.chanelFrame.winfo_width() - 20) self.root.geometry("%dx%d" % (rwidth - 20, rheight)) dvar = self.tabs.tabs().index(self.tabs.select()) self.in_channel_text.pop(dvar) self.out_channel_text.pop(dvar) self.out_port_text.pop(dvar) self.channels_num -= 1 self.tabs.forget(self.tabs.select()) tabs_list = self.tabs.tabs() self.root.update() def add_channel(self, env): if self.channels_num > 15: tkMessageBox.showerror('Error', 'You can not add more than 16 channels') return False rwidth = self.root.winfo_width() rheight = self.root.winfo_height() if self.channels_num == 5: self.chanelFrame.config(width=self.chanelFrame.winfo_width() + 20) self.root.geometry("%dx%d" % (rwidth + 20, rheight)) if self.channels_num > 5: self.chanelFrame.config(width=self.chanelFrame.winfo_width() + 65) self.root.geometry("%dx%d" % (rwidth + 65, rheight)) self.f1 = Frame(self.tabs, height=290, width=350) self.tabs.add(self.f1, text='Channel {0}'.format(self.channels_amount + 1)) self.in_channel = Label(self.f1, text="In channel") self.out_port = Label(self.f1, text="Out port") self.out_channel = Label(self.f1, text="Out channel") self.in_channel_text.append(Entry(self.f1, width=20, bd=3)) self.out_port_text.append(Entry(self.f1, width=20, bd=3)) self.out_channel_text.append(Entry(self.f1, width=20, bd=3)) self.in_channel.place(x=5, y=10) self.in_channel_text[self.channels_num].place(x=5, y=30) self.out_port.place(x=5, y=50) self.out_port_text[self.channels_num].place(x=5, y=70) self.out_channel.place(x=5, y=90) self.out_channel_text[self.channels_num].place(x=5, y=110) self.del_ch_btn = Button(self.f1, text='Delete channel {0}'.format( self.channels_num + 1), command= lambda: self.del_channel(self.channels_num)) self.del_ch_btn.bind("<Button-1>") self.del_ch_btn.place(x=5, y=140, width=100, height=30) self.channels_num += 1 self.channels_amount += 1 def Quit(self, env): if tkMessageBox.askyesno('Quit', 'Whant to save config before quit?'): self.SaveFile(env) self.root.destroy() def quit_handler(self): if tkMessageBox.askyesno('Quit', 'Whant to save config before quit?'): self.save_handler() self.root.destroy() def validate_int(self, var, text, channel): if not var.isdigit(): tkMessageBox.showerror("Error", "Error in {1}. Value of field '{0}' must be int.".format(text, channel)) return False return True def validate_empty(self, var, text): if not var: tkMessageBox.showerror("Error", "Field {0} must be not empty.".format(text)) return False return True def validate_channels(self): if not self.channels_num: tkMessageBox.showerror("Error", "You must add at least one channel") return False return True def validate_change_field(self): self.validating_config = self.model.get_updated_config() self.flag = False if self.server_host_entity.get() != str(self.validating_config['server_host']): self.flag = True if self.server_port_entity.get() != str(self.validating_config['server_port']): self.flag = True if self.raas_port_entity.get() != str(self.validating_config['raas_port']): self.flag = True if self.encoding_entry.get() != str(self.validating_config['encoding']): self.flag = True if str(self.levenshtein_distance_entry.get()) != str(self.validating_config['levenshtein_distance']): self.flag = True if str(self.window_time_entry.get()) != str(self.validating_config['window_time']): self.flag = True self.tmp = IntVar() if self.validating_config['debug'] == 'True': self.tmp.set(1) else: self.tmp.set(0) if self.tmp.get() != self.var.get(): self.flag = True self.tmp_filter = IntVar() if self.validating_config['use_filter'] == 'True': self.tmp_filter.set(1) else: self.tmp_filter.set(0) if self.tmp_filter.get() != self.filter_var.get(): self.flag = True #TODO: add validating of channels if self.channels_num != self.channels_amount or self.channels_len != self.channels_num: return True for i in range(self.channels_num): if self.in_channel_text[i].get() != str(self.c[i]): self.flag = True if self.out_port_text[i].get() != str(self.model.get_channels()[ self.c[i]].out_port): self.flag = True if self.out_channel_text[i].get() != str(self.model.get_channels()[ self.c[i]].out_channel): self.flag = True return self.flag def validate_all(self): #if not self.validate_change_field(): # return False if not self.validate_channels(): return False if not self.validate_empty(self.server_host_entity.get(), 'Server host'): return False if not self.validate_empty(self.encoding_entry.get(), 'Encoding'): return False if not self.validate_empty(self.levenshtein_distance_entry.get(), 'Levenshtein distance'): return False if not self.validate_int(self.server_port_entity.get(), 'Server port', ''): return False if not self.validate_int(self.raas_port_entity.get(), 'Raas port', ''): return False if not self.validate_int(self.levenshtein_distance_entry.get(), 'Levenshtein distance', ''): return False if not self.validate_int(self.window_time_entry.get(), 'Window time', ''): return False for i in range(self.channels_num): if not self.validate_int(self.in_channel_text[i].get(), 'In channel', ' Channel {0}'.format(i + 1)): return False if not self.validate_int(self.out_port_text[i].get(), 'Out port', ' Channel {0}'.format(i + 1)): return False if not self.validate_int(self.out_channel_text[i].get(), 'Out channel', ' Channel {0}'.format(i + 1)): return False return True def SaveFile(self, env): self.save_handler() def save_handler(self): if not self.validate_all(): return False config = ConfigParser.RawConfigParser() config.add_section('Main') config.set('Main', 'server_host', self.server_host_entity.get()) config.set('Main', 'server_port', self.server_port_entity.get()) config.set('Main', 'raas_port', self.raas_port_entity.get()) result = 'False' if self.var.get(): result = 'True' config.set('Main', 'debug', result) config.set('Main', 'encoding', self.encoding_entry.get()) config.set('Main', 'levenshtein_distance', self.levenshtein_distance_entry.get()) config.set('Main', 'window_time', self.window_time_entry.get()) result_filter = 'False' if self.filter_var.get(): result_filter = 'True' config.set('Main', 'use_filter', result_filter) for i in range(self.channels_num): config.add_section('Channel{0}'.format(i + 1)) config.set('Channel{0}'.format(i + 1), 'in_channel', self.in_channel_text[i].get()) config.set('Channel{0}'.format(i + 1), 'out_port', self.out_port_text[i].get()) config.set('Channel{0}'.format(i + 1), 'out_channel', self.out_channel_text[i].get()) with open(self.config_route, 'wb') as configfile: config.write(configfile) tkMessageBox.showinfo("Info", "Successfully saved.") def run(self): self.root.mainloop()
def build_credits(self): if getattr(self, "home", False): self.home.pack_forget() if getattr(self, "license", False): self.license.pack_forget() self.credits = Frame(self.parent) self.credits.pack(expand=True, fill=BOTH) Label(self.credits, text="Credits", **self.style_text).pack(side=TOP, expand=True, fill=X) style = Style() style.configure("BW.TNotebook", background=self.parent.cget("bg"), borderwidth=1, relief=SUNKEN, highlightthickness=1) notebook = Notebook(self.credits, style="BW.TNotebook") write = ( "Jean-Pierre Mandon", "Régis Blanchot", "Marcus Fazzi", "Jesus Carmona Esteban", "Alfred Broda", "Yeison Cardona", "Henk Van Beek", "Björn Pfeiffer", "Alexis Sánchez", ) label_write = Label(self.credits, text="\n\n".join(write)) label_write.pack(side=TOP, expand=True, fill=BOTH) notebook.add(label_write, text="Write by") doc = ( "Benoit Espinola", "Sebastien Koechlin", "Ivan Ricondo", "Jesus Carmona Esteban", "Marcus Fazzi", "Régis Blanchot", ) label_doc = Label(self.credits, text="\n\n".join(doc)) label_doc.pack(side=TOP, expand=True, fill=BOTH) notebook.add(label_doc, text="Documented by") trans = ( "Joan Espinoza", "Alexis Sánchez", "Régis Blanchot", "Moreno Manzini", "Yeison Cardona", "\"Avrin\"", ) label_trans = Label(self.credits, text="\n\n".join(trans)) label_trans.pack(side=TOP, expand=True, fill=BOTH) notebook.add(label_trans, text="Translated by") art = ( "France Cadet", "Laurent Cos--tes", "Daniel Rodriguez", ) label_art = Label(self.credits, text="\n\n".join(art)) label_art.pack(side=TOP, expand=True, fill=BOTH) notebook.add(label_art, text="Art by") notebook.pack(side=TOP, fill=BOTH, expand=True) self.panel_buttons = Frame(self.credits) self.panel_buttons.pack(side=BOTTOM, fill=BOTH, expand=True) Button(self.panel_buttons, text="Close", command=self.quit).pack(side=RIGHT, fill=X, expand=True) Button(self.panel_buttons, text="License", command=self.build_license).pack(side=LEFT, fill=X, expand=True)
class GoalTrak(Tk): def __init__(self,parent): Tk.__init__(self,parent) self.parent = parent self.initialize() def initialize(self): self.grid() self.entryVariable = StringVar() #Student entry box self.entry = Entry(self,textvariable=self.entryVariable) self.entry.grid(column=0,row=1,sticky='EW') self.entry.bind("<Return>", self.onPressEnter) self.entryVariable.set(u"Enter new student here") #Simple buttons# self.quitButton = Button(self,text=u"Quit", command=self.onQuitClick) #Quit button self.quitButton.grid(row = 14, sticky='SE') self.removeButton = Button(self, text=u"Remove student", command=self.onRemoveClick) #Remove student button self.removeButton.grid(column=0,row=6, sticky = 'W') self.optionMenu = Button(self, text=u"About", command=self.onAboutClick) #About button self.optionMenu.grid(row = 13, sticky='SE') self.infoUpdate = Button(self, text=u"Update Student Info", command=self.onInfoUpdateClick) #Info updater self.infoUpdate.grid(column=0, row=4, sticky = 'W') self.showInformation = Button(self, text = u"Show Information", command=self.onShowInformationClick) self.showInformation.grid(column=0, row=5, sticky = 'W') self.labelVariable = StringVar() #Banner self.labelVariable.set(u"Welcome to GoalTrak") label = Label(self,textvariable=self.labelVariable, \ anchor="w",fg="white",bg="navy") label.grid(column=0,row=0,sticky='EW') self.StudentListDisplay = Listbox(self) #Student List self.StudentListDisplay.grid(row=2,column=0,columnspan=2,sticky='W') for student in student_list: self.StudentListDisplay.insert(END, student) self.tab = Notebook(width=200, height=200) #Notebook self.tab.pressed_index = None ###Notebook### self.studentInfoDisplayFrame = Frame(self.tab) ####Info display tab### self.studentNameLabelVar = StringVar() #Student name label self.studentNameLabelVar.set('Click "show information"') studentNameLabel = Label(self.studentInfoDisplayFrame, textvariable=self.studentNameLabelVar, fg='black', bg='white') studentNameLabel.grid(column=0,row=0,sticky='NW') self.studentClassLabelVar = StringVar() #Student class label self.studentClassLabelVar.set('') studentClassLabel = Label(self.studentInfoDisplayFrame, textvariable=self.studentClassLabelVar, fg='black', bg='white') studentClassLabel.grid(column=0,row=1,sticky='W') self.studentGoal1LabelVar = StringVar() #Student goal1 label self.studentGoal1LabelVar.set('') studentGoal1Label = Label(self.studentInfoDisplayFrame, textvariable=self.studentGoal1LabelVar, fg='black', bg='white') studentGoal1Label.grid(column=0,row=2,sticky='W') otherWidget = Canvas(self.tab, width=300, height=300) #Empty widget for fun! self.tab.add(self.studentInfoDisplayFrame, text='Student Info') #Labels tabs self.tab.add(otherWidget, text='Other Widget') self.tab.grid(column = 0, row = 7, rowspan = 5, sticky = 'EW') self.grid_columnconfigure(0,weight=1) #This makes it so the window is resizable self.resizable(True,True) self.update() self.geometry(self.geometry()) self.entry.focus_set() self.entry.selection_range(0, END) def onAboutClick(self): #About message tkMessageBox.showinfo(title=u'About', message=u'GoalTrak v. Alpha V by Eli Dinkelspiel') def student_list_updater(self, studentlist): self.StudentListDisplay.delete(0, END) for student in studentlist: self.StudentListDisplay.insert(END, student)#Refreshes student listbox def onQuitClick(self): result = tkMessageBox.askokcancel(title='GoalTrak', message='Are you sure you want to quit GoalTrak?') if result == True: GoalTrak.destroy(self) #Quit button def onRemoveClick(self): index = self.StudentListDisplay.curselection() index = int(index[0]) result = tkMessageBox.askokcancel(title='Are you sure?', \ message='Are you sure you want to remove %s? This cannot be undone and will remove all associated data.' \ % (student_list[index])) if result == True: del student_list[index] self.student_list_updater(student_list) file_saver(student_list, 'GoalTrak/StudentList')#Remove student button def onPressEnter(self, event): #Enters students into save file hold = self.entryVariable.get() hold = str(hold) with open('GoalTrak/StudentList', 'rb') as file: #This appends students to the already existing document of students if (hold) not in student_list: student_list.append(hold) file_saver(student_list, 'GoalTrak/StudentList') self.labelVariable.set(self.entryVariable.get() + " added" ) self.student_list_updater(student_list) else: #If student is already in list, aborts self.labelVariable.set( self.entryVariable.get() + " is already in list" ) file.close() self.entry.focus_set() self.entry.selection_range(0, END)#Add student with <enter> def onShowInformationClick(self): #Refreshes student information display studentNameVar = student_list[int(self.StudentListDisplay.curselection()[0])] self.studentNameLabelVar.set(studentNameVar) current_student = file_loader('GoalTrak/StudentInformation' + studentNameVar) #Each one of these try/except pairs makes the various User() attributes visible, if they exist. DO NOT BUNDLE AS ONE try: self.studentClassLabelVar.set(current_student.usrClass) except (AttributeError): self.studentClassLabelVar.set(u'No set class') try: self.studentGoal1LabelVar.set(current_student.goals['goal1']) except (AttributeError): self.studentGoal1LabelVar.set(u'Goal 1 not set') def onInfoUpdateClick(self): #User Information Updater index = self.StudentListDisplay.curselection() index = int(index[0]) student_name = student_list[index] def onSaveQuitClick(): #Stores the data classHold = str(self.UserInformationUpdater.classEntry.get()) goal1Hold = str(self.UserInformationUpdater.goal1Entry.get()) current_student = file_loader('GoalTrak/StudentInformation' + student_name) for student in student_information: #I probably want to get rid of this for loop but I'm afraid to tinker with my code :( if student == student_name: try: current_student.usrClass = classHold current_student.goals['goal1'] = goal1Hold file_saver(current_student, 'GoalTrak/StudentInformation' + student_name) except (AttributeError): print 'New file being created' file_saver(User(student_name, classHold, {'goal1':goal1Hold}), 'GoalTrak/StudentInformation' + student_name) current_student = file_loader('GoalTrak/StudentInformation' + student_name) self.UserInformationUpdater.destroy() try: #Gives new students a file object current_student = file_loader('GoalTrak/StudentInformation' + student_name) except (IOError): file_saver('GoalTrak/StudentInformation' + student_name) self.UserInformationUpdater = Toplevel() self.UserInformationUpdater.grid() self.UserInformationUpdater.title("Update Information - %s" % (student_name)) self.UserInformationUpdater.infolabel = Label(self.UserInformationUpdater, \ text = (u"User Information - %s" % (student_name)), anchor="w", fg="white", bg="navy") self.UserInformationUpdater.infolabel.grid(column=0,row=0,columnspan=2,sticky='EW') #Visual stuff for the updater self.UserInformationUpdater.classVar = StringVar() self.UserInformationUpdater.classEntry = Entry(self.UserInformationUpdater, textvariable=self.UserInformationUpdater.classVar) self.UserInformationUpdater.classEntry.grid(column=0,row=1,sticky='EW') try: self.UserInformationUpdater.classVar.set(str(current_student.usrClass)) except (AttributeError): self.UserInformationUpdater.classVar.set(u"Enter student's class here") self.UserInformationUpdater.goal1Var = StringVar() self.UserInformationUpdater.goal1Entry = Entry(self.UserInformationUpdater, textvariable=self.UserInformationUpdater.goal1Var) self.UserInformationUpdater.goal1Entry.grid(column=0,row=2,sticky='EW') try: self.UserInformationUpdater.goal1Var.set(str(current_student.goals['goal1'])) except (AttributeError): self.UserInformationUpdater.goal1Var.set(u"Enter goal 1 here:") self.UIU_quitButton = Button(self.UserInformationUpdater, text=u"Save and Quit", command=onSaveQuitClick) #Save & Quit button self.UIU_quitButton.grid(column=1, row=2) self.UserInformationUpdater.grid_columnconfigure(0,weight=1) #This makes it so the window is resizable self.UserInformationUpdater.resizable(True,True) self.UserInformationUpdater.update() self.UserInformationUpdater.geometry(self.UserInformationUpdater.geometry())
def __init__(self, master): self.fname="" self.t1=StringVar() self.t2=StringVar() self.t3=StringVar() self.t4=StringVar() self.var1=StringVar() self.var2=StringVar() self.var3=StringVar() self.var4=StringVar() mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=550, height=350) #end #title of window master.title("Airserv-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont=tkFont.Font(family="Helvetica", size=15,underline = True) self.myfontnew=tkFont.Font(family="Helvetica", size=11,underline = True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb,name="frame_content", bg="white") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook # repeat for each tab self.frame_content7 = Frame(nb, name='frame_content7', bg="white") nb.add(self.frame_content7, text="Detect Devices") self.frame_content5 = Frame(nb, name='frame_content5', bg="white") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text = 'Aigraph-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) btndetect=Button(self.frame_content7, text = 'Detect', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 1, column = 0, padx = 5, pady = 5) btndbrowse=Button(self.frame_content7, text = 'Attach File', command =self.browse_file, height=2, width=15, font=self.customFont).grid(row = 3, column = 0, padx = 5, pady = 5) self.lilnew1=Listbox(self.frame_content7,bg="black", fg="white", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row = 1, column = 1, rowspan=3) #End Label(self.frame_content, text = 'Airserv-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) Label(self.frame_content, text = 'Options :',font=self.myfontnew, bg="white").grid(row = 1, column = 1) #Button(self.frame_content, text = 'ivs', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 0, padx = 5, pady = 5) #Button(self.frame_content, text = 'gpsd', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 1, padx = 5, pady = 5) #Button(self.frame_content, text = 'write', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 2, padx = 5, pady = 5) #command Listbox Label(self.frame_content5, text = 'Edit Command From Here',font=self.myfontnew, bg="white", justify=LEFT).grid(row = 0, column = 0) TextCommandBox=Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output=Text(self.frame_content5,bg="black", fg="white", font=self.myfont, height=15, width=30) self.output.grid(row = 0, column = 1, padx=50, pady=5, rowspan=3) btnsubmit=Button(self.frame_content5, width=15, height=2, text="Get Result", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear=Button(self.frame_content5, width=15, height=2, text="Clear Output", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "-p", \ onvalue="-p",offvalue="", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var1) self.C1.grid(row = 2, column = 0, padx = 5, pady = 5) self.t1=Text(self.frame_content,height=1,width = 20) self.t1.grid(row = 2, column = 1, padx = 5, pady = 5) l1=Label(self.frame_content, text = ': TCP port to listen on. Defaults to 666.',font=self.myfont, bg="white", justify=LEFT).grid(row = 2, column = 2, padx = 5, pady = 5) self.C2 = Checkbutton(self.frame_content, text = "-d", \ onvalue = "-d", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var2) self.C2.grid(row = 3, column = 0, padx = 5, pady = 5) self.t2=Text(self.frame_content,height=1,width = 20) self.t2.grid(row = 3, column = 1, padx = 5, pady = 5) l2=Label(self.frame_content, text = ': wifi device to serve.',font=self.myfont, bg="white", justify=LEFT).grid(row = 3, column = 2, padx = 5, pady = 5) self.C3 = Checkbutton(self.frame_content, text = "-c", \ onvalue = "-c", offvalue ="", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var3) self.C3.grid(row = 4, column = 0, padx = 5, pady = 5) self.t3=Text(self.frame_content,height=1,width = 20) self.t3.grid(row = 4, column = 1, padx = 5, pady = 5) l3=Label(self.frame_content, text = ': Channel to start on.',font=self.myfont, bg="white", justify=LEFT).grid(row = 4, column = 2, padx = 5, pady = 5) self.C4 = Checkbutton(self.frame_content, text = "-v", \ onvalue = "-v", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var4) self.C4.grid(row = 5, column = 0, padx = 5, pady = 5) self.t4=Text(self.frame_content,height=1,width = 20) self.t4.grid(row = 5, column = 1, padx = 5, pady = 5) l4=Label(self.frame_content, text = ': debug level.',font=self.myfont, bg="white", justify=LEFT).grid(row = 5, column = 2, padx = 5, pady = 5)
class GUI(tk.Tk): """ Start graphical interface for client. Args: client_queue_cmd: queue to send commands client_queue_log: queue to get logging info client_queue_telem: queue to get telemetry data beam_gap_queue: queue to retrieve beam gap data (any queue will do, this is handled via the gui, through the telemetry queue) @depricated server_ip: server IP address for rtp stream access """ def __init__(self, client_queue_cmd, client_queue_log, client_queue_telem, beam_gap_queue, destroyEvent, server_ip, **kwargs): tk.Tk.__init__(self, **kwargs) self.client_queue_cmd = client_queue_cmd self.client_queue_log = client_queue_log self.client_queue_telem = client_queue_telem self.beam_gap_queue = beam_gap_queue self.server_ip = server_ip self.destroyEvent = destroyEvent def init_ui(self): #make resizable self.grid_columnconfigure(0, weight=1) self.grid_rowconfigure(0, weight=1) self.notebook = Notebook(self) # define mainapp instance -- also manages above telemetry thread self.mainApplication = MainApplication(self, self.client_queue_cmd, self.client_queue_log, self.client_queue_telem, self.beam_gap_queue, self.destroyEvent, self.server_ip) self.notebook.add(self.mainApplication, text="Main") # define telemetry widgets self.monitor = Monitor(self, VisualConstants.MARS_PRIMARY(1)) self.notebook.add(self.monitor, text='Monitor') self.notebook.grid(column=0, row=0, sticky='nsew') # menu -outside of notebook self.menu_ = TopMenu(self, '../gui/operations.json', self.client_queue_cmd, 'Commands') ### Add custom commands here self.menu_.add_menu_item('Reconnect to Cameras', self.mainApplication.start_streams, "View") self.menu_.add_menu_item('Left', self.mainApplication.focus_left, 'View/Camera Focus') self.menu_.add_menu_item('Center', self.mainApplication.focus_center, 'View/Camera Focus') self.menu_.add_menu_item('Right', self.mainApplication.focus_right, 'View/Camera Focus') self.menu_.add_menu_item('IBeam Display', self.beamGapGraph, 'View/Windows') self.menu_.add_menu_item('Toggle FOD Enabled', self.mainApplication.toggle_fod, 'View/Object Detection') self.menu_.add_menu_item('Set Ideal Images', self.mainApplication.define_ideal_images, 'View/Object Detection') ### self.menu_.finalize_menu_items() self.config(menu=self.menu_) # start all operations here so we don't cause a hissyfit between tkinter and threads self.mainApplication.start_streams() #define telemetryThread self.tthread = TelemetryThread( [self.mainApplication.telemetry_w, self.monitor], self.client_queue_telem, self.beam_gap_queue) self.tthread.start() # title and icon self.wm_title('Hyperloop Imaging Team') #this is garbage, i hate tkinter #self.img = ImageTk.PhotoImage(file='rit_imaging_team.xbm') #self.tk.call('wm', 'iconphoto', self._w, self.img) #self.iconbitmap('@rit_imaging_team.xbm') #call destroyCallback on clicking X self.protocol('WM_DELETE_WINDOW', self.destroyCallback) #assign dimensions and locatin on screen width = 900 height = 500 x = (self.winfo_screenwidth() // 2) - (width // 2) y = (self.winfo_screenheight() // 2) - (height // 2) self.geometry('{}x{}+{}+{}'.format(width, height, x, y)) self.update() def killMars(self): ''' Sends the kill command to Mars ''' logger.debug('GUI Killing Mars...') self.client_queue_cmd.put('exit') def displayMarsDisconnected(self): tkMessageBox.showerror( 'Lost connection to Mars', 'The client has lossed connection to mars, closing application.') self.destroyClient() def destroyClient(self): logger.debug('GUI Killing Main App...') self.menu_.destroy() self.mainApplication.close_() logger.debug('GUI Killing Monitor app...') self.monitor.destroy() self.notebook.destroy() logger.debug('GUI Killing Self...') self.killTelemThread() logger.debug('GUI Dead') self.quit() self.destroy() def killTelemThread(self): """ Customized quit function to allow for safe closure of processes. """ logger.debug('GUI Killing Telemetry...') self.tthread.stop() if self.tthread.is_alive(): self.tthread.join() def destroyCallback(self): ''' Function called when the window handle Destory is clicked (the x) Opens up a small prompt asking if you wanna kill mars ''' logger.debug('GUI entering destroy callback...') result = tkMessageBox.askyesno( 'Leaving GUI, Should Mars be Disabled?', 'Leaving GUI, should Mars be Disabled?') if result: self.killMars() self.destroyClient() def beamGapGraph(self): ''' Function that launches the Beam Gap Widget that displays the current beam distances in readalbe form. ''' if getattr(self, 'top', False) == False: self.top = BeamGapWidget(self, self.beam_gap_queue) self.top.title("VALMAR Beam Gap") else: if self.top['state'] != 'normal': self.top = BeamGapWidget(self, self.beam_gap_queue) self.top.title("VALMAR Beam Gap") def start(self): ''' Starts the root window ''' self.init_ui() try: self.mainloop() except KeyboardInterrupt: self.destroyClient()
class GUI(tk.Tk): """ Start graphical interface for client. Args: client_queue_cmd: queue to send commands client_queue_log: queue to get logging info client_queue_telem: queue to get telemetry data beam_gap_queue: queue to retrieve beam gap data (any queue will do, this is handled via the gui, through the telemetry queue) @depricated server_ip: server IP address for rtp stream access """ def __init__(self, client_queue_cmd, client_queue_log, client_queue_telem, beam_gap_queue, destroyEvent, server_ip, **kwargs): tk.Tk.__init__(self, **kwargs) self.client_queue_cmd = client_queue_cmd self.client_queue_log = client_queue_log self.client_queue_telem = client_queue_telem self.beam_gap_queue = beam_gap_queue self.server_ip = server_ip self.destroyEvent = destroyEvent def init_ui(self): #make resizable self.grid_columnconfigure(0, weight=1) self.grid_rowconfigure(0, weight=1) self.notebook = Notebook(self) # define mainapp instance -- also manages above telemetry thread self.mainApplication = MainApplication(self, self.client_queue_cmd, self.client_queue_log, self.client_queue_telem, self.beam_gap_queue, self.destroyEvent, self.server_ip) self.notebook.add(self.mainApplication, text = "Main") # define telemetry widgets self.monitor = Monitor(self, VisualConstants.MARS_PRIMARY(1)) self.notebook.add(self.monitor, text = 'Monitor') self.notebook.grid(column = 0, row = 0, sticky = 'nsew') # menu -outside of notebook self.menu_ = TopMenu(self, '../gui/operations.json', self.client_queue_cmd, 'Commands') ### Add custom commands here self.menu_.add_menu_item('Reconnect to Cameras', self.mainApplication.start_streams, "View") self.menu_.add_menu_item('Left', self.mainApplication.focus_left, 'View/Camera Focus') self.menu_.add_menu_item('Center', self.mainApplication.focus_center, 'View/Camera Focus') self.menu_.add_menu_item('Right', self.mainApplication.focus_right, 'View/Camera Focus') self.menu_.add_menu_item('IBeam Display', self.beamGapGraph, 'View/Windows') self.menu_.add_menu_item('Toggle FOD Enabled', self.mainApplication.toggle_fod, 'View/Object Detection') self.menu_.add_menu_item('Set Ideal Images', self.mainApplication.define_ideal_images, 'View/Object Detection') ### self.menu_.finalize_menu_items() self.config(menu=self.menu_) # start all operations here so we don't cause a hissyfit between tkinter and threads self.mainApplication.start_streams() #define telemetryThread self.tthread = TelemetryThread([self.mainApplication.telemetry_w, self.monitor], self.client_queue_telem, self.beam_gap_queue) self.tthread.start() # title and icon self.wm_title('Hyperloop Imaging Team') #this is garbage, i hate tkinter #self.img = ImageTk.PhotoImage(file='rit_imaging_team.xbm') #self.tk.call('wm', 'iconphoto', self._w, self.img) #self.iconbitmap('@rit_imaging_team.xbm') #call destroyCallback on clicking X self.protocol('WM_DELETE_WINDOW', self.destroyCallback) #assign dimensions and locatin on screen width = 900 height = 500 x = (self.winfo_screenwidth() // 2) - (width // 2) y = (self.winfo_screenheight() // 2) - (height // 2) self.geometry('{}x{}+{}+{}'.format(width, height, x, y)) self.update() def killMars(self): ''' Sends the kill command to Mars ''' logger.debug('GUI Killing Mars...') self.client_queue_cmd.put('exit') def displayMarsDisconnected(self): tkMessageBox.showerror('Lost connection to Mars', 'The client has lossed connection to mars, closing application.') self.destroyClient() def destroyClient(self): logger.debug('GUI Killing Main App...') self.menu_.destroy() self.mainApplication.close_() logger.debug('GUI Killing Monitor app...') self.monitor.destroy() self.notebook.destroy() logger.debug('GUI Killing Self...') self.killTelemThread() logger.debug('GUI Dead') self.quit() self.destroy() def killTelemThread(self): """ Customized quit function to allow for safe closure of processes. """ logger.debug('GUI Killing Telemetry...') self.tthread.stop() if self.tthread.is_alive(): self.tthread.join() def destroyCallback(self): ''' Function called when the window handle Destory is clicked (the x) Opens up a small prompt asking if you wanna kill mars ''' logger.debug('GUI entering destroy callback...') result = tkMessageBox.askyesno('Leaving GUI, Should Mars be Disabled?', 'Leaving GUI, should Mars be Disabled?') if result: self.killMars() self.destroyClient() def beamGapGraph(self): ''' Function that launches the Beam Gap Widget that displays the current beam distances in readalbe form. ''' if getattr(self, 'top', False) == False: self.top = BeamGapWidget(self, self.beam_gap_queue) self.top.title("VALMAR Beam Gap") else: if self.top['state'] != 'normal': self.top = BeamGapWidget(self, self.beam_gap_queue) self.top.title("VALMAR Beam Gap") def start(self): ''' Starts the root window ''' self.init_ui() try: self.mainloop() except KeyboardInterrupt: self.destroyClient()
class Interface(): def __init__(self): print("PASTA ATUAL MAIN: " + os.getcwd()) self.errorReport = ErrorReport("logs_errors/error_db.log") self.db = DatabaseGui() if self.db.checkStatus(): self.defineFontsVars() self.configWindow("1.0.0") self.defineVars() self.configWidgetsMenuOptions() self.configWidgetsCreateForm() self.configWidgetsGetApps() self.setWidgets() ############################ FUNCAO TEMPORARIA APENAS PARA DESENVOLVIMENTO self.nextTabFrameFieldForm() else: self.errorReport.showAndSaveError( self.db.getErrorDb(), "Erro ao inicializar banco de dados") def defineVars(self): self.frameOld = None self.optionVar = IntVar() self.nameFormVar = StringVar() self.pathImageFormVar = StringVar() self.titleFormVar = StringVar() self.validateDateReg = self.window.register(validateDate) self.validatePhoneReg = self.window.register(validatePhone) self.nameFormVar.trace("w", self.checkInfoAppCompleted) self.pathImageFormVar.trace("w", self.checkInfoAppCompleted) self.menuOptionsFunctions = [ self.activeOptionCreateForm, self.activeOptionGetApps ] self.listElementThisForm = {} self.idTemporaryElement = 0 self.menuRightStateVar = False def defineFontsVars(self): self.font = ("Arial", 13) self.fontMin = ("Arial", 10) self.fontMax = ("Arial", 15) def setWidgets(self): self.optionVar.set(0) self.pathImageFormVar.set("link da imagem") self.rb1.invoke( ) #Aciona o RadioButton CreateForm para renderizar os elementos na frameCreateForm def configWindow(self, version): self.window = Tk() self.window.title("Forms App {}".format(version)) self.window.geometry("900x500+150+100") self.window.iconbitmap("images/imagesFormsApp/imageApp.ico") title = "Crie seu App, formulários, realize estatísticas, \nedite e estude seus dados com o Forms App" image = renderPhoto("images/imagesFormsApp/imageApp.png", (60, 60)) Label(self.window, font=("Arial Rounded MT Bold", 15), background="thistle", foreground="chocolate", \ text=title, padx=10, pady=10, image=image, compound=RIGHT)\ .pack(side=TOP, fill="x", ipady=5) self.frameBody = Frame(self.window, background="paleturquoise") self.frameBody.pack(side=TOP, expand=True, fill=BOTH) self.menuRight = Frame(self.frameBody, background="paleturquoise", width=150) self.menuRight.pack(side=RIGHT, fill=Y) def configWidgetsMenuOptions(self): frameOptions = Frame(self.frameBody, background="paleturquoise") frameOptions.pack(side=LEFT, fill=Y, padx=5, pady=5) self.rb1 = Radiobutton(frameOptions, font=self.font, text="Novo App", variable=self.optionVar, value=0, indicatoron=0, width=15, height=2, command=self.actionOptions) self.rb1.grid(row=1, column=0) self.rb2 = Radiobutton(frameOptions, font=self.font, text="Todos", variable=self.optionVar, value=1, indicatoron=0, width=15, height=2, command=self.actionOptions) self.rb2.grid(row=2, column=0) def configWidgetsCreateForm(self): self.frameCreateForm = Frame(self.frameBody) self.framesNotebook = Notebook(self.frameCreateForm) self.framesNotebook.pack(expand=True, fill=BOTH) self.tabFrameInfoForm = Frame(self.framesNotebook) self.tabFrameFieldForm = Frame(self.framesNotebook) self.framesNotebook.add(self.tabFrameInfoForm, compound=LEFT, image=renderPhoto( "images\\imagesFormsApp\\app.png", (40, 40)), sticky=W + E + N + S, text="Info App", padding='0.1i') self.framesNotebook.add(self.tabFrameFieldForm, compound=LEFT, image=renderPhoto( "images\\imagesFormsApp\\document.png", (40, 40)), sticky=W + E + N + S, text="Item", padding='0.1i') self.framesNotebook.hide(self.tabFrameFieldForm) # -------------- tabFrameInfoForm ------------- title = "Crie seu App aqui" Label(self.tabFrameInfoForm, text=title, font=self.font)\ .grid(row=0, column=0, columnspan=5) Label(self.tabFrameInfoForm, text="Nome", font=self.fontMin).grid(row=1, column=0) inputName = Entry(self.tabFrameInfoForm, font=self.fontMin, textvariable=self.nameFormVar) inputName.grid(row=1, column=1, pady=10, sticky=W + E + N + S) #inputName.bind("<KeyPress>", self.checkInfoAppCompleted) Label(self.tabFrameInfoForm, text="Descrição", font=self.fontMin).grid(row=2, column=0) self.textWidget = Text(self.tabFrameInfoForm, pady=10, font=self.fontMin, width=50, height=3) self.textWidget.grid(row=2, column=1, sticky=W + E + N + S) self.descriptionFormVar = self.createVarByTextWidget(self.textWidget) self.imageWidget = Label(self.tabFrameInfoForm, padx=10, pady=10, background="lightcyan", anchor=N) self.imageWidget.grid(row=1, column=2, rowspan=2, sticky=W + E + N + S, padx=10, pady=10) Label(self.tabFrameInfoForm, padx=10, pady=10, background="lightcyan", font=self.fontMin, textvariable=self.pathImageFormVar)\ .grid(row=3, column=1, sticky=W+E+N+S) Button(self.tabFrameInfoForm, font=self.fontMin, text="Procurar Imagem", command=self.actionChoiseImageForm)\ .grid(row=3, column=2, padx=10, pady=10) self.buttonNext = Button(self.tabFrameInfoForm, state="disabled", font=self.fontMin, text="Prosseguir", command=self.actionNextTabFrameFieldForm) self.buttonNext.grid(row=4, column=1, padx=20, pady=15) # -------------- tabFrameFieldForm ------------- Label(self.tabFrameFieldForm, textvariable=self.titleFormVar, font=self.font)\ .pack(side=TOP) frameBodyForm = Frame(self.tabFrameFieldForm, background="lightcyan") frameBodyForm.pack(side=TOP, fill=BOTH, expand=True, padx=5) frameMenuElementsForm = Frame( frameBodyForm) #Frame que contera todos os elementos existentes frameMenuElementsForm.pack(side=LEFT, fill=Y, ipadx=5) self.frameRenderElementsForm = Frame( frameBodyForm ) #Frame que contera todos os elementos escolhidos pelo usuario self.frameRenderElementsForm.pack(side=LEFT, fill=Y, ipadx=5, ipady=5) Label(frameMenuElementsForm, text="Elementos", font=self.font).pack(side=TOP) for element in self.db.getAllElemments( ): #Mostra todos os elementos em forma de botoes para serem adicionados no formulário function = lambda id_element=element[0], name_element=element[1], type_element=element[2], multline=element[3], widget_tkinter=element[5]:\ self.actionAddElement(id_element, name_element, type_element, multline, widget_tkinter) Button(frameMenuElementsForm, width=15, height=2, \ text=element[1], command=function, repeatdelay=700, \ borderwidth=3, activebackground="lightseagreen", \ background="darkcyan", cursor="sb_right_arrow").pack(side=TOP) #Cria opcoes especificas no meu direito para FieldForm self.createMenuSideForFieldForm() def checkInfoAppCompleted( self, a, b, c ): #checa se todos os campos de informacoes do app foram preenchidas if self.nameFormVar.get( ) and self.pathImageFormVar.get() <> "link da imagem": self.buttonNext.config(state="active") self.titleFormVar.set("Crie o formulário para seu App( " + self.nameFormVar.get() + " ) aqui!") else: self.activeDeactivateTabFrameFieldForm() self.buttonNext.config(state="disabled") self.buttonSaveApp.config(state="disabled") def checkFormCompleted(self): if self.listElementThisForm: self.buttonSaveApp.config(state="active") else: self.buttonSaveApp.config(state="disabled") def actionAddElement( self, id_element, name_element, type_element, multline, widget_tkinter ): #Adiciona elemento para renderizacao com evento de botao infoAppFrame = Frame(self.frameRenderElementsForm, background="powderblue") infoAppFrame.pack(side=TOP, fill=X) infoAppFrame.idTemporaryElement = self.idTemporaryElement def removeElement( ): #Funcao que remove o frame da tela e deleta o item da lista de elementos adicionados do formulario del self.listElementThisForm[infoAppFrame.idTemporaryElement] infoAppFrame.destroy() self.checkFormCompleted() Button(infoAppFrame, text="X", command=removeElement, font=("Arial", 6), takefocus=False)\ .pack(side=RIGHT, ipadx=2, padx=2) nameElementVar = StringVar() nameElement = Entry(infoAppFrame, width=18, justify=CENTER, relief=FLAT, \ textvariable=nameElementVar, font=("Agency FB", 14)) nameElement.pack(side=LEFT, padx=10, fill=X) nameElementVar.set(name_element) nameElement.focus_force() nameElement.select_range(0, END) self.viewElement(infoAppFrame, widget_tkinter) #Salva na lista o id do elemento,nome da variavel controladora e o tipo de dado que sera inserido no banco self.listElementThisForm[self.idTemporaryElement] = (id_element, nameElementVar, type_element, infoAppFrame) self.idTemporaryElement += 1 self.checkFormCompleted() def viewElement(self, infoAppFrame, widget_tkinter): "Apenas renderiza os elementos na tela sem mais configuracoes" if widget_tkinter == "entry": inputElement = Entry(infoAppFrame, takefocus=False, state="disabled", width=40, font=self.font) elif widget_tkinter == "text": inputElement = Text(infoAppFrame, takefocus=False, state="disabled", width=40, height=4, font=self.font) elif widget_tkinter == "spinbox": inputElement = Spinbox(infoAppFrame, takefocus=False, state="disabled", width=7, font=self.font) elif widget_tkinter == "entry-date": inputElement = Entry(infoAppFrame, takefocus=False, state="disabled", width=10, font=self.font) elif widget_tkinter == "entry-phone": inputElement = Entry(infoAppFrame, takefocus=False, state="disabled", width=15, font=self.font) inputElement.pack(side=LEFT, padx=10, pady=10) return inputElement def renderElement(self, infoAppFrame, widget_tkinter): "Renderiza os elementos na tela com configurações de variáveis" inputElementVar = None if widget_tkinter == "entry": inputElementVar = StringVar() inputElement = Entry(infoAppFrame, width=40, textvariable=inputElementVar, font=self.font) elif widget_tkinter == "entry-date": inputElementVar = StringVar() inputElement = Entry(infoAppFrame, width=10, textvariable=inputElementVar, font=self.font) inputElement.config(validate="key", validatecommand=(self.validadeDateReg, '%i', '%P', '%S', '%s')) elif widget_tkinter == "entry-phone": inputElementVar = StringVar() inputElement = Entry(infoAppFrame, width=15, textvariable=inputElementVar, font=self.font) inputElement.config(validate="key", validatecommand=(self.validadePhoneReg, '%i', '%P', '%S', '%s')) elif widget_tkinter == "spinbox": inputElementVar = StringVar() inputElement = Spinbox(infoAppFrame, width=5, textvariable=inputElementVar, font=self.font) elif widget_tkinter == "text": inputElement = Text(infoAppFrame, width=40, height=4, font=self.font) inputElementVar = self.createVarByTextWidget(inputElement) inputElement.pack(side=LEFT, padx=10, pady=10) return (inputElement, inputElementVar) def createVarByTextWidget(self, textWidget): def funcSet(value): textWidget.delete("0.0", END) textWidget.insert("0.0", value) return type( "StringVar", (), { "set": staticmethod(funcSet), "get": staticmethod(lambda: textWidget.get("0.0", END)) }) def actionChoiseImageForm(self): path_origin = tkFileDialog.askopenfilename( initialdir="/", title="Selecione o Arquivo", filetypes=(("Arquivos jpeg", "*.jpg"), ("Arquivos png", "*.png"), ("Todos arquivos", "*.*"))) if path_origin: file_name = os.path.basename(path_origin) self.pathImageFormVar.set("images/iconsApps/" + file_name) path_origin = path_origin.encode("latin-1") path_destiny = ("images/iconsApps/" + file_name).encode("latin-1") print(path_origin, path_destiny, type(savePhoto)) savePhoto(path_origin, path_destiny, (100, 100)) image = renderPhoto(path_destiny, (100, 100)) self.imageWidget["image"] = image self.imageWidget["background"] = "SystemButtonFace" def actionNextTabFrameFieldForm(self): "Salva o app na db e pula para a proxima aba" #self.nameFormVar.set("Eventos Mensais") #self.textWidget.insert("0.0", "Eventos e palestrar de tecnologia que estão perto de ocorrer no ano de 2018.") self.nextTabFrameFieldForm() def cleanInfoApp(self): self.nameFormVar.set("") self.pathImageFormVar.set("") self.descriptionFormVar.set("") def cleanFieldForm(self): for element in self.listElementThisForm.values(): element[-1].destroy() def saveAll(self): nameTableFormated = self.formatNameTable(self.nameFormVar.get()) + str( randint(1, 1000000)) appId = self.saveApp(nameTableFormated) #Salva as informacoes do App self.saveFieldsForm( appId) #Salva as ordens dos elementos no formulario self.saveTableForm( nameTableFormated) #Salva a tabela para inserir os futuros itens self.cleanInfoApp() #Limpa todos os campos preenchimentos de Info App self.cleanFieldForm( ) #Remove todos os Itens adicionados na criacao do formulario self.activeDeactivateTabFrameFieldForm( ) #Torna a aba Item invisivel novamente def saveApp(self, nameTableFormated): "Salva o app no banco de dados" self.db.saveRecordApp(self.nameFormVar.get(), self.textWidget.get("0.0", END), nameTableFormated, self.pathImageFormVar.get()) return self.db.getIdOfLastRecordInApps()[0] def saveFieldsForm(self, appId): #(id_element, nameElementVar, type_element, inputElement) index_posicao = 0 indexTemps = list(self.listElementThisForm) indexTemps.sort() for indexTemp in indexTemps: id_element, nameElementVar, type_element, _ = self.listElementThisForm.get( indexTemp) #salvar em saveFieldApp ---> id_formulario, id_elemento, titulo, texto_ajuda, index_posicao self.db.saveFieldApp(appId, id_element, str(nameElementVar.get()), "", index_posicao) index_posicao += 1 def saveTableForm(self, nameTableFormated): try: fields_types = map(lambda element: self.formatNameColumn(element[1].get())+\ " "+element[2], self.listElementThisForm.values()) self.db.saveTableApp(nameTableFormated, fields_types) except Exception as error: self.errorReport.showAndSaveError( error.message, "Erro ocorreu durante salvamento da tabela") def createMenuSideForFieldForm(self): if not self.menuRightStateVar: self.menuRight["background"] = "red" self.menuRightCreateForm = Frame(self.menuRight) self.menuRightCreateForm.pack(side=TOP, padx=10, pady=10) self.buttonSaveApp = Button(self.menuRightCreateForm, command=self.saveAll, \ font=self.font, text="Salvar App") self.buttonSaveApp.pack(side=TOP, ipadx=10) self.menuRightStateVar = True def hideMenuFieldForm(self): self.menuRightCreateForm.forget() def showMenuFieldForm(self): self.menuRightCreateForm.pack(side=TOP, padx=10, pady=10) def nextTabFrameFieldForm(self): self.activeDeactivateTabFrameFieldForm() self.framesNotebook.select(self.tabFrameFieldForm) def activeDeactivateTabFrameFieldForm(self): self.framesNotebook.hide(self.tabFrameFieldForm) def formatNameColumn(self, name_field): name_formated = "_".join(name_field.lower().split(" ")[0:2]) return name_formated def formatNameTable(self, name_form): name_formated = "_".join(name_form.lower().split(" ")[0:2]) return name_formated def configWidgetsGetApps( self ): # Configura todos os widgets que pertencem ao frame que mostra todos os apps e forms self.frameGetApps = Frame(self.frameBody) self.frameAbasGetApps = Notebook(self.frameGetApps) self.frameAbasGetApps.pack(side=TOP, fill=BOTH) frameApp = Frame(self.frameAbasGetApps) frameInfoApp = Frame(frameApp) frameInfoApp.pack(side=TOP, fill=BOTH) frameFieldsApp = Frame(frameApp) frameFieldsApp.pack(side=TOP, fill=BOTH) for idApp, nomeApp, pathImage in self.db.getAllInfoForms( "id", "nome_formulario", "caminho_imagem"): image = renderPhoto(pathImage, (35, 35)) self.frameAbasGetApps.add(frameApp, compound=LEFT, image=image, text=nomeApp, sticky=W + E + N + S) break # def generateTabsApps(self): # self.listTabsApps = [] # for app_info in self.db.getAllInfoForms("id", "nome_formulario"): # self.listTabsApps.append(self.generateTab( )) # def activeTabApp(self, name_form, description, name_table, path_image): # self.frameInfoApp # self.frameFieldsApp def actionOptions(self): if self.frameOld: self.frameOld.forget() self.frameOld = self.menuOptionsFunctions[self.optionVar.get()]() def activeOptionCreateForm(self): self.frameCreateForm.pack(side=LEFT, expand=True, fill=BOTH) self.showMenuFieldForm() return self.frameCreateForm def activeOptionGetApps(self): self.frameGetApps.pack(side=LEFT, expand=True, fill=BOTH) self.hideMenuFieldForm() return self.frameGetApps
class Application(Frame): def __init__(self, master): Frame.__init__(self, master) self.FileObjects = [] self.FileObjectNames = [] self.intSettings = {'Group': IntVar(value=1), 'DataObject': IntVar(value=1), 'FieldVariables': IntVar(value=1)} self.FieldVariables = OrderedDict() self.notebook = Notebook(self) self.tab1 = Frame(self.notebook) self.tab2 = Frame(self.notebook) self.notebook.add(self.tab1, text="Data Interaction") self.notebook.add(self.tab2, text="Mach-1 Image Grid") self.notebook.grid(row=0, column=0, sticky=NW) ##### BEGIN TAB 1 ##### self.frameDataFiles = Frame(self.tab1) self.frameDataFiles.grid(row=0, column=0, sticky=N+W+E) self.buttonLoadFile = Button(self.frameDataFiles, text="Load Data File", command=self.loadFile) self.buttonLoadFile.grid(row=0, column=0, padx=1, pady=1, sticky=N+W+E) self.buttonRemoveFile = Button(self.frameDataFiles, text="Remove Selected File", command=self.removeDataObject) self.buttonRemoveFile.grid(row=1, column=0, padx=1, pady=1, sticky=N+W+E) self.frameDataObjects = LabelFrame(self.tab1, text="Data Files") self.frameDataObjects.grid(row=0, column=1, padx=1, pady=1, sticky=N+W+E) self.frameGroups = LabelFrame(self.tab1, text="Group Selection") self.frameGroups.grid(row=1, column=0, padx=1, pady=1, sticky=N+W+E ) Label(self.frameGroups, text="").grid(row=0, column=0, sticky=N+W+E) self.frameChannels = LabelFrame(self.tab1, text="Channel Selection") self.frameChannels.grid(row=1, column=1, padx=1, pady=1, sticky=N+W+E) Label(self.frameChannels, text="").grid(row=0, column=0, sticky=N+W+E) self.frameTab1BottomLeft = Frame(self.tab1) self.frameTab1BottomLeft.grid(row=2, column=0, padx=1, pady=1, sticky=N+W+E) self.buttonSaveFile = Button(self.frameTab1BottomLeft, text="Save Selected to Pickle", command=self.saveFile) self.buttonSaveFile.grid(row=0, column=0, padx=1, pady=1, sticky=N+W+E) self.buttonSaveCSV = Button(self.frameTab1BottomLeft, text="Save Selected to CSV", command=self.saveCSV) self.buttonSaveCSV.grid(row=1, column=0, padx=1, pady=1, sticky=N+W+E) self.buttonGetThickness = Button(self.frameTab1BottomLeft, text="Get Mach-1 Thicknesses", command=self.findThicknesses) self.buttonGetThickness.grid(row=2, column=0, padx=1, pady=1, sticky=N+W+E) self.buttonPlot = Button(self.frameTab1BottomLeft, text="Plot Selected Channels", command=self.plotChannels) self.buttonPlot.grid(row=3, column=0, padx=1, pady=1, sticky=N+W+E) self.frameTab1BottomRight = Frame(self.tab1) self.frameTab1BottomRight.grid(row=2, column=1, padx=1, pady=1, sticky=N+W+E) self.buttonMovingAvg = Button(self.frameTab1BottomRight, text="Apply Moving Average", command=self.applyMovingAvg) self.buttonMovingAvg.grid(row=0, column=0, padx=1, pady=1, columnspan=2, sticky=N+W+E) self.windowSize = IntVar(value=10) Label(self.frameTab1BottomRight, text="Window Size").grid(row=1, column=0, padx=1, pady=1, sticky=N+W) Entry(self.frameTab1BottomRight, textvariable=self.windowSize, width=4).grid(row=1, column=1, padx=1, pady=1, sticky=N+W) ##### END TAB 1 ##### ##### BEGIN TAB 2 ##### self.frameImageButtons = Frame(self.tab2) self.frameImageButtons.grid(row=0, column=0, padx=1, pady=1, sticky=N+W+E) self.buttonLoadImage = Button(self.frameImageButtons, text="Load Image", command=self.loadImage) self.buttonLoadImage.grid(row=0, column=0, padx=1, pady=1, sticky=N+W+E) self.buttonLoadMapFile = Button(self.frameImageButtons, text="Load Mach-1 Site Locations", command=self.loadMachMap) self.buttonLoadMapFile.grid(row=1, column=0, padx=1, pady=1, sticky=N+W+E) self.buttonDefineMask = Button(self.frameImageButtons, text="Define Mask", command=self.cropImage) self.buttonDefineMask.grid(row=2, column=0, padx=1, pady=1, sticky=N+W+E) self.buttonClearMask = Button(self.frameImageButtons, text="Clear Mask", command=self.clearMask) self.buttonClearMask.grid(row=3, column=0, padx=1, pady=1, sticky=N+W+E) self.frameFieldVariables = LabelFrame(self.tab2, text="Field Variables") self.frameFieldVariables.grid(row=1, column=0, padx=1, pady=1, sticky=N+W+E) ##### END TAB 2 ##### self.grid() def loadFile(self): self.filename = tkFileDialog.askopenfilename( parent=root, initialdir=os.getcwd(), title="Select a Data File.") if self.filename: self.FileObjects.append(Data(self.filename)) self.FileObjectNames.append(os.path.basename(self.filename)) for child in self.frameGroups.grid_slaves(): child.grid_remove() del child self.intSettings["Group"].set(1) row = 0 column = 0 for i, g in enumerate(self.FileObjects[-1].groups): if i % 12 == 0: row = 0 column += 1 Radiobutton(self.frameGroups, text=g, indicatoron=0, width=5, variable=self.intSettings["Group"], command=self.populateChannelList, value=i+1).grid(row=row, column=column, sticky=NW) row += 1 g = self.FileObjects[-1].groups[self.intSettings["Group"].get() - 1] for child in self.frameChannels.grid_slaves(): child.grid_remove() del child row = 0 column = 0 self.channelSelections = {} for c in self.FileObjects[-1].time[g].keys(): if i % 12 == 0: row = 0 column += 1 self.channelSelections[c] = IntVar(value=0) Checkbutton(self.frameChannels, text=c, variable=self.channelSelections[c]).grid(row=row, column=column, sticky=NW) row += 1 counter = len(self.frameDataObjects.grid_slaves()) + 1 Radiobutton(self.frameDataObjects, text=self.FileObjectNames[-1], indicatoron=0, variable=self.intSettings["DataObject"], command=self.selectDataObject, value=counter).grid(row=counter, column=0, sticky=N+E+W) def selectDataObject(self): for child in self.frameGroups.grid_slaves(): child.grid_remove() del child self.intSettings["Group"].set(1) row = 0 column = 0 for i, g in enumerate(self.FileObjects[self.intSettings["DataObject"].get()-1].groups): if i % 12 == 0: row = 0 column += 1 Radiobutton(self.frameGroups, text=g, indicatoron=0, width=5, variable=self.intSettings["Group"], command=self.populateChannelList, value=i+1).grid(row=row, column=column, sticky=NW) row += 1 g = self.FileObjects[self.intSettings["DataObject"].get()-1].groups[self.intSettings["Group"].get() - 1] for child in self.frameChannels.grid_slaves(): child.grid_remove() del child row = 0 column = 0 self.channelSelections = {} for c in self.FileObjects[self.intSettings["DataObject"].get()-1].time[g].keys(): if i % 12 == 0: row = 0 column += 1 self.channelSelections[c] = IntVar(value=0) Checkbutton(self.frameChannels, text=c, variable=self.channelSelections[c]).grid(row=row, column=column, sticky=NW) row += 1 def removeDataObject(self): if tkMessageBox.askyesno(message="Really remove the selected data?"): del self.FileObjects[self.intSettings["DataObject"].get()-1] del self.FileObjectNames[self.intSettings["DataObject"].get()-1] for child in self.frameDataObjects.grid_slaves(): child.grid_remove() del child for i, o in enumerate(self.FileObjects): Radiobutton(self.frameDataObjects, text=self.FileObjectNames[i], indicatoron=0, variable=self.intSettings["DataObject"], command=self.selectDataObject, value=i+1).grid(row=i, column=0, sticky=N+E+W) if len(self.FileObjects) > 0: self.intSettings["DataObject"].set(1) else: for child in self.frameGroups.grid_slaves(): child.grid_remove() del child for child in self.frameChannels.grid_slaves(): child.grid_remove() del child def makePlot(self, group, keys): f = Figure() self.axes = [] if type(keys) is list: n = len(keys) for i, k in enumerate(keys): if i == 0: self.axes.append(f.add_subplot(n, 1, i + 1)) else: self.axes.append(f.add_subplot(n, 1, i + 1, sharex=self.axes[0])) self.axes[i].plot(self.FileObjects[self.intSettings["DataObject"].get()-1].time[group][k], self.FileObjects[self.intSettings["DataObject"].get()-1].data[group][k]) if self.FileObjects[self.intSettings["DataObject"].get()-1].thicknesses and k == "Fz, N": try: self.axes[i].axvline(x=self.FileObjects[self.intSettings["DataObject"].get()-1].thicknesses[group][1][0], color='r') self.axes[i].axvline(x=self.FileObjects[self.intSettings["DataObject"].get()-1].thicknesses[group][1][1], color='g') except: pass self.axes[i].set_ylabel(k) else: self.axes.append(f.add_subplot(1,1,1)) self.axes[0].plot(self.FileObjects[self.intSettings["DataObject"].get()-1].time[group][keys], self.FileObjects[self.intSettings["DataObject"].get()-1].data[group][keys]) if self.FileObjects[self.intSettings["DataObject"].get()-1].thicknesses and k == "Fz, N": self.axes[i].axvline(l=self.FileObjects[self.intSettings["DataObject"].get()-1].thicknesses[group][1][0], color='r') self.axes[i].axvline(l=self.FileObjects[self.intSettings["DataObject"].get()-1].thicknesses[group][1][1], color='g') self.axes[0].set_ylabel(keys) self.axes[-1].set_xlabel("Time (s)") canvas_frame = Frame(self.tab1) canvas_frame.grid(row=0, column=2, rowspan=4, sticky=N+W+E+S) canvas = FigureCanvasTkAgg(f, master=canvas_frame) canvas.draw() canvas.get_tk_widget().grid(row=0, column=0, padx=1, pady=1, sticky=N+W+E+S) toolbar_frame = Frame(self.tab1) toolbar_frame.grid(row=4, column=2, sticky=NW) toolbar = NavigationToolbar2TkAgg(canvas, toolbar_frame) toolbar.update() Button(self.tab1, text="Crop", command=self.cropData).grid( row=4, column=2, sticky=NE) def findThicknesses(self): self.FieldVariables["Thicknesses"] = [] for i, g in enumerate(self.FileObjects[self.intSettings["DataObject"].get()-1].groups): self.FileObjects[self.intSettings["DataObject"].get()-1].getThicknessMach1(g) self.FieldVariables["Thicknesses"].append(self.FileObjects[self.intSettings["DataObject"].get()-1].thicknesses[g][0]) self.populateFieldVariableList() def cropData(self): group = self.FileObjects[self.intSettings["DataObject"].get()-1].groups[self.intSettings["Group"].get() - 1] (start, end) = self.axes[0].xaxis.get_view_interval() for c in self.channelSelections.keys(): if self.channelSelections[c].get(): self.FileObjects[self.intSettings["DataObject"].get()-1].windowData(group, c, start, end) self.populateChannelList() def populateChannelList(self): g = self.FileObjects[self.intSettings["DataObject"].get()-1].groups[self.intSettings["Group"].get() - 1] self.channelSelections = {} for child in self.frameChannels.grid_slaves(): child.grid_remove() del child row = 0 column = 0 for i, c in enumerate(self.FileObjects[self.intSettings["DataObject"].get()-1].time[g].keys()): if i % 12 == 0: row = 0 column += 1 self.channelSelections[c] = IntVar(value=0) Checkbutton(self.frameChannels, text=c, variable=self.channelSelections[c]).grid(row=row, column=column, sticky=NW) row += 1 def plotChannels(self): keys = [] for c in self.channelSelections.keys(): if self.channelSelections[c].get(): keys.append(c) self.makePlot( self.FileObjects[self.intSettings["DataObject"].get()-1].groups[self.intSettings["Group"].get() - 1], keys) def applyMovingAvg(self): group = self.FileObjects[self.intSettings["DataObject"].get()-1].groups[ self.intSettings["Group"].get() - 1] for c in self.channelSelections.keys(): if self.channelSelections[c].get(): self.FileObjects[self.intSettings["DataObject"].get()-1].movingAverage( group, c, win=self.windowSize.get()) self.populateChannelList() def saveFile(self): group = self.FileObjects[self.intSettings["DataObject"].get()-1].groups[self.intSettings["Group"].get() - 1] for c in self.channelSelections.keys(): if self.channelSelections[c].get(): fid = open(os.path.abspath(string.replace( self.filename, ".tdms", "_{:s}_{:s}.pkl".format(group, c))), "wb") pickle.dump((self.FileObjects[self.intSettings["DataObject"].get()-1].time[group][c], self.FileObjects[self.intSettings["DataObject"].get()-1].data[group][c]), fid, 2) fid.close() def saveCSV(self): group = self.FileObjects[self.intSettings["DataObject"].get()-1].groups[self.intSettings["Group"].get() - 1] for c in self.channelSelections.keys(): if self.channelSelections[c].get(): if self.filename.lower().endswith(".tdms"): oname = string.replace(self.filename, ".tdms", "_{:s}_{:s}.csv".format(group, c)) oname = string.replace(oname, " ", "_") fid = open(os.path.abspath(oname), "wt") elif self.filename.lower().endswith(".txt"): oname = string.replace(self.filename, ".txt", "_{:s}_{:s}.csv".format(group, c)) oname = string.replace(oname, " ", "_") fid = open(os.path.abspath(oname), "wt") fid.write("Time, {:s}\n".format(c)) for (t, v) in zip( self.FileObjects[self.intSettings["DataObject"].get()-1].time[group][c], self.FileObjects[self.intSettings["DataObject"].get()-1].data[group][c]): fid.write("{:12.6f}, {:12.6f}\n".format(t, v)) fid.close() def loadImage(self): self.imagefile = tkFileDialog.askopenfilename( parent=root, initialdir=os.getcwd(), filetypes=[('image files', '.jpg .jpeg .png .tif .tiff')], title="Select a Image.") if not self.imagefile: print("A file was not selected") return self.image = imread(self.imagefile) self.cropimage=False self.plotImage() def loadMachMap(self): self.mapfile = tkFileDialog.askopenfilename( parent=root, initialdir=os.getcwd(), filetypes=[('Mach-1 map files', '.map')], title="Select the Mach-1 map file") if not self.mapfile: print("A file was not selected") return self.FileObjects[self.intSettings["DataObject"].get()-1].readMach1PositionMap(self.mapfile) self.maskFromMap() self.getTestLocations() def maskFromMap(self): ind = self.intSettings["DataObject"].get()-1 self.polygons = [] for p in self.FileObjects[ind].MachPositions["SubSurfaceID"].unique(): points = self.FileObjects[ind].MachPositions.query('(SubSurfaceID == "{:s}") & (PointType == 1)'.format(p))[["PixelX", "PixelY"]] points = np.array(points) points = np.vstack((points, points[0,:])) self.polygons.append(points) self.UpdateMask() def getTestLocations(self): ind = self.intSettings["DataObject"].get()-1 self.TestLocations = np.array(self.FileObjects[ind].MachPositions.query("(PointType == 0)")[["PixelX", "PixelY"]], dtype=float) def cropImage(self): self.points = [] self.polygons = [] self.image_canvas.get_tk_widget().bind("<Button-1>", self.XY_handler) self.image_canvas.get_tk_widget().bind("<Button-3>", self.nextPolygon) self.image_canvas.get_tk_widget().bind("<Return>", self.UpdateMask) #self.image_canvas.get_tk_widget().grid(row=0, column=0, padx=1, pady=1, sticky=N+E+W+S) self.image_canvas.draw() def XY_handler(self, aHandledEVENT): self.points.append((aHandledEVENT.x*self.screen2index, aHandledEVENT.y*self.screen2index)) if len(self.points) > 1: self.addLine() def addLine(self): codes = [Path.MOVETO] + [Path.LINETO] * (len(self.points) - 1) path = Path(tuple(self.points), codes) patch = patches.PathPatch(path, lw=2) self.image_ax.add_patch(patch) self.image_canvas.draw() def nextPolygon(self, aHandledEVENT): tmp = np.copy(self.points) tmp = np.vstack((tmp, tmp[0,:])) self.polygons.append(tmp) self.points = [] def UpdateMask(self, aHandledEVENT=None): img = Image.new('L', (self.image.shape[1], self.image.shape[0]), 1) drw = ImageDraw.Draw(img, 'L') for p in self.polygons: p = p.ravel() drw.polygon(tuple(p), outline=1, fill=0) self.maskimage = np.array(img, dtype=bool) self.cropimage = True if aHandledEVENT is None: self.image_canvas.get_tk_widget().unbind("<Button-1>") self.image_canvas.get_tk_widget().unbind("<Button-3>") self.image_canvas.get_tk_widget().unbind("<Return>") self.plotImage() def clearMask(self): self.cropimage = False self.plotImage() def populateFieldVariableList(self): for child in self.frameFieldVariables.grid_slaves(): child.grid_remove() del child for i, (k, v) in enumerate(self.FieldVariables.items()): Radiobutton(self.frameFieldVariables, text=k, indicatoron=0, variable=self.intSettings["FieldVariables"], value=i+1).grid(row=i, column=0, sticky=N+E+W) try: self.buttonPlotOverlay except: self.buttonPlotOverlay = Button(self.frameImageButtons, text="Plot Selected", command=self.overlayData) self.buttonPlotOverlay.grid(row=4, column=0, sticky=N+W+E) def plotImage(self, data=None): try: self.image except: return self.imageFrame = Frame(self.tab2) self.image_width_inches = 6.0 self.imageFrame.grid(row=0, column=1, padx=1, pady=1, sticky=N+E+W+S) self.image_aspect = float(self.image.shape[1])/float(self.image.shape[0]) self.image_dpi = 96 self.screen2index = self.image.shape[1] / (self.image_width_inches * self.image_dpi) self.image_fig = Figure((self.image_width_inches, self.image_width_inches/self.image_aspect), dpi=self.image_dpi, frameon=False) self.image_ax = self.image_fig.add_axes([0.0, 0.0, 1.0, 1.0,]) self.image_ax.imshow(self.image) self.image_ax.get_xaxis().set_visible(False) self.image_ax.get_yaxis().set_visible(False) self.image_ax.grid(False) self.image_canvas = FigureCanvasTkAgg(self.image_fig, master=self.imageFrame) self.image_canvas.get_tk_widget().grid(row=0, column=0, padx=1, pady=1, sticky=N+E+W+S) self.image_canvas.get_tk_widget().config(width=self.image_width_inches*self.image_dpi, height=self.image_width_inches*self.image_dpi/self.image_aspect) self.image_toolbar_frame = Frame(self.tab2) self.image_toolbar_frame.grid(row=1, column=1, sticky=NW) self.image_toolbar = NavigationToolbar2TkAgg(self.image_canvas, self.image_toolbar_frame) self.image_toolbar.update() self.image_canvas.draw() def overlayData(self): self.image_ax.hold(True) grid_size = self.image.shape[0:2] gridx, gridy = np.mgrid[0:grid_size[0], 0:grid_size[1]] key = self.FieldVariables.keys()[self.intSettings["FieldVariables"].get() - 1] data = np.array(self.FieldVariables[key][-self.TestLocations.shape[0]:]) m, se = np.mean(data), sem(data) h = se * t.ppf(0.975, data.size - 1) #rbf = Rbf(self.TestLocations[:,0], self.TestLocations[:,1], data, epsilon=2) #gridz = rbf(gridx, gridy) gridz = griddata(self.TestLocations[:, [1, 0]], data, (gridx, gridy), 'nearest') if self.cropimage: gridz = ma.masked_where(self.maskimage, gridz, copy=False) #gridz = ma.masked_where(np.abs((gridz - med))/mdev > 7.0, gridz, copy=False) cmap = sns.cubehelix_palette(light=1, as_cmap=True) im = self.image_ax.imshow(gridz, cmap=cmap, alpha=0.75, norm=colors.Normalize(vmin=data.min(), vmax=m+h, clip=False)) self.image_fig.colorbar(im, shrink=0.75) self.image_ax.scatter(self.TestLocations[:,0], self.TestLocations[:,1]) text = [str(i+1) for i in xrange(self.TestLocations.shape[0])] for i, tt in enumerate(text): self.image_ax.text(self.TestLocations[i,0] + 10, self.TestLocations[i,1] - 10, tt, color="orange", size=8) self.image_canvas.draw()
def show_main_frame(root): """Создаем основное окно программы""" #------------------------------------------------------------ def press(button): """функция, срабатывающая при нажатии кнопок переключения между правыми (основными) фреймами""" index = BUTTONS.index(button) window_names = rightFrameTabs.tabs() rightFrameTabs.select(window_names[index]) #-------------------------------------------------------------- def tab_changes(tab): """функция, срабатывающая при нажатии закладок переключения между правыми (основными) фреймами""" window_names = rightFrameTabs.tabs() index = window_names.index(rightFrameTabs.select()) button = BUTTONS[index] for but in BUTTONS: if but <> button: but['style'] = 'Default.TButton' else: but['style'] = 'Chosen.TButton' if button == button_rule: if not checks_exist('Остались незакрытые счета!\nВы уверены, ' + ' что хотите перейти в раздел "Управление"?\nвсе незакрытые'+ ' счета в таком случае будут для вас потеряны!'): press(button_sell) if not FLAGS[index]: SHOW[index](workArea[index],data) FLAGS[index] = True #------------------------------------------------------------- leftFrame = Canvas(root, width=PANEL_WIDTH, highlightthickness=0) leftFrame.pack(side=LEFT, fill=Y) leftFrame.pack_propagate(False) if USE_BACKGROUND: leftFrame.create_image(0,0, anchor='nw', image=data.photo) heads = (u'Продажи', u'Отчеты', u'Приход', u'Списание', u'Сверка', u'Управление', u'Настройки',) workArea = [] rightFrameTabs = Notebook(root, style='Hidden.TNotebook') for q in range (7): frame = Canvas(rightFrameTabs, relief=GROOVE) rightFrameTabs.add(frame, text=heads[q]) workArea.append(frame) rightFrameTabs.pack(side=TOP, fill=BOTH, expand=YES) rightFrameTabs.bind('<<NotebookTabChanged>>', tab_changes) button_sell = Button(leftFrame, text = u'\nПРОДАЖИ\n', command=lambda: press(button_sell)) button_sell.pack(side=TOP, padx=10, pady=10, fill=X) button_comings = Button(leftFrame, text = u'\nПРИХОД\n', command=lambda: press(button_comings)) button_comings.pack(side=TOP, padx=10, pady=10, fill=X) button_lost = Button(leftFrame, text = u'\nСПИСАНИЕ\n', command=lambda: press(button_lost)) button_lost.pack(side=TOP, padx=10, pady=10, fill=X) button_inventory = Button(leftFrame, text = u'\nСВЕРКА\n', command=lambda: press(button_inventory)) button_inventory.pack(side=TOP, padx=10, pady=10, fill=X) button_reports = Button(leftFrame, text = u'\nОТЧЕТЫ\n', command=lambda: press(button_reports)) button_reports.pack(side=TOP, padx=10, pady=10, fill=X) button_rule = Button(leftFrame, text = u'\nУПРАВЛЕНИЕ\n', command=lambda: press(button_rule)) button_rule.pack(side=TOP, padx=10, pady=10, fill=X) button_exit = Button(leftFrame, text = u'\nВЫХОД\n', command=shutdown, style='Default.TButton') button_exit.pack(side=BOTTOM, padx=10, pady=10, fill=X) button_options = Button(leftFrame, text = u'\nНАСТРОЙКА\n', command=lambda: press(button_options)) button_options.pack(side=BOTTOM, padx=10, pady=10, fill=X) BUTTONS = (button_sell, button_reports, button_comings, button_lost, button_inventory, button_rule, button_options) SHOW = (show_sell, show_report, show_incoming, show_lost, show_verify, show_control, show_options) FLAGS = [True, False, False, False, False, False, True] styles() press(button_sell) return workArea
class wm_seg: """ Simple GUI application If the application inside a container, automatic updates are removed. The application uses two frames (tabs): - training - testing """ def __init__(self, master, container): self.master = master master.title("nicMSlesions") # running on a container self.container = container # gui attributes self.path = os.getcwd() self.default_config = None self.user_config = None self.current_folder = os.getcwd() self.list_train_pretrained_nets = [] self.list_test_nets = [] self.version = __version__ if self.container is False: # version_number self.commit_version = subprocess.check_output( ['git', 'rev-parse', 'HEAD']) # queue and thread parameters. All processes are embedded # inside threads to avoid freezing the application self.train_task = None self.test_task = None self.test_queue = Queue.Queue() self.train_queue = Queue.Queue() # -------------------------------------------------- # parameters. Mostly from the config/*.cfg files # -------------------------------------------------- # data parameters self.param_training_folder = StringVar() self.param_test_folder = StringVar() self.param_FLAIR_tag = StringVar() self.param_T1_tag = StringVar() self.param_MOD3_tag = StringVar() self.param_MOD4_tag = StringVar() self.param_mask_tag = StringVar() self.param_model_tag = StringVar() self.param_register_modalities = BooleanVar() self.param_skull_stripping = BooleanVar() self.param_denoise = BooleanVar() self.param_denoise_iter = IntVar() self.param_save_tmp = BooleanVar() self.param_debug = BooleanVar() # train parameters self.param_net_folder = os.path.join(self.current_folder, 'nets') self.param_use_pretrained_model = BooleanVar() self.param_pretrained_model = StringVar() self.param_inference_model = StringVar() self.param_num_layers = IntVar() self.param_net_name = StringVar() self.param_net_name.set('None') self.param_balanced_dataset = StringVar() self.param_fract_negatives = DoubleVar() # model parameters self.param_pretrained = None self.param_min_th = DoubleVar() self.param_patch_size = IntVar() self.param_weight_paths = StringVar() self.param_load_weights = BooleanVar() self.param_train_split = DoubleVar() self.param_max_epochs = IntVar() self.param_patience = IntVar() self.param_batch_size = IntVar() self.param_net_verbose = IntVar() self.param_t_bin = DoubleVar() self.param_l_min = IntVar() self.param_min_error = DoubleVar() self.param_mode = BooleanVar() self.param_gpu_number = IntVar() # load the default configuration from the conf file self.load_default_configuration() # self frame (tabbed notebook) self.note = Notebook(self.master) self.note.pack() os.system('cls' if platform.system() == 'Windows' else 'clear') print "##################################################" print "# ------------ #" print "# nicMSlesions #" print "# ------------ #" print "# MS WM lesion segmentation #" print "# #" print "# ------------------------------- #" print "# (c) Sergi Valverde 2018 #" print "# Neuroimage Computing Group #" print "# ------------------------------- #" print "##################################################\n" print "Please select options for training or inference in the menu..." # -------------------------------------------------- # training tab # -------------------------------------------------- self.train_frame = Frame() self.note.add(self.train_frame, text="Training") self.test_frame = Frame() self.note.add(self.test_frame, text="Inference") # label frames cl_s = 5 self.tr_frame = LabelFrame(self.train_frame, text="Training images:") self.tr_frame.grid(row=0, columnspan=cl_s, sticky='WE', padx=5, pady=5, ipadx=5, ipady=5) self.model_frame = LabelFrame(self.train_frame, text="CNN model:") self.model_frame.grid(row=5, columnspan=cl_s, sticky='WE', padx=5, pady=5, ipadx=5, ipady=5) # training options self.inFolderLbl = Label(self.tr_frame, text="Training folder:") self.inFolderLbl.grid(row=0, column=0, sticky='E', padx=5, pady=2) self.inFolderTxt = Entry(self.tr_frame) self.inFolderTxt.grid(row=0, column=1, columnspan=5, sticky="W", pady=3) self.inFileBtn = Button(self.tr_frame, text="Browse ...", command=self.load_training_path) self.inFileBtn.grid(row=0, column=5, columnspan=1, sticky='W', padx=5, pady=1) self.optionsBtn = Button(self.tr_frame, text="Other options", command=self.parameter_window) self.optionsBtn.grid(row=0, column=10, columnspan=1, sticky="W", padx=(100, 1), pady=1) # setting input modalities: FLAIR + T1 are mandatory # Mod 3 / 4 are optional self.flairTagLbl = Label(self.tr_frame, text="FLAIR tag:") self.flairTagLbl.grid(row=1, column=0, sticky='E', padx=5, pady=2) self.flairTxt = Entry(self.tr_frame, textvariable=self.param_FLAIR_tag) self.flairTxt.grid(row=1, column=1, columnspan=1, sticky="W", pady=1) self.t1TagLbl = Label(self.tr_frame, text="T1 tag:") self.t1TagLbl.grid(row=2, column=0, sticky='E', padx=5, pady=2) self.t1Txt = Entry(self.tr_frame, textvariable=self.param_T1_tag) self.t1Txt.grid(row=2, column=1, columnspan=1, sticky="W", pady=1) self.mod3TagLbl = Label(self.tr_frame, text="mod 3 tag:") self.mod3TagLbl.grid(row=3, column=0, sticky='E', padx=5, pady=2) self.mod3Txt = Entry(self.tr_frame, textvariable=self.param_MOD3_tag) self.mod3Txt.grid(row=3, column=1, columnspan=1, sticky="W", pady=1) self.mod4TagLbl = Label(self.tr_frame, text="mod 4 tag:") self.mod4TagLbl.grid(row=4, column=0, sticky='E', padx=5, pady=2) self.mod4Txt = Entry(self.tr_frame, textvariable=self.param_MOD4_tag) self.mod4Txt.grid(row=4, column=1, columnspan=1, sticky="W", pady=1) self.maskTagLbl = Label(self.tr_frame, text="MASK tag:") self.maskTagLbl.grid(row=5, column=0, sticky='E', padx=5, pady=2) self.maskTxt = Entry(self.tr_frame, textvariable=self.param_mask_tag) self.maskTxt.grid(row=5, column=1, columnspan=1, sticky="W", pady=1) # model options self.modelTagLbl = Label(self.model_frame, text="Model name:") self.modelTagLbl.grid(row=6, column=0, sticky='E', padx=5, pady=2) self.modelTxt = Entry(self.model_frame, textvariable=self.param_net_name) self.modelTxt.grid(row=6, column=1, columnspan=1, sticky="W", pady=1) self.checkPretrain = Checkbutton(self.model_frame, text="use pretrained", var=self.param_use_pretrained_model) self.checkPretrain.grid(row=6, column=3, padx=5, pady=5) self.update_pretrained_nets() self.pretrainTxt = OptionMenu(self.model_frame, self.param_pretrained_model, *self.list_train_pretrained_nets) self.pretrainTxt.grid(row=6, column=5, sticky='E', padx=5, pady=5) # START button links self.trainingBtn = Button(self.train_frame, state='disabled', text="Start training", command=self.train_net) self.trainingBtn.grid(row=7, column=0, sticky='W', padx=1, pady=1) # -------------------------------------------------- # inference tab # -------------------------------------------------- self.tt_frame = LabelFrame(self.test_frame, text="Inference images:") self.tt_frame.grid(row=0, columnspan=cl_s, sticky='WE', padx=5, pady=5, ipadx=5, ipady=5) self.test_model_frame = LabelFrame(self.test_frame, text="CNN model:") self.test_model_frame.grid(row=5, columnspan=cl_s, sticky='WE', padx=5, pady=5, ipadx=5, ipady=5) # testing options self.test_inFolderLbl = Label(self.tt_frame, text="Testing folder:") self.test_inFolderLbl.grid(row=0, column=0, sticky='E', padx=5, pady=2) self.test_inFolderTxt = Entry(self.tt_frame) self.test_inFolderTxt.grid(row=0, column=1, columnspan=5, sticky="W", pady=3) self.test_inFileBtn = Button(self.tt_frame, text="Browse ...", command=self.load_testing_path) self.test_inFileBtn.grid(row=0, column=5, columnspan=1, sticky='W', padx=5, pady=1) self.test_optionsBtn = Button(self.tt_frame, text="Other options", command=self.parameter_window) self.test_optionsBtn.grid(row=0, column=10, columnspan=1, sticky="W", padx=(100, 1), pady=1) self.test_flairTagLbl = Label(self.tt_frame, text="FLAIR tag:") self.test_flairTagLbl.grid(row=1, column=0, sticky='E', padx=5, pady=2) self.test_flairTxt = Entry(self.tt_frame, textvariable=self.param_FLAIR_tag) self.test_flairTxt.grid(row=1, column=1, columnspan=1, sticky="W", pady=1) self.test_t1TagLbl = Label(self.tt_frame, text="T1 tag:") self.test_t1TagLbl.grid(row=2, column=0, sticky='E', padx=5, pady=2) self.test_t1Txt = Entry(self.tt_frame, textvariable=self.param_T1_tag) self.test_t1Txt.grid(row=2, column=1, columnspan=1, sticky="W", pady=1) self.test_mod3TagLbl = Label(self.tt_frame, text="mod 3 tag:") self.test_mod3TagLbl.grid(row=3, column=0, sticky='E', padx=5, pady=2) self.test_mod3Txt = Entry(self.tt_frame, textvariable=self.param_MOD3_tag) self.test_mod3Txt.grid(row=3, column=1, columnspan=1, sticky="W", pady=1) self.test_mod4TagLbl = Label(self.tt_frame, text="mod 4 tag:") self.test_mod4TagLbl.grid(row=4, column=0, sticky='E', padx=5, pady=2) self.test_mod4Txt = Entry(self.tt_frame, textvariable=self.param_MOD4_tag) self.test_mod4Txt.grid(row=4, column=1, columnspan=1, sticky="W", pady=1) self.test_pretrainTxt = OptionMenu(self.test_model_frame, self.param_inference_model, *self.list_test_nets) self.param_inference_model.set('None') self.test_pretrainTxt.grid(row=5, column=0, sticky='E', padx=5, pady=5) # START button links cto docker task self.inferenceBtn = Button(self.test_frame, state='disabled', text="Start inference", command=self.infer_segmentation) self.inferenceBtn.grid(row=7, column=0, sticky='W', padx=1, pady=1) # train / test ABOUT button self.train_aboutBtn = Button(self.train_frame, text="about", command=self.about_window) self.train_aboutBtn.grid(row=7, column=4, sticky='E', padx=(1, 1), pady=1) self.test_aboutBtn = Button(self.test_frame, text="about", command=self.about_window) self.test_aboutBtn.grid(row=7, column=4, sticky='E', padx=(1, 1), pady=1) # Processing state self.process_indicator = StringVar() self.process_indicator.set(' ') self.label_indicator = Label(master, textvariable=self.process_indicator) self.label_indicator.pack(side="left") # Closing processing events is implemented via # a master protocol self.master.protocol("WM_DELETE_WINDOW", self.close_event) def parameter_window(self): """ Setting other parameters using an emerging window CNN parameters, CUDA device, post-processing.... """ t = Toplevel(self.master) t.wm_title("Other parameters") # data parameters t_data = LabelFrame(t, text="data options:") t_data.grid(row=0, sticky="WE") checkPretrain = Checkbutton(t_data, text="Register modalities", var=self.param_register_modalities) checkPretrain.grid(row=0, sticky='W') checkSkull = Checkbutton(t_data, text="Skull-strip modalities", var=self.param_skull_stripping) checkSkull.grid(row=1, sticky="W") checkDenoise = Checkbutton(t_data, text="Denoise masks", var=self.param_denoise) checkDenoise.grid(row=2, sticky="W") denoise_iter_label = Label(t_data, text=" Denoise iter: ") denoise_iter_label.grid(row=3, sticky="W") denoise_iter_entry = Entry(t_data, textvariable=self.param_denoise_iter) denoise_iter_entry.grid(row=3, column=1, sticky="E") check_tmp = Checkbutton(t_data, text="Save tmp files", var=self.param_save_tmp) check_tmp.grid(row=4, sticky="W") checkdebug = Checkbutton(t_data, text="Debug mode", var=self.param_debug) checkdebug.grid(row=5, sticky="W") # model parameters t_model = LabelFrame(t, text="Model:") t_model.grid(row=5, sticky="EW") maxepochs_label = Label(t_model, text="Max epochs: ") maxepochs_label.grid(row=6, sticky="W") maxepochs_entry = Entry(t_model, textvariable=self.param_max_epochs) maxepochs_entry.grid(row=6, column=1, sticky="E") trainsplit_label = Label(t_model, text="Validation %: ") trainsplit_label.grid(row=7, sticky="W") trainsplit_entry = Entry(t_model, textvariable=self.param_train_split) trainsplit_entry.grid(row=7, column=1, sticky="E") batchsize_label = Label(t_model, text="Test batch size:") batchsize_label.grid(row=8, sticky="W") batchsize_entry = Entry(t_model, textvariable=self.param_batch_size) batchsize_entry.grid(row=8, column=1, sticky="E") mode_label = Label(t_model, text="Verbosity:") mode_label.grid(row=9, sticky="W") mode_entry = Entry(t_model, textvariable=self.param_net_verbose) mode_entry.grid(row=9, column=1, sticky="E") #gpu_mode = Checkbutton(t_model, # text="GPU:", # var=self.param_mode) #gpu_mode.grid(row=10, sticky="W") gpu_number = Label(t_model, text="GPU number:") gpu_number.grid(row=10, sticky="W") gpu_entry = Entry(t_model, textvariable=self.param_gpu_number) gpu_entry.grid(row=10, column=1, sticky="W") # training parameters tr_model = LabelFrame(t, text="Training:") tr_model.grid(row=12, sticky="EW") balanced_label = Label(tr_model, text="Balanced dataset: ") balanced_label.grid(row=13, sticky="W") balanced_entry = Entry(tr_model, textvariable=self.param_balanced_dataset) balanced_entry.grid(row=13, column=1, sticky="E") fraction_label = Label(tr_model, text="Fraction negative/positives: ") fraction_label.grid(row=14, sticky="W") fraction_entry = Entry(tr_model, textvariable=self.param_fract_negatives) fraction_entry.grid(row=14, column=1, sticky="E") # postprocessing parameters t_post = LabelFrame(t, text="Post-processing: ") t_post.grid(row=15, sticky="EW") t_bin_label = Label(t_post, text="Out probability th: ") t_bin_label.grid(row=16, sticky="W") t_bin_entry = Entry(t_post, textvariable=self.param_t_bin) t_bin_entry.grid(row=16, column=1, sticky="E") l_min_label = Label(t_post, text="Min out region size: ") l_min_label.grid(row=17, sticky="W") l_min_entry = Entry(t_post, textvariable=self.param_l_min) l_min_entry.grid(row=17, column=1, sticky="E") vol_min_label = Label(t_post, text="Min vol error (ml): ") vol_min_label.grid(row=18, sticky="W") vol_min_entry = Entry(t_post, textvariable=self.param_min_error) vol_min_entry.grid(row=18, column=1, sticky="E") def load_default_configuration(self): """ load the default configuration from /config/default.cfg This method assign each of the configuration parameters to class attributes """ default_config = ConfigParser.SafeConfigParser() default_config.read(os.path.join(self.path, 'config', 'default.cfg')) # dastaset parameters self.param_training_folder.set( default_config.get('database', 'train_folder')) self.param_test_folder.set( default_config.get('database', 'inference_folder')) self.param_FLAIR_tag.set(default_config.get('database', 'flair_tags')) self.param_T1_tag.set(default_config.get('database', 't1_tags')) self.param_MOD3_tag.set(default_config.get('database', 'mod3_tags')) self.param_MOD4_tag.set(default_config.get('database', 'mod4_tags')) self.param_mask_tag.set(default_config.get('database', 'roi_tags')) self.param_register_modalities.set( default_config.get('database', 'register_modalities')) self.param_denoise.set(default_config.get('database', 'denoise')) self.param_denoise_iter.set( default_config.getint('database', 'denoise_iter')) self.param_skull_stripping.set( default_config.get('database', 'skull_stripping')) self.param_save_tmp.set(default_config.get('database', 'save_tmp')) self.param_debug.set(default_config.get('database', 'debug')) # train parameters self.param_use_pretrained_model.set( default_config.get('train', 'full_train')) self.param_pretrained_model.set( default_config.get('train', 'pretrained_model')) self.param_inference_model.set(" ") self.param_balanced_dataset.set( default_config.get('train', 'balanced_training')) self.param_fract_negatives.set( default_config.getfloat('train', 'fraction_negatives')) # model parameters self.param_net_folder = os.path.join(self.current_folder, 'nets') self.param_net_name.set(default_config.get('model', 'name')) self.param_train_split.set( default_config.getfloat('model', 'train_split')) self.param_max_epochs.set(default_config.getint('model', 'max_epochs')) self.param_patience.set(default_config.getint('model', 'patience')) self.param_batch_size.set(default_config.getint('model', 'batch_size')) self.param_net_verbose.set(default_config.get('model', 'net_verbose')) self.param_gpu_number.set(default_config.getint('model', 'gpu_number')) # self.param_mode.set(default_config.get('model', 'gpu_mode')) # post-processing self.param_l_min.set(default_config.getint('postprocessing', 'l_min')) self.param_t_bin.set(default_config.getfloat('postprocessing', 't_bin')) self.param_min_error.set( default_config.getfloat('postprocessing', 'min_error')) def write_user_configuration(self): """ write the configuration into config/configuration.cfg """ user_config = ConfigParser.RawConfigParser() # dataset parameters user_config.add_section('database') user_config.set('database', 'train_folder', self.param_training_folder.get()) user_config.set('database', 'inference_folder', self.param_test_folder.get()) user_config.set('database', 'flair_tags', self.param_FLAIR_tag.get()) user_config.set('database', 't1_tags', self.param_T1_tag.get()) user_config.set('database', 'mod3_tags', self.param_MOD3_tag.get()) user_config.set('database', 'mod4_tags', self.param_MOD4_tag.get()) user_config.set('database', 'roi_tags', self.param_mask_tag.get()) user_config.set('database', 'register_modalities', self.param_register_modalities.get()) user_config.set('database', 'denoise', self.param_denoise.get()) user_config.set('database', 'denoise_iter', self.param_denoise_iter.get()) user_config.set('database', 'skull_stripping', self.param_skull_stripping.get()) user_config.set('database', 'save_tmp', self.param_save_tmp.get()) user_config.set('database', 'debug', self.param_debug.get()) # train parameters user_config.add_section('train') user_config.set('train', 'full_train', not (self.param_use_pretrained_model.get())) user_config.set('train', 'pretrained_model', self.param_pretrained_model.get()) user_config.set('train', 'balanced_training', self.param_balanced_dataset.get()) user_config.set('train', 'fraction_negatives', self.param_fract_negatives.get()) # model parameters user_config.add_section('model') user_config.set('model', 'name', self.param_net_name.get()) user_config.set('model', 'pretrained', self.param_pretrained) user_config.set('model', 'train_split', self.param_train_split.get()) user_config.set('model', 'max_epochs', self.param_max_epochs.get()) user_config.set('model', 'patience', self.param_patience.get()) user_config.set('model', 'batch_size', self.param_batch_size.get()) user_config.set('model', 'net_verbose', self.param_net_verbose.get()) # user_config.set('model', 'gpu_mode', self.param_mode.get()) user_config.set('model', 'gpu_number', self.param_gpu_number.get()) # postprocessing parameters user_config.add_section('postprocessing') user_config.set('postprocessing', 't_bin', self.param_t_bin.get()) user_config.set('postprocessing', 'l_min', self.param_l_min.get()) user_config.set('postprocessing', 'min_error', self.param_min_error.get()) # Writing our configuration file to 'example.cfg' with open(os.path.join(self.path, 'config', 'configuration.cfg'), 'wb') as configfile: user_config.write(configfile) def load_training_path(self): """ Select training path from disk and write it. If the app is run inside a container, link the iniitaldir with /data """ initialdir = '/data' if self.container else os.getcwd() fname = askdirectory(initialdir=initialdir) if fname: try: self.param_training_folder.set(fname) self.inFolderTxt.delete(0, END) self.inFolderTxt.insert(0, self.param_training_folder.get()) self.trainingBtn['state'] = 'normal' except: pass def load_testing_path(self): """ Selecet the inference path from disk and write it If the app is run inside a container, link the iniitaldir with /data """ initialdir = '/data' if self.container else os.getcwd() fname = askdirectory(initialdir=initialdir) if fname: try: self.param_test_folder.set(fname) self.test_inFolderTxt.delete(0, END) self.test_inFolderTxt.insert(0, self.param_test_folder.get()) self.inferenceBtn['state'] = 'normal' except: pass def update_pretrained_nets(self): """ get a list of the different net configuration present in the system. Each model configuration is represented by a folder containing the network weights for each of the networks. The baseline net config is always included by default """ folders = os.listdir(self.param_net_folder) self.list_train_pretrained_nets = folders self.list_test_nets = folders def write_to_console(self, txt): """ to doc: important method """ self.command_out.insert(END, str(txt)) def write_to_test_console(self, txt): """ to doc: important method """ self.test_command_out.insert(END, str(txt)) def infer_segmentation(self): """ Method implementing the inference process: - Check network selection - write the configuration to disk - Run the process on a new thread """ if self.param_inference_model.get() == 'None': print "ERROR: Please, select a network model before starting...\n" return if self.test_task is None: self.inferenceBtn.config(state='disabled') self.param_net_name.set(self.param_inference_model.get()) self.param_use_pretrained_model.set(False) self.write_user_configuration() print "\n-----------------------" print "Running configuration:" print "-----------------------" print "Inference model:", self.param_model_tag.get() print "Inference folder:", self.param_test_folder.get(), "\n" print "Method info:" print "------------" self.test_task = ThreadedTask(self.write_to_test_console, self.test_queue, mode='testing') self.test_task.start() self.master.after(100, self.process_container_queue) def train_net(self): """ Method implementing the training process: - write the configuration to disk - Run the process on a new thread """ if self.param_net_name.get() == 'None': print "ERROR: Please, define network name before starting...\n" return self.trainingBtn['state'] = 'disable' if self.train_task is None: self.trainingBtn.update() self.write_user_configuration() print "\n-----------------------" print "Running configuration:" print "-----------------------" print "Train model:", self.param_net_name.get() print "Training folder:", self.param_training_folder.get(), "\n" print "Method info:" print "------------" self.train_task = ThreadedTask(self.write_to_console, self.test_queue, mode='training') self.train_task.start() self.master.after(100, self.process_container_queue) def check_update(self): """ check update version and propose to download it if differnt So far, a rudimentary mode is used to check the last version. """ # I have to discard possible local changes :( print "---------------------------------------" print "Updating software" print "current version:", self.commit_version remote_commit = subprocess.check_output(['git', 'stash']) remote_commit = subprocess.check_output(['git', 'fetch']) remote_commit = subprocess.check_output( ['git', 'rev-parse', 'origin/master']) if remote_commit != self.commit_version: proc = subprocess.check_output(['git', 'pull', 'origin', 'master']) self.check_link.config(text="Updated") self.commit_version = remote_commit print "updated version:", self.commit_version else: print "This software is already in the latest version" print "---------------------------------------" def about_window(self): """ Window showing information about the software and version number, including auto-update. If the application is run from a container, then auto-update is disabled """ def callback(event): """ open webbrowser when clicking links """ webbrowser.open_new(event.widget.cget("text")) # main window t = Toplevel(self.master, width=500, height=500) t.wm_title("About") # NIC logo + name title = Label(t, text="nicMSlesions v" + self.version + "\n" "Multiple Sclerosis White Matter Lesion Segmentation") title.grid(row=2, column=1, padx=20, pady=10) img = ImageTk.PhotoImage(Image.open('./logonic.png')) imglabel = Label(t, image=img) imglabel.image = img imglabel.grid(row=1, column=1, padx=10, pady=10) group_name = Label(t, text="Copyright Sergi Valverde (2018-) \n " + "NeuroImage Computing Group") group_name.grid(row=3, column=1) group_link = Label(t, text=r"http://atc.udg.edu/nic", fg="blue", cursor="hand2") group_link.grid(row=4, column=1) group_link.bind("<Button-1>", callback) license_content = "Licensed under the BSD 2-Clause license. \n" + \ "A copy of the license is present in the root directory." license_label = Label(t, text=license_content) license_label.grid(row=5, column=1, padx=20, pady=20) # if self.container is False: # # check version and updates # version_number = Label(t, text="commit: " + self.commit_version) # version_number.grid(row=6, column=1, padx=20, pady=(1, 1)) # # self.check_link = Button(t, # text="Check for updates", # command=self.check_update) # self.check_link.grid(row=7, column=1) def process_container_queue(self): """ Process the threading queue. When the threaded processes are finished, buttons are reset and a message is shown in the app. """ self.process_indicator.set('Running... please wait') try: msg = self.test_queue.get(0) self.process_indicator.set('Done. See log for more details.') self.inferenceBtn['state'] = 'normal' self.trainingBtn['state'] = 'normal' except Queue.Empty: self.master.after(100, self.process_container_queue) def close_event(self): """ Stop the thread processes using OS related calls. """ if self.train_task is not None: self.train_task.stop_process() if self.test_task is not None: self.test_task.stop_process() os.system('cls' if platform.system == "Windows" else 'clear') root.destroy()
def __init__(self, master): self.fname="" #global variables self.t1=StringVar() self.t2=StringVar() self.t3=StringVar() self.t4=StringVar() self.t5=StringVar() self.t6=StringVar() self.t7=StringVar() self.t8=StringVar() self.t9=StringVar() self.t10=StringVar() self.t11=StringVar() self.t12=StringVar() self.t13=StringVar() self.t14=StringVar() self.t15=StringVar() self.t16=StringVar() self.t17=StringVar() self.t18=StringVar() self.t19=StringVar() self.t20=StringVar() self.t21=StringVar() self.t22=StringVar() self.t23=StringVar() self.t24=StringVar() self.t25=StringVar() self.t26=StringVar() self.var1=StringVar() self.var2=StringVar() self.var3=StringVar() self.var4=StringVar() self.var5=StringVar() self.var6=StringVar() self.var7=StringVar() self.var8=StringVar() self.var9=StringVar() self.var10=StringVar() self.var11=StringVar() self.var12=StringVar() self.var13=StringVar() self.var14=StringVar() self.var15=StringVar() self.var16=StringVar() self.var17=StringVar() self.var18=StringVar() self.var19=StringVar() self.var20=StringVar() self.var21=StringVar() self.var22=StringVar() self.var23=StringVar() self.var24=StringVar() self.var25=StringVar() self.var26=StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=650, height=410) #end #title of window master.title("Airodump-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont=tkFont.Font(family="Helvetica", size=15,underline = True) self.myfontnew=tkFont.Font(family="Helvetica", size=11,underline = True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb,name="frame_content", bg="white") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook # repeat for each tab self.frame_content2 = Frame(nb, name='frame_content2', bg="white") nb.add(self.frame_content2, text="Filter-2") self.frame_content3 = Frame(nb, name='frame_content3', bg="white") nb.add(self.frame_content3, text="Filter-3") self.frame_content4 = Frame(nb, name='frame_content4', bg="white") nb.add(self.frame_content4, text="Filter-4") self.frame_content7 = Frame(nb, name='frame_content7', bg="white") nb.add(self.frame_content7, text="Detect Devices") self.frame_content5 = Frame(nb, name='frame_content5', bg="white") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text = 'Airodump-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) btndetect=Button(self.frame_content7, text = 'Detect', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 1, column = 0, padx = 5, pady = 5) btndbrowse=Button(self.frame_content7, text = 'Attach File', command =self.browse_file, height=2, width=15, font=self.customFont).grid(row = 3, column = 0, padx = 5, pady = 5) self.lilnew1=Listbox(self.frame_content7,bg="black", fg="white", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row = 1, column = 1, rowspan=3) #End Label(self.frame_content, text = 'Airodump-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) Label(self.frame_content, text = 'Options :',font=self.myfontnew, bg="white").grid(row = 1, column = 1) #Button(self.frame_content, text = 'ivs', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 0, padx = 5, pady = 5) #Button(self.frame_content, text = 'gpsd', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 1, padx = 5, pady = 5) #Button(self.frame_content, text = 'write', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 2, padx = 5, pady = 5) #command Listbox Label(self.frame_content5, text = 'Edit Command From Here',font=self.myfontnew, bg="white", justify=LEFT).grid(row = 0, column = 0) TextCommandBox=Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output=Text(self.frame_content5,bg="black", fg="white", font=self.myfont, height=20, width=42) self.output.grid(row = 0, column = 1, padx=50, pady=5, rowspan=3) btnsubmit=Button(self.frame_content5, width=15, height=2, text="Get Result", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear=Button(self.frame_content5, width=15, height=2, text="Clear Output", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "--ivs", \ onvalue = "--ivs", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var1) self.C1.grid(row = 2, column = 0, padx = 5, pady = 5) self.t1=Text(self.frame_content,height=1,width = 20) self.t1.grid(row = 2, column = 1, padx = 5, pady = 5) l1=Label(self.frame_content, text = ': Save only captured IVs',font=self.myfont, bg="white", justify=LEFT).grid(row = 2, column = 2, padx = 5, pady = 5) self.C2 = Checkbutton(self.frame_content, text = "--gpsd", \ onvalue = "--gpsd", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var2) self.C2.grid(row = 3, column = 0, padx = 5, pady = 5) self.t2=Text(self.frame_content,height=1,width = 20) self.t2.grid(row = 3, column = 1, padx = 5, pady = 5) l2=Label(self.frame_content, text = ': Use GPSd',font=self.myfont, bg="white", justify=LEFT).grid(row = 3, column = 2, padx = 5, pady = 5) self.C3 = Checkbutton(self.frame_content, text = "--write", \ onvalue = "--write", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var3) self.C3.grid(row = 4, column = 0, padx = 5, pady = 5) self.t3=Text(self.frame_content,height=1,width = 20) self.t3.grid(row = 4, column = 1, padx = 5, pady = 5) l3=Label(self.frame_content, text = ': Dump file prefix',font=self.myfont, bg="white", justify=LEFT).grid(row = 4, column = 2, padx = 5, pady = 5) self.C4 = Checkbutton(self.frame_content, text = "-w", \ onvalue = "-w", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var4) self.C4.grid(row = 5, column = 0, padx = 5, pady = 5) self.t4=Text(self.frame_content,height=1,width = 20) self.t4.grid(row = 5, column = 1, padx = 5, pady = 5) l4=Label(self.frame_content, text = ': same as --write',font=self.myfont, bg="white", justify=LEFT).grid(row = 5, column = 2, padx = 5, pady = 5) self.C5 = Checkbutton(self.frame_content, text = "--beacons", \ onvalue = "--beacon", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var5) self.C5.grid(row = 6, column = 0, padx = 5, pady = 5) self.t5=Text(self.frame_content,height=1,width = 20) self.t5.grid(row = 6, column = 1, padx = 5, pady = 5) l5=Label(self.frame_content, text = ': Record all beacons in dump file',font=self.myfont, bg="white", justify=LEFT).grid(row = 6, column = 2, padx = 5, pady = 5) self.C6 = Checkbutton(self.frame_content, text = "--update", \ onvalue = "--update", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var6) self.C6.grid(row = 7, column = 0, padx = 5, pady = 5) self.t6=Text(self.frame_content,height=1,width = 20) self.t6.grid(row = 7, column = 1, padx = 5, pady = 5) l6=Label(self.frame_content, text = ': Display update delay in seconds',font=self.myfont, bg="white", justify=LEFT).grid(row = 7, column = 2, padx = 5, pady = 5) self.C7 = Checkbutton(self.frame_content, text = "--showack", \ onvalue = "--showack", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var7) self.C7.grid(row = 8, column = 0, padx = 5, pady = 5) self.t7=Text(self.frame_content,height=1,width = 20) self.t7.grid(row = 8, column = 1, padx = 5, pady = 5) l7=Label(self.frame_content, text = ': Prints ack/cts/rts statistics',font=self.myfont, bg="white", justify=LEFT).grid(row = 8, column = 2, padx = 5, pady = 5) self.C8 = Checkbutton(self.frame_content2, text = "-h", \ onvalue = "-h", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var8) self.C8.grid(row = 9, column = 0, padx = 5, pady = 5) self.t8=Text(self.frame_content2,height=1,width = 20) self.t8.grid(row = 9, column = 1, padx = 5, pady = 5) l8=Label(self.frame_content2, text = ': Hides known stations for --showack',font=self.myfont, bg="white", justify=LEFT).grid(row = 9, column = 2, padx = 5, pady = 5) self.C9 = Checkbutton(self.frame_content2, text = "-f", \ onvalue = "-f", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var9) self.C9.grid(row = 10, column = 0, padx = 5, pady = 5) self.t9=Text(self.frame_content2,height=1,width = 20) self.t9.grid(row = 10, column = 1, padx = 5, pady = 5) l9=Label(self.frame_content2, text = ': Time in ms between hopping channels',font=self.myfont, bg="white", justify=LEFT).grid(row = 10, column = 2, padx = 5, pady = 5) Label(self.frame_content2, text = 'Airodump-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) self.C10 = Checkbutton(self.frame_content2, text = "--berlin", \ onvalue = "--berlin", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var10) self.C10.grid(row = 11, column = 0, padx = 5, pady = 5) self.t10=Text(self.frame_content2,height=1,width = 20) self.t10.grid(row = 11, column = 1, padx = 5, pady = 5) l10=Label(self.frame_content2, text = ': Time before removing the AP/client',font=self.myfont, bg="white", justify=LEFT).grid(row = 11, column = 2, padx = 5, pady = 5) self.C11 = Checkbutton(self.frame_content2, text = "-r", \ onvalue = "-r", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var11) self.C11.grid(row = 12, column = 0, padx = 5, pady = 5) self.t11=Text(self.frame_content2,height=1,width = 20) self.t11.grid(row = 12, column = 1, padx = 5, pady = 5) l11=Label(self.frame_content2, text = ': Read packets from that file',font=self.myfont, bg="white", justify=LEFT).grid(row = 12, column = 2, padx = 5, pady = 5) self.C12 = Checkbutton(self.frame_content2, text = "-x", \ onvalue = "-x", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var12) self.C12.grid(row = 13, column = 0, padx = 5, pady = 5) self.t12=Text(self.frame_content2,height=1,width = 20) self.t12.grid(row = 13, column = 1, padx = 5, pady = 5) l12=Label(self.frame_content2, text = ': Active Scanning Simulation',font=self.myfont, bg="white", justify=LEFT).grid(row = 13, column = 2, padx = 5, pady = 5) self.C13 = Checkbutton(self.frame_content2, text = " --output-format", \ onvalue = "--output-format", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var13) self.C13.grid(row = 14, column = 0, padx = 5, pady = 5) self.t13=Text(self.frame_content2,height=1,width = 20) self.t13.grid(row = 14, column = 1, padx = 5, pady = 5) l13=Label(self.frame_content2, text = ': Output format. Possible values',font=self.myfont, bg="white", justify=LEFT).grid(row = 14, column = 2, padx = 5, pady = 5) self.C14 = Checkbutton(self.frame_content2, text = " --ignore-negative-one", \ onvalue = "--ignore-negative-one", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var14) self.C14.grid(row = 15, column = 0, padx = 5, pady = 5) self.t14=Text(self.frame_content2,height=1,width = 20) self.t14.grid(row = 15, column = 1, padx = 5, pady = 5) l14=Label(self.frame_content2, text = ': Removes the message that says fixed channel',font=self.myfont, bg="white").grid(row = 15, column = 2, padx = 5, pady = 5) Label(self.frame_content3, text = 'Airodump-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) Label(self.frame_content3, text = 'Filter Options :',font=self.myfontnew, bg="white", justify=LEFT).grid(row = 16, column = 1) self.C15 = Checkbutton(self.frame_content3, text = "--encrypt", \ onvalue = "--encrypt", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var15) self.C15.grid(row = 17, column = 0, padx = 5, pady = 5) self.t15=Text(self.frame_content3,height=1,width = 20) self.t15.grid(row = 17, column = 1, padx = 5, pady = 5) l15=Label(self.frame_content3, text = ': Filter APs by cipher suite',font=self.myfont, bg="white", justify=LEFT).grid(row = 17, column = 2, padx = 5, pady = 5) self.C16 = Checkbutton(self.frame_content3, text = "--netmask", \ onvalue = "--netmask", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var16) self.C16.grid(row = 18, column = 0, padx = 5, pady = 5) self.t16=Text(self.frame_content3,height=1,width = 20) self.t16.grid(row = 18, column = 1, padx = 5, pady = 5) l16=Label(self.frame_content3, text = ': Filter APs by mask',font=self.myfont, bg="white", justify=LEFT).grid(row = 18, column = 2, padx = 5, pady = 5) self.C17 = Checkbutton(self.frame_content3, text = "--bssid", \ onvalue = "--bssid", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var17) self.C17.grid(row = 19, column = 0, padx = 5, pady = 5) self.t17=Text(self.frame_content3,height=1,width = 20) self.t17.grid(row = 19, column = 1, padx = 5, pady = 5) l17=Label(self.frame_content3, text = ': Filter APs by BSSID',font=self.myfont, bg="white", justify=LEFT).grid(row = 19, column = 2, padx = 5, pady = 5) self.C18 = Checkbutton(self.frame_content3, text = "--essid", \ onvalue = "--essid", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var18) self.C18.grid(row = 20, column = 0, padx = 5, pady = 5) self.t18=Text(self.frame_content3,height=1,width = 20) self.t18.grid(row = 20, column = 1, padx = 5, pady = 5) l18=Label(self.frame_content3, text = ': Filter APs by ESSID',font=self.myfont, bg="white", justify=LEFT).grid(row = 20, column = 2, padx = 5, pady = 5) self.C19 = Checkbutton(self.frame_content3, text = "--essid-regex", \ onvalue = "--essid-regex", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var19) self.C19.grid(row = 21, column = 0, padx = 5, pady = 5) self.t19=Text(self.frame_content3,height=1,width = 20) self.t19.grid(row = 21, column = 1, padx = 5, pady = 5) l19=Label(self.frame_content3, text = ': Filter APs by ESSID using \n a regular expression',font=self.myfont, bg="white", justify=LEFT).grid(row = 21, column = 2, padx = 5, pady = 5) self.C20 = Checkbutton(self.frame_content3, text = "-a", \ onvalue = "-a", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var20) self.C20.grid(row = 22, column = 0, padx = 5, pady = 5) self.t20=Text(self.frame_content3,height=1,width = 20) self.t20.grid(row = 22, column = 1, padx = 5, pady = 5) l20=Label(self.frame_content3, text = ': Filter unassociated clients',font=self.myfont, bg="white", justify=LEFT).grid(row = 22, column = 2, padx = 5, pady = 5) Label(self.frame_content4, text = 'Airodump-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) self.C21 = Checkbutton(self.frame_content4, text = "--channel", \ onvalue = "--channel", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var21) self.C21.grid(row = 23, column = 0, padx = 5, pady = 5) self.t21=Text(self.frame_content4,height=1,width = 20) self.t21.grid(row = 23, column = 1, padx = 5, pady = 5) l21=Label(self.frame_content4, text = ': Capture on specific channels',font=self.myfont, bg="white", justify=LEFT).grid(row = 23, column = 2, padx = 5, pady = 5) self.C22 = Checkbutton(self.frame_content4, text = "--band", \ onvalue = "--band", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var22) self.C22.grid(row = 24, column = 0, padx = 5, pady = 5) self.t22=Text(self.frame_content4,height=1,width = 20) self.t22.grid(row = 24, column = 1, padx = 5, pady = 5) l22=Label(self.frame_content4, text = ': Band on which airodump-ng should hop',font=self.myfont, bg="white", justify=LEFT).grid(row = 24, column = 2, padx = 5, pady = 5) self.C23 = Checkbutton(self.frame_content4, text = "-C", \ onvalue = "-C", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var23) self.C23.grid(row = 25, column = 0, padx = 5, pady = 5) self.t23=Text(self.frame_content4,height=1,width = 20) self.t23.grid(row = 25, column = 1, padx = 5, pady = 5) l23=Label(self.frame_content4, text = ': Uses these frequencies in MHz to hop',font=self.myfont, bg="white", justify=LEFT).grid(row = 25, column = 2, padx = 5, pady = 5) self.C24 = Checkbutton(self.frame_content4, text = "-s", \ onvalue = "-s", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var24) self.C24.grid(row = 26, column = 0, padx = 5, pady = 5) self.t24=Text(self.frame_content4,height=1,width = 20) self.t24.grid(row = 26, column = 1, padx = 5, pady = 5) l24=Label(self.frame_content4, text = ': same as --cswitch',font=self.myfont, bg="white", justify=LEFT).grid(row = 26, column = 2, padx = 5, pady = 5) self.C25 = Checkbutton(self.frame_content3, text = "--cswitch", \ onvalue = "--cswitch", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var25) self.C25.grid(row = 27, column = 0, padx = 5, pady = 5) self.t25=Text(self.frame_content3,height=1,width = 20) self.t25.grid(row = 27, column = 1, padx = 5, pady = 5) l25=Label(self.frame_content3, text = ': Set channel switching method',font=self.myfont, bg="white", justify=LEFT).grid(row = 27, column = 2, padx = 5, pady = 5) self.C26 = Checkbutton(self.frame_content4, text = "--help", \ onvalue = "--help", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var26) self.C26.grid(row = 28, column = 0, padx = 5, pady = 5) self.t26=Text(self.frame_content4,height=1,width = 20) self.t26.grid(row = 28, column = 1, padx = 5, pady = 5) l26=Label(self.frame_content4, text = ': Displays this usage screen',font=self.myfont, bg="white", justify=LEFT).grid(row = 28, column = 2, padx = 5, pady = 5)
def __init__(self, master): self.fname = "" #global variables self.t1 = StringVar() self.t2 = StringVar() self.t3 = StringVar() self.t4 = StringVar() self.t5 = StringVar() self.t6 = StringVar() self.t7 = StringVar() self.t8 = StringVar() self.t9 = StringVar() self.t10 = StringVar() self.var1 = StringVar() self.var2 = StringVar() self.var3 = StringVar() self.var4 = StringVar() self.var5 = StringVar() self.var6 = StringVar() self.var7 = StringVar() self.var8 = StringVar() self.var9 = StringVar() self.var10 = StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=650, height=500) #end #title of window master.title("Airdrop-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont = tkFont.Font(family="Helvetica", size=15, underline=True) self.myfontnew = tkFont.Font(family="Helvetica", size=11, underline=True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb, name="frame_content", bg="white") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook self.frame_content7 = Frame(nb, name='frame_content7', bg="white") nb.add(self.frame_content7, text="Detect Devices") # repeat for each tab self.frame_content5 = Frame(nb, name='frame_content5', bg="white") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text='Airdrop-ng', font=self.headerfont, bg="white", padx=10, pady=10).grid(row=0, column=0) btndetect = Button(self.frame_content7, text='Detect', command=self.canvas_detect, height=2, width=15, font=self.customFont).grid(row=1, column=0, padx=5, pady=5) btndbrowse = Button(self.frame_content7, text='Attach File', command=self.browse_file, height=2, width=15, font=self.customFont).grid(row=3, column=0, padx=5, pady=5) self.lilnew1 = Listbox(self.frame_content7, bg="black", fg="white", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row=1, column=1, rowspan=3) #End Label(self.frame_content, text='Airdrop-ng', font=self.headerfont, bg="white", padx=10, pady=10).grid(row=0, column=0) Label(self.frame_content, text='Options :', font=self.myfontnew, bg="white").grid(row=1, column=1) #Button(self.frame_content, text = 'ivs', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 0, padx = 5, pady = 5) #Button(self.frame_content, text = 'gpsd', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 1, padx = 5, pady = 5) #Button(self.frame_content, text = 'write', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 2, padx = 5, pady = 5) #command Listbox Label(self.frame_content5, text='Edit Command From Here', font=self.myfontnew, bg="white", justify=LEFT).grid(row=0, column=0) TextCommandBox = Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output = Text(self.frame_content5, bg="black", fg="white", font=self.myfont, height=20, width=42) self.output.grid(row=0, column=1, padx=50, pady=5, rowspan=3) btnsubmit = Button(self.frame_content5, width=15, height=2, text="Get Result", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear = Button(self.frame_content5, width=15, height=2, text="Clear Output", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "-i", \ onvalue = "-i", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var1) self.C1.grid(row=2, column=0, padx=5, pady=5) self.t1 = Text(self.frame_content, height=1, width=20) self.t1.grid(row=2, column=1, padx=5, pady=5) l1 = Label(self.frame_content, text=': Wireless card in monitor mode to inject from', font=self.myfont, bg="white", justify=LEFT).grid(row=2, column=2, padx=5, pady=5) self.C2 = Checkbutton(self.frame_content, text = "-t", \ onvalue = "-t", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var2) self.C2.grid(row=3, column=0, padx=5, pady=5) self.t2 = Text(self.frame_content, height=1, width=20) self.t2.grid(row=3, column=1, padx=5, pady=5) l2 = Label(self.frame_content, text=': Airodump txt file in CSV format NOT the pcap', font=self.myfont, bg="white", justify=LEFT).grid(row=3, column=2, padx=5, pady=5) self.C3 = Checkbutton(self.frame_content, text = "-p", \ onvalue = "-p", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var3) self.C3.grid(row=4, column=0, padx=5, pady=5) self.t3 = Text(self.frame_content, height=1, width=20) self.t3.grid(row=4, column=1, padx=5, pady=5) l3 = Label(self.frame_content, text=': Disable the use of Psyco JIT', font=self.myfont, bg="white", justify=LEFT).grid(row=4, column=2, padx=5, pady=5) self.C4 = Checkbutton(self.frame_content, text = "-r", \ onvalue = "-r", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var4) self.C4.grid(row=5, column=0, padx=5, pady=5) self.t4 = Text(self.frame_content, height=1, width=20) self.t4.grid(row=5, column=1, padx=5, pady=5) l4 = Label(self.frame_content, text=': Rule File for matched deauths)', font=self.myfont, bg="white", justify=LEFT).grid(row=5, column=2, padx=5, pady=5) self.C5 = Checkbutton(self.frame_content, text = "-u", \ onvalue = "-u", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var5) self.C5.grid(row=6, column=0, padx=5, pady=5) self.t5 = Text(self.frame_content, height=1, width=20) self.t5.grid(row=6, column=1, padx=5, pady=5) l5 = Label(self.frame_content, text=': Updates OUI list.', font=self.myfont, bg="white", justify=LEFT).grid(row=6, column=2, padx=5, pady=5) self.C6 = Checkbutton(self.frame_content, text = "-d", \ onvalue = "-d", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var6) self.C6.grid(row=8, column=0, padx=5, pady=5) self.t6 = Text(self.frame_content, height=1, width=20) self.t6.grid(row=8, column=1, padx=5, pady=5) l6 = Label(self.frame_content, text=': Injection driver. Default is mac80211.', font=self.myfont, bg="white", justify=LEFT).grid(row=8, column=2, padx=5, pady=5) self.C7 = Checkbutton(self.frame_content, text = "-s", \ onvalue = "-s", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var7) self.C7.grid(row=9, column=0, padx=5, pady=5) self.t7 = Text(self.frame_content, height=1, width=20) self.t7.grid(row=9, column=1, padx=5, pady=5) l7 = Label(self.frame_content, text=': Time to sleep between sending each packet', font=self.myfont, bg="white", justify=LEFT).grid(row=9, column=2, padx=5, pady=5) self.C8 = Checkbutton(self.frame_content, text = "-b", \ onvalue = "-b", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var8) self.C8.grid(row=10, column=0, padx=5, pady=5) self.t8 = Text(self.frame_content, height=1, width=20) self.t8.grid(row=10, column=1, padx=5, pady=5) l8 = Label(self.frame_content, text=': Turn on Rule Debugging', font=self.myfont, bg="white", justify=LEFT).grid(row=10, column=2, padx=5, pady=5) self.C9 = Checkbutton(self.frame_content, text = "-l", \ onvalue = "-l", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var9) self.C9.grid(row=11, column=0, padx=5, pady=5) self.t9 = Text(self.frame_content, height=1, width=20) self.t9.grid(row=11, column=1, padx=5, pady=5) l9 = Label(self.frame_content, text=': Enable Logging to a file', font=self.myfont, bg="white", justify=LEFT).grid(row=11, column=2, padx=5, pady=5) self.C10 = Checkbutton(self.frame_content, text = "-n", \ onvalue = "-n", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var10) self.C10.grid(row=12, column=0, padx=5, pady=5) self.t10 = Text(self.frame_content, height=1, width=20) self.t10.grid(row=12, column=1, padx=5, pady=5) l10 = Label(self.frame_content, text=': Time to sleep between loops', font=self.myfont, bg="white", justify=LEFT).grid(row=12, column=2, padx=5, pady=5)
def build_credits(self): if getattr(self, "home", False): self.home.pack_forget() if getattr(self, "license", False): self.license.pack_forget() self.credits = Frame(self.parent) self.credits.pack(expand=True, fill=BOTH) Label(self.credits, text="Credits", **self.style_text).pack(side=TOP, expand=True, fill=X) style = Style() style.configure("BW.TNotebook", background=self.parent.cget("bg"), borderwidth=1, relief=SUNKEN, highlightthickness=1) notebook = Notebook(self.credits, style="BW.TNotebook") write = ("Jean-Pierre Mandon", "Régis Blanchot", "Marcus Fazzi", "Jesus Carmona Esteban", "Alfred Broda", "Yeison Cardona", "Henk Van Beek", "Björn Pfeiffer", "Alexis Sánchez", ) label_write = Label(self.credits, text="\n\n".join(write)) label_write.pack(side=TOP, expand=True, fill=BOTH) notebook.add(label_write, text="Write by") doc = ("Benoit Espinola", "Sebastien Koechlin", "Ivan Ricondo", "Jesus Carmona Esteban", "Marcus Fazzi", "Régis Blanchot", ) label_doc = Label(self.credits, text="\n\n".join(doc)) label_doc.pack(side=TOP, expand=True, fill=BOTH) notebook.add(label_doc, text="Documented by") trans = ("Joan Espinoza", "Alexis Sánchez", "Régis Blanchot", "Moreno Manzini", "Yeison Cardona", "\"Avrin\"", ) label_trans = Label(self.credits, text="\n\n".join(trans)) label_trans.pack(side=TOP, expand=True, fill=BOTH) notebook.add(label_trans, text="Translated by") art = ("France Cadet", "Laurent Cos--tes", "Daniel Rodriguez", ) label_art = Label(self.credits, text="\n\n".join(art)) label_art.pack(side=TOP, expand=True, fill=BOTH) notebook.add(label_art, text="Art by") notebook.pack(side=TOP, fill=BOTH, expand=True) self.panel_buttons = Frame(self.credits) self.panel_buttons.pack(side=BOTTOM, fill=BOTH, expand=True) Button(self.panel_buttons, text="Close", command=self.quit).pack(side=RIGHT, fill=X, expand=True) Button(self.panel_buttons, text="License", command=self.build_license).pack(side=LEFT, fill=X, expand=True)
def cs_tabbar(root, w, h, names): nb = Notebook(root, width=w, height=h) tabs = [Frame(nb) for i in range(len(names))] # 5 tabs [nb.add(tabs[i], text=name) for i, name in enumerate(names)] nb.pack() return tabs
def __init__(self, master): self.fname = "" #global variables self.t1 = StringVar() self.t2 = StringVar() self.t3 = StringVar() self.t4 = StringVar() self.t5 = StringVar() self.t6 = StringVar() self.t7 = StringVar() self.t8 = StringVar() self.t9 = StringVar() self.t10 = StringVar() self.t11 = StringVar() self.t12 = StringVar() self.var1 = StringVar() self.var2 = StringVar() self.var3 = StringVar() self.var4 = StringVar() self.var5 = StringVar() self.var6 = StringVar() self.var7 = StringVar() self.var8 = StringVar() self.var9 = StringVar() self.var10 = StringVar() self.var11 = StringVar() self.var12 = StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=800, height=600) #end #title of window master.title("Airtun-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont = tkFont.Font(family="Helvetica", size=15, underline=True) self.myfontnew = tkFont.Font(family="Helvetica", size=11, underline=True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb, name="frame_content", bg="white") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook # repeat for each tab self.frame_content7 = Frame(nb, name='frame_content7', bg="white") nb.add(self.frame_content7, text="Detect Devices") self.frame_content5 = Frame(nb, name='frame_content5', bg="white") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text='Aigraph-ng', font=self.headerfont, bg="white", padx=10, pady=10).grid(row=0, column=0) btndetect = Button(self.frame_content7, text='Detect', command=self.canvas_detect, height=2, width=15, font=self.customFont).grid(row=1, column=0, padx=5, pady=5) btndbrowse = Button(self.frame_content7, text='Attach File', command=self.browse_file, height=2, width=15, font=self.customFont).grid(row=3, column=0, padx=5, pady=5) self.lilnew1 = Listbox(self.frame_content7, bg="black", fg="white", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row=1, column=1, rowspan=3) #End Label(self.frame_content, text='Airtun-ng', font=self.headerfont, bg="white", padx=10, pady=10).grid(row=0, column=0) Label(self.frame_content, text='Options :', font=self.myfontnew, bg="white").grid(row=1, column=1) #Button(self.frame_content, text = 'ivs', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 0, padx = 5, pady = 5) #Button(self.frame_content, text = 'gpsd', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 1, padx = 5, pady = 5) #Button(self.frame_content, text = 'write', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 2, padx = 5, pady = 5) #command Listbox Label(self.frame_content5, text='Edit Command From Here', font=self.myfontnew, bg="white", justify=LEFT).grid(row=0, column=0) TextCommandBox = Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output = Text(self.frame_content5, bg="black", fg="white", font=self.myfont, height=20, width=42) self.output.grid(row=0, column=1, padx=50, pady=5, rowspan=3) btnsubmit = Button(self.frame_content5, width=15, height=2, text="Get Result", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear = Button(self.frame_content5, width=15, height=2, text="Clear Output", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "-x", \ onvalue = "-x", offvalue ="", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var1) self.C1.grid(row=2, column=0, padx=5, pady=5) self.t1 = Text(self.frame_content, height=1, width=20) self.t1.grid(row=2, column=1, padx=5, pady=5) l1 = Label(self.frame_content, text=': maximum number of packets per second (optional)', font=self.myfont, bg="white", justify=LEFT).grid(row=2, column=2, padx=5, pady=5) self.C2 = Checkbutton(self.frame_content, text = "-a", \ onvalue = "-a", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var2) self.C2.grid(row=3, column=0, padx=5, pady=5) self.t2 = Text(self.frame_content, height=1, width=20) self.t2.grid(row=3, column=1, padx=5, pady=5) l2 = Label(self.frame_content, text=': set Access Point MAC address (mandatory)', font=self.myfont, bg="white", justify=LEFT).grid(row=3, column=2, padx=5, pady=5) self.C3 = Checkbutton(self.frame_content, text = "-i", \ onvalue = "-i", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var3) self.C3.grid(row=4, column=0, padx=5, pady=5) self.t3 = Text(self.frame_content, height=1, width=20) self.t3.grid(row=4, column=1, padx=5, pady=5) l3 = Label(self.frame_content, text=': capture packets from this interface (optional)', font=self.myfont, bg="white", justify=LEFT).grid(row=4, column=2, padx=5, pady=5) self.C4 = Checkbutton(self.frame_content, text = "-y", \ onvalue = "-y", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var5) self.C4.grid(row=5, column=0, padx=5, pady=5) self.t4 = Text(self.frame_content, height=1, width=20) self.t4.grid(row=5, column=1, padx=5, pady=5) l4 = Label( self.frame_content, text= ': read PRGA from this file (optional / one of -y or -w must be defined)', font=self.myfont, bg="white", justify=LEFT).grid(row=5, column=2, padx=5, pady=5) self.C5 = Checkbutton(self.frame_content, text = "-W", \ onvalue = "-W", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var6) self.C5.grid(row=6, column=0, padx=5, pady=5) self.t5 = Text(self.frame_content, height=1, width=20) self.t5.grid(row=6, column=1, padx=5, pady=5) l5 = Label( self.frame_content, text= ': use this WEP-KEY to encrypt packets (optional / one of -y or -w must be defined)', font=self.myfont, bg="white", justify=LEFT).grid(row=6, column=2, padx=5, pady=5) self.C6 = Checkbutton(self.frame_content, text = "-t", \ onvalue = "-t", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var7) self.C6.grid(row=8, column=0, padx=5, pady=5) self.t6 = Text(self.frame_content, height=1, width=20) self.t6.grid(row=8, column=1, padx=5, pady=5) l6 = Label( self.frame_content, text= ': send frames to AP (1) or to client (0) (optional / defaults to 0)', font=self.myfont, bg="white", justify=LEFT).grid(row=8, column=2, padx=5, pady=5) self.C7 = Checkbutton(self.frame_content, text = "-r", \ onvalue = "-r", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var8) self.C7.grid(row=9, column=0, padx=5, pady=5) self.t7 = Text(self.frame_content, height=1, width=20) self.t7.grid(row=9, column=1, padx=5, pady=5) l7 = Label(self.frame_content, text=': read frames out of pcap file (optional)', font=self.myfont, bg="white", justify=LEFT).grid(row=9, column=2, padx=5, pady=5) self.C8 = Checkbutton(self.frame_content, text = "-h", \ onvalue = "-h", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var9) self.C8.grid(row=10, column=0, padx=5, pady=5) self.t8 = Text(self.frame_content, height=1, width=20) self.t8.grid(row=10, column=1, padx=5, pady=5) l8 = Label(self.frame_content, text=': source MAC address', font=self.myfont, bg="white", justify=LEFT).grid(row=10, column=2, padx=5, pady=5) self.C9 = Checkbutton(self.frame_content, text = "-H", \ onvalue = "-H", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var10) self.C9.grid(row=11, column=0, padx=5, pady=5) self.t9 = Text(self.frame_content, height=1, width=20) self.t9.grid(row=11, column=1, padx=5, pady=5) l9 = Label(self.frame_content, text=': Display help. Long form help', font=self.myfont, bg="white", justify=LEFT).grid(row=11, column=2, padx=5, pady=5) Label(self.frame_content, text='Repeater Options :', font=self.myfontnew, bg="white").grid(row=12, column=1) self.C10 = Checkbutton(self.frame_content, text = "--repeat", \ onvalue = "--repeat", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var11) self.C10.grid(row=13, column=0, padx=5, pady=5) self.t10 = Text(self.frame_content, height=1, width=20) self.t10.grid(row=13, column=1, padx=5, pady=5) l10 = Label(self.frame_content, text=': activates repeat mode. Short form -f.', font=self.myfont, bg="white", justify=LEFT).grid(row=13, column=2, padx=5, pady=5) self.C11 = Checkbutton(self.frame_content, text = "--bssid", \ onvalue = "--bssid", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var12) self.C11.grid(row=14, column=0, padx=5, pady=5) self.t11 = Text(self.frame_content, height=1, width=20) self.t11.grid(row=14, column=1, padx=5, pady=5) l11 = Label(self.frame_content, text=': BSSID to repeat. Short form -d.', font=self.myfont, bg="white", justify=LEFT).grid(row=14, column=2, padx=5, pady=5) self.C12 = Checkbutton(self.frame_content, text = "--netmask", \ onvalue = "--netmask", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont) self.C12.grid(row=15, column=0, padx=5, pady=5) self.t12 = Text(self.frame_content, height=1, width=20) self.t12.grid(row=15, column=1, padx=5, pady=5) l12 = Label(self.frame_content, text=': netmask for BSSID filter. Short form -m.', font=self.myfont, bg="white", justify=LEFT).grid(row=15, column=2, padx=5, pady=5)
class Application(tk.Frame): def __init__(self, master): tk.Frame.__init__(self, master) self.master = master self.master.title("Netstat Live") self.pack(fill=tk.BOTH, expand=tk.Y) master.protocol("WM_DELETE_WINDOW", self.app_quit) self._app_quit = False self._freeze = False self.tabs = Notebook(self) self.tabs_frames = OrderedDict() self.tabs_frames['TCP4'] = {'query': netstat_tcp4} self.tabs_frames['UDP4'] = {'query': netstat_udp4} self.tabs_frames['TCP6'] = {'query': netstat_tcp6} self.tabs_frames['UDP6'] = {'query': netstat_udp6} for tab in self.tabs_frames: # Creating tabs self.tabs_frames[tab]['tab'] = tk.Frame(self.tabs) self.tabs.add(self.tabs_frames[tab]['tab'], text=tab) #self.tabs_frames[tab]['tab'].pack(fill=tk.BOTH) # Adding Treeview widget to tabs self.tabs_frames[tab]['tbl'] = Treeview(self.tabs_frames[tab]['tab']) self.tabs_frames[tab]['tbl']['columns'] = ('Pid', 'User', 'Local addr', 'Remote addr', 'State') for column in self.tabs_frames[tab]['tbl']['columns']: self.tabs_frames[tab]['tbl'].heading(column, text=column) self.tabs_frames[tab]['tbl'].column(column, width=150) self.tabs_frames[tab]['scrollbar_y'] = Scrollbar(self.tabs_frames[tab]['tab'], orient=tk.VERTICAL, command=self.tabs_frames[tab]['tbl'].yview) self.tabs_frames[tab]['tbl']['yscroll'] = self.tabs_frames[tab]['scrollbar_y'].set self.tabs_frames[tab]['scrollbar_y'].pack(side=tk.RIGHT, fill=tk.Y) self.tabs_frames[tab]['tbl'].pack(expand=tk.Y, fill=tk.BOTH) # Bind right click event for displaying context menu self.tabs_frames[tab]['tbl'].bind('<Button-3>', self.context_menu_popup) self.tabs_frames[tab]['tbl'].bind('<Button-1>', self.context_menu_unpost) # Creating queue for each tab self.tabs_frames[tab]['queue'] = Queue(maxsize=1) self.tabs.pack(fill=tk.BOTH, expand=tk.Y) # Freeze button self.buttons = tk.Frame(master) self.buttons.pack(side=tk.BOTTOM, fill=tk.BOTH) self.freeze_btn = tk.Button(self.buttons, text='Freeze', command=self.freeze_btn_handler) self.freeze_btn.pack(side=tk.RIGHT) # Check dependencies self._xclip = True self._whois = True try: out = subprocess.check_output(['xclip', '-h'], stderr=subprocess.STDOUT) except: self._xclip = False try: out = subprocess.check_output(['whois', '--version'], stderr=subprocess.STDOUT) except: self._whois = False # Connections list context menu self._remote_addr = '' self.context_menu = tk.Menu(self, tearoff=0) if self._xclip: self.context_menu.add_command(label='Copy remote addr.', command=self.xclip) if self._whois: self.context_menu.add_command(label='Whois', command=self.whois) self.tabs.bind('<Button-1>', self.context_menu_unpost) self.poll = Thread(target=self.thread) self.poll.start() def context_menu_popup(self, event): current_tab = self.get_active_tab() tbl = self.tabs_frames[current_tab]['tbl'] item = tbl.identify_row(event.y) if item and len(tbl.get_children(item)) == 0: tbl.selection_set(item) # Get remote addr value self._remote_addr = tbl.set(item, column='Remote addr') self.context_menu.post(event.x_root, event.y_root) else: # Mouse pointer is not over item pass def context_menu_unpost(self, event): self.context_menu.unpost() def get_active_tab(self): try: current_tab = self.tabs.tab(self.tabs.select(), 'text') return current_tab except RuntimeError: # Sometimes raised on KeyboardInterrupt sys.stderr.write('Terminated.\n') self._app_quit = True sys.exit(0) def thread(self): while not self._app_quit: current_tab = self.tabs_frames[self.get_active_tab()] if current_tab['queue'].empty(): # Get netstat data try: netstat = current_tab['query']() except RuntimeError: sys.stderr.write('Main thread destroyed.\n') # Put to queue current_tab['queue'].put(netstat, True) else: sleep(0.5) def app_quit(self): self._app_quit = True self.master.destroy() def refresh(self): current_tab = self.get_active_tab() queue = self.tabs_frames[current_tab]['queue'] if not self._freeze and not queue.empty(): # Get active tab tbl = self.tabs_frames[current_tab]['tbl'] # Remember focus self.tabs_frames[current_tab]['focus'] = tbl.selection() data = queue.get(False) processes = [] for proc in data: processes.append(proc[6]) processes = tuple(set(processes)) # Unique list of processes in netstat # Clear tree: for proc in tbl.get_children(): tbl.delete(*tbl.get_children(proc)) for proc in processes: proc_name = '%s (%s)' % (os.path.basename(str(proc)), str(proc)) if not tbl.exists(proc_name): # Create root items for each process name tbl.insert('', 'end', proc_name, text=proc_name) for proc in data: proc_name = '%s (%s)' % (os.path.basename(str(proc[6])), str(proc[6])) # Pid User Local addr Remote addr State values = (str(proc[5]), str(proc[1]), str(proc[2]), str(proc[3]), str(proc[4])) h = hash(tuple(proc)) try: tbl.insert(proc_name, 'end', h, text=proc_name, values=values) except: pass # Removing empty root items for proc in tbl.get_children(): if len(tbl.get_children(proc)) == 0: tbl.delete(proc) # Restore focus try: tbl.selection_set(self.tabs_frames[current_tab]['focus']) except: pass self.master.after(500, self.refresh) def freeze_btn_handler(self): # Toggle freeze state if self._freeze: self.freeze_btn['text'] = 'Freeze' else: self.freeze_btn['text'] = 'Continue' self._freeze = not self._freeze def xclip(self, data=None): if not data: data = self._remote_addr try: xclip = subprocess.Popen(['xclip', '-selection', 'clipboard'], stdin=subprocess.PIPE) xclip.communicate(input=data) xclip.terminate() except: pass def whois(self, addr=None): if not addr: addr = self._remote_addr addr = addr.split(':') try: reverse = subprocess.check_output(['dig', '+short', '-x', addr[0]]) except: reverse = None try: out = subprocess.check_output(['whois', addr[0]]) except: out = 'No info for this host.' self.whois_popup = {} self.whois_popup['window'] = tk.Toplevel(self) self.whois_popup['window'].title('Whois %s' % addr[0]) self.whois_popup['frame'] = tk.Frame(self.whois_popup['window']) self.whois_popup['frame'].pack(fill=tk.BOTH, expand=tk.Y) self.whois_popup['text'] = tk.Text(self.whois_popup['frame'], wrap=tk.WORD, height=32, width=96) self.whois_popup['text'].pack(fill=tk.BOTH, expand=tk.Y, side=tk.LEFT) self.whois_popup['scrollbar_y'] = Scrollbar(self.whois_popup['frame']) self.whois_popup['scrollbar_y'].config(command=self.whois_popup['text'].yview) self.whois_popup['scrollbar_y'].pack(side=tk.RIGHT, fill=tk.Y) self.whois_popup['text'].config(yscrollcommand=self.whois_popup['scrollbar_y'].set) if reverse: reverse = 'Reverse lookup: %s\n' % reverse self.whois_popup['text'].insert(tk.END, reverse) self.whois_popup['text'].insert(tk.END, out) tk.Button(self.whois_popup['window'], text='Ok', command=self.whois_popup['window'].destroy).pack()
class DataExploreGUI(Frame): def __init__(self, master): Frame.__init__(self, master) self.nb = Notebook(self) self.tab1 = Frame(self.nb) self.tab2 = Frame(self.nb) self.tab3 = Frame(self.nb) self.nb.add(self.tab1, text='Raw Data') self.nb.add(self.tab2, text='Quality metrics') self.nb.add(self.tab3, text='Friction tests') self.nb.grid(row=0, column=0, sticky=NW) self.intSettings = {'Group': IntVar(value=0)} self.intSettings2 = {'Group': IntVar(value=0)} self.intSettings3 = {'Group': IntVar(value=0)} self.intSettings4 = {'Group': IntVar(value=0)} # Tab1 buttons self.buttonLoadFile = Button(self.tab1, text="Load Data File", command=self.loadFile) self.buttonLoadFile.grid(row=0, column=0, padx=5, pady=5, sticky=W + E) self.buttonSavePlot = Button(self.tab1, text="Save Plot as SVG", command=self.savePlotFrame1) self.buttonSavePlot.grid(row=0, column=1, padx=5, pady=5, sticky=W + E) self.frameGroups = LabelFrame(self.tab1, text="Group Selection") self.frameGroups.grid(row=1, column=0, padx=5, pady=5, sticky=N + E + W + S) Label(self.frameGroups, text="").pack(anchor=W) self.frameChannels = LabelFrame(self.tab1, text="Channel Selection") self.frameChannels.grid(row=1, column=1, padx=5, pady=5, sticky=N + E + W + S) Label(self.frameChannels, text="").pack(anchor=W) self.buttonPlot = Button(self.tab1, text="Plot Selected Channels", command=self.plotChannels) self.buttonPlot.grid(row=2, column=0, padx=5, pady=5, sticky=W + E) self.grid() self.fg_sz = (12, 6) self.fig = plt.Figure(figsize=self.fg_sz) self.canvas = FigureCanvasTkAgg(self.fig, master=self.tab1) self.canvas.get_tk_widget().grid(column=2, row=1) # Tab2 button self.frameGroups3 = LabelFrame(self.tab2, text="Stress Relaxation") self.frameGroups3.grid(row=1, column=0, padx=5, pady=5, sticky=N + E + W + S) Label(self.frameGroups3, text="").pack(anchor=W) self.frameGroups4 = LabelFrame(self.tab2, text="X-Y alignment") self.frameGroups4.grid(row=1, column=1, padx=5, pady=5, sticky=N + E + W + S) Label(self.frameGroups4, text="").pack(anchor=W) self.fig2 = plt.Figure(figsize=self.fg_sz) self.canvas2 = FigureCanvasTkAgg(self.fig2, master=self.tab2) self.canvas2.get_tk_widget().grid(column=2, row=1) self.buttonSavePlot2 = Button(self.tab2, text="Save Plot as SVG", command=self.savePlotFrame2) self.buttonSavePlot2.grid(row=0, column=0, padx=5, pady=5, sticky=W + E) # Tab3 button self.buttonAnalyze = Button(self.tab3, text="Plot friction line", command=self.plotMu) self.buttonAnalyze.grid(row=0, column=0, padx=5, pady=5, sticky=W + E) self.frameGroups2 = LabelFrame(self.tab3, text="Friction Run") self.frameGroups2.grid(row=1, column=0, padx=5, pady=5, sticky=N + E + W + S) Label(self.frameGroups2, text="").pack(anchor=W) def loadFile(self): # read file into data object self.filename = get_filename() file_info, repaired = decompose_file_name(self.filename) if repaired: self.data = cPickle.load(open(self.filename, "rb")) else: self.data = parse_file(self.filename) self.data_obj = FrictionData(self.data, file_info) if self.filename: for child in self.frameGroups.pack_slaves(): child.destroy() count = 1 count2 = 1 self.blockmap = {} self.blockmap2 = {} for i, g in enumerate(self.data.keys()): tag = self.data[g]['tag'][0] Radiobutton(self.frameGroups, text='blk' + g[-1] + ': ' + tag[1:-1], indicatoron=0, width=20, variable=self.intSettings["Group"], command=self.populateChannelList, value=i).pack(anchor=W) if tag == '<Scripts>': # raw data curves Radiobutton(self.frameGroups2, text='run' + str(count), indicatoron=0, width=20, variable=self.intSettings2["Group"], command=self.plotCurves, value=i).pack(anchor=W) self.blockmap[g] = count - 1 # x-y alignment Radiobutton(self.frameGroups4, text='run' + str(count), indicatoron=0, width=20, variable=self.intSettings4["Group"], command=self.plotAlignment, value=i).pack(anchor=W) self.blockmap[g] = count - 1 count += 1 elif tag == '<Stress Relaxation>': Radiobutton(self.frameGroups3, text='Stress Relax' + str(count), indicatoron=0, width=20, variable=self.intSettings3["Group"], command=self.plotProny, value=i).pack(anchor=W) self.blockmap2[g] = count2 - 1 count2 += 1 self.channelSelections = {} for c in self.data['block0']['data'].keys(): if c == 'time': continue self.channelSelections[c] = IntVar(value=0) Checkbutton(self.frameChannels, text=c, variable=self.channelSelections[c]).pack(anchor=W) def populateChannelList(self): g = self.data.keys()[self.intSettings['Group'].get()] self.channelSelections = {} for child in self.frameChannels.pack_slaves(): child.destroy() for c in self.data[g]['data'].keys(): if c == 'time': continue self.channelSelections[c] = IntVar(value=0) Checkbutton(self.frameChannels, text=c, variable=self.channelSelections[c]).pack(anchor=W) def plotChannels(self): self.fig = plt.Figure(figsize=self.fg_sz) self.canvas = FigureCanvasTkAgg(self.fig, master=self.tab1) self.canvas.get_tk_widget().grid(column=2, row=1) keys = [] for c in self.channelSelections.keys(): if self.channelSelections[c].get(): keys.append(c) block = 'block' + str(self.intSettings["Group"].get()) for i, k in enumerate(keys): self.ax = self.fig.add_subplot(len(keys), 1, i+1, ylabel=k) t = self.data[block]['data']['time'] x = self.data[block]['data'][k][:, 0] y = self.data[block]['data'][k][:, 1] z = self.data[block]['data'][k][:, 2] self.ax.hold(True) self.ax.plot(t, x, label='x') self.ax.plot(t, y, label='y') self.ax.plot(t, z, label='z') legend = self.ax.legend(loc='upper right', prop={'size': 3}, shadow=True) for label in legend.get_texts(): label.set_fontsize('small') plt.show() def savePlotFrame1(self): pltsavename = tkFileDialog.asksaveasfilename( parent=root, initialdir=os.getcwd(), title="Save As" ) # check input for errors pltsavename = '' for i in xrange(len(pltsavenamein)): if pltsavenamein[i] == '.': pltsavename = pltsavename + '_' else: pltsavename = pltsavename + pltsavenamein[i] pltsavename = pltsavename + '.svg' if pltsavename: self.fig.savefig(pltsavename, format='svg', transparent=True) def savePlotFrame2(self): pltsavename = tkFileDialog.asksaveasfilename( parent=root, initialdir=os.getcwd(), title="Save As" ) # check input for errors pltsavename = '' for i in xrange(len(pltsavenamein)): if pltsavenamein[i] == '.': pltsavename = pltsavename + '_' else: pltsavename = pltsavename + pltsavenamein[i] pltsavename = pltsavename + '.svg' if pltsavename: self.fig2.savefig(pltsavename, format='svg', transparent=True) def plotMu(self): self.data_obj.show_friction_line() def plotAlignment(self): self.fig2 = plt.Figure(figsize=self.fg_sz) self.canvas2 = FigureCanvasTkAgg(self.fig2, master=self.tab2) self.canvas2.get_tk_widget().grid(column=2, row=1) g = 'block' + str(self.intSettings4["Group"].get()) r = float(self.blockmap[g]) df = self.data_obj.test_summary_frame() x = df[df['load_index'] == r]['alig_x'].values y = df[df['load_index'] == r]['alig_y'].values for i in xrange(2): self.ax2 = self.fig2.add_subplot(1, 2, i+1, ylabel='y position (mm)', xlabel='x position (mm)') self.ax2.plot(x[i], y[i], "or") plt.show() def plotProny(self): self.fig2 = plt.Figure(figsize=self.fg_sz) self.canvas2 = FigureCanvasTkAgg(self.fig2, master=self.tab2) self.canvas2.get_tk_widget().grid(column=2, row=1) g = 'block' + str(self.intSettings3["Group"].get()) r = int(self.blockmap2[g]) df = self.data_obj.test_summary_frame() F = self.data_obj.Fz_all[r] E = df.loc[r]['E'] p = df.loc[r]['p'] tau = df.loc[r]['tau'] e1 = self.data_obj.e1_all[r] t1 = self.data_obj.t1_all[r] t = self.data_obj.t_all[r] y = prony_hold(t, E, p, tau, e1, t1) self.ax3 = self.fig2.add_subplot(1, 1, 1, xlabel='time (s)', ylabel='Fz (N)') self.ax3.hold(True) self.ax3.plot(t, F, 'o') self.ax3.plot(t, y) plt.show() def plotCurves(self): g = 'block' + str(self.intSettings2["Group"].get()) r = float(self.blockmap[g]) self.data_obj.show_friction_curve(run=r)
def initUI(self, students): note = Notebook(self.parent) #Tabs external_tab = Frame(note) records_tab = Frame(note) edit_tab = Frame(note) note.config() note.add(external_tab, text="Attendance") note.add(records_tab, text=" Records ") note.add(edit_tab, text=" Edit ") #Create the scrollable list on the left side scrollbar = tk.Scrollbar(external_tab, orient="vertical") lb = tk.Listbox(external_tab, selectmode=MULTIPLE, width=30, height=20, yscrollcommand=scrollbar.set) scrollbar.config(command=lb.yview) scrollbar.pack(side="left", fill="y") lb.pack(side="left", fill="y") self.setList(students, lb) #Add dialogue box for new student frame1 = Frame(external_tab, relief=GROOVE, borderwidth=0) info_frame2 = Frame(records_tab, relief=GROOVE, borderwidth=3) name = tk.Entry(frame1) name.pack(anchor=CENTER, side=BOTTOM) frame1.pack(fill=BOTH, expand=1) self.pack(fill=BOTH, expand=1) #Add the buttons on the right to manipulate the list frame = Frame(external_tab, relief=RAISED, borderwidth=0) addButton = Button( frame, text="Add Student", command=lambda: self.addStudent(name.get(), lb, lb2, lb3)) addButton.pack() deleteButton = Button(frame, text="Remove Student", command=lambda: self.deleteStudent( lb.curselection(), lb, lb2, lb3)) deleteButton.pack(anchor=E, pady=20, side=RIGHT) frame.pack() markCalendarFrame = Frame(external_tab) self.markCalendar = Calendar.newCalendar(markCalendarFrame, True) markCalendarFrame.pack() #Add the reset button and the mark absent button frame2 = Frame(external_tab, relief=RAISED, borderwidth=0) absentButton = Button( frame2, text="Mark as Absent", command=lambda: self.markAbsent(lb.curselection())) absentButton.pack(side=TOP, pady=20) resetButton = Button(frame2, text="Reset Today's Attendance", command=self.resetDay) resetButton.pack(side=TOP, pady=20) frame2.pack(fill=BOTH, expand=1) self.pack(fill=BOTH, expand=1) #Create the Records Listbox scrollbar2 = tk.Scrollbar(records_tab, orient="vertical") lb2 = tk.Listbox(records_tab, selectmode=BROWSE, width=30, height=20, yscrollcommand=scrollbar2.set) scrollbar2.config(command=lb2.yview) scrollbar2.pack(side="left", fill="y") #Bind a click to finding attendance lb2.bind('<<ListboxSelect>>', self.getTotals) lb2.pack(side="left", fill="y") self.setList(students, lb2) #Create the text that updates in real time based on selection self.present_variable.set('') self.absent_variable.set('') info_frame = Frame(records_tab, relief=GROOVE, borderwidth=3) present_setup = tk.Message(records_tab, anchor=W, justify=CENTER, width=100, text="Days Present: ") present_setup.pack(fill=X, side=TOP) present_message = tk.Message(records_tab, anchor=E, justify=CENTER, width=100, textvariable=self.present_variable) present_message.pack(fill=X, side=TOP) info_frame.pack(side=TOP) absent_setup = tk.Message(records_tab, anchor=W, justify=CENTER, width=100, text="Days Absent: ") absent_setup.pack(fill=X, side=TOP) absent_variable = tk.Message(records_tab, anchor=E, justify=CENTER, width=100, textvariable=self.absent_variable) absent_variable.pack(fill=X, side=TOP) info_frame2.pack(side=TOP) #Create a see Calendar Button # calendarButton = Button(records_tab, text="See Specific Days", command= lambda : self.setStudentCalendar(lb2.curselection())) # calendarButton.pack(side=TOP) calendar_frame = Frame(records_tab, relief=GROOVE, borderwidth=3, width=300) self.theCalendar = Calendar.newCalendar(calendar_frame, False) calendar_frame.pack(side=TOP, pady=20) clearCalendarButton = Button(records_tab, text="Clear Calendar", command=self.clearStudentCalendar) clearCalendarButton.pack(side=TOP) # close and excel buttons bottomFrame = Frame(width=20) excelButton = Button(bottomFrame, text="Generate Excel", command=self.generateExcel) excelButton.pack(side=LEFT, padx=5, pady=5) closeButton = Button(bottomFrame, text="Close", command=self.closeButton) closeButton.pack(side=RIGHT, padx=10, pady=5) bottomFrame.pack(side=BOTTOM) scrollbar3 = tk.Scrollbar(edit_tab, orient="vertical") lb3 = tk.Listbox(edit_tab, selectmode=BROWSE, width=30, height=20, yscrollcommand=scrollbar3.set) scrollbar3.config(command=lb3.yview) scrollbar3.pack(side="left", fill="y") lb3.bind('<<ListboxSelect>>', self.get_dates) lb3.pack(side="left", fill="y") self.setList(students, lb3) addFrame = Frame(edit_tab) remove_date = Button( addFrame, text="Remove Date", command=lambda: self.remove_date(self.lbedit.curselection( ), self.lbedit2.curselection(), True)) remove_date.pack(side=TOP, pady=2) add_dates = Button(addFrame, text="Add Date", command=lambda: self.add_date(lb3.curselection())) add_dates.pack(side=LEFT, pady=2) edit_selection = Button( addFrame, text="Edit Date", command=lambda: self.edit_date(self.lbedit.curselection(), self.lbedit2.curselection())) edit_selection.pack(side=LEFT, pady=2) addFrame.pack(side=TOP) dateFrame = Frame(edit_tab) presentLabel = Label(dateFrame, text="Present") presentLabel.pack(side=TOP) scrollbar4 = tk.Scrollbar(dateFrame, orient="vertical") self.lbedit = tk.Listbox(dateFrame, selectmode=BROWSE, width=29, height=9, yscrollcommand=scrollbar4.set) self.lbedit.pack(side=TOP) absentLabel = Label(dateFrame, text="Absent") absentLabel.pack(side=TOP) scrollbar5 = tk.Scrollbar(dateFrame, orient="vertical") self.lbedit2 = tk.Listbox(dateFrame, selectmode=BROWSE, width=29, height=8, yscrollcommand=scrollbar5.set) self.lbedit2.pack(side=TOP, fill="y") dateFrame.pack(side=LEFT, fill="y") self.pack(fill=BOTH, expand=1) note.pack(fill=BOTH, expand=1)
class Propietarios(Frame): def __init__(self, parent, controller): Frame.__init__(self, parent) #VARIABLES GLOBALES global cedula, titulo, ingreso, rsocial, residencia, nombres, apellidos, direccion, telefono, oficina, tel, telfax, correo, cumpleanos, dia, mes, envio, celular, tipopersona, comision, retefuente, reteiva, gcontribuyente, gfactura, gcheque, reprecc, reprenombres, repredireccion, repretelefono, repreoficina, repretel, reprebanco, repretcuenta, reprenumcuenta, tit1cc, tit1nombres, tit1banco, tit1tcuenta, tit1numcuenta, tit2cc, tit2nombres, tit2banco, tit2tcuenta, tit2numcuenta, lb, note, popmenu, busqueda, dato, E #INSTANCIEAS DE LOS WIDGETS global ccE, refE, dateinE, socialE, cityE, nameE, lnameE, adressE, phoneE, officeE, officetelE, telfaxE, emailE, birthdayE, birthdayCbx, mailE, mobileE, personR1, personR2, comisionE, Ch1, Ch2, Ch3, Ch4, Ch5, note, cc0E, name0E, adress0E, phone0E, office0E, officetel0E, bank0Cbx, tbank0Cbx, tcuenta0E, cc1E, name1E, bank1Cbx, tbank1Cbx, tcuenta1E, cc2E, name2E, bank2Cbx, tbank2Cbx, tcuenta2E, add, update, delete, clean global info, lists, _propietarios _propietarios = dict() lists = [] #Variables cedula = StringVar() titulo = StringVar() ingreso = StringVar() rsocial = StringVar() residencia = StringVar() nombres = StringVar() apellidos = StringVar() direccion = StringVar() telefono = StringVar() oficina = StringVar() tel = StringVar() telfax = StringVar() correo = StringVar() dia = IntVar() mes = StringVar() envio = StringVar() celular = StringVar() tipopersona = IntVar() comision = DoubleVar() retefuente = IntVar() reteiva = IntVar() gcontribuyente = IntVar() gfactura = IntVar() gcheque = IntVar() notas = StringVar() #---------------------------- reprecc = StringVar() reprenombres = StringVar() repredireccion = StringVar() repretelefono = StringVar() repreoficina = StringVar() repretel = StringVar() reprebanco = StringVar() repretcuenta = StringVar() reprenumcuenta = StringVar() tit1cc = StringVar() tit1nombres = StringVar() tit1banco = StringVar() tit1tcuenta = StringVar() tit1numcuenta = StringVar() tit2cc = StringVar() tit2nombres = StringVar() tit2banco = StringVar() tit2tcuenta = StringVar() tit2numcuenta = StringVar() meses = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto","Septiembre", "Octubre", "Noviembre", "Diciembre"] tbancos = ['Bancolombia', "Banco Bogotá", "Banco Agrario", "Banco Occidente"] tbanktype = ['Corriente','Ahorro'] #BUSQUEDA = ["Nombre","CC/Nit"] busqueda = StringVar() busqueda.trace("w", lambda name, index, mode: buscar()) info = IntVar() #eleccion = IntVar() dato = StringVar() # MENU DEL MOUSE popmenu = Menu(self, tearoff=0) popmenu.add_command(label="Imprimir", command=hello) popmenu.add_command(label="Cargar", command=modificar) popmenu.add_command(label="Eliminar", command=borrar) #popmenu.add_separator() popmenu.bind('<Escape>', release) #WIDGETS #========================= HEADER ============================== self.header = Label(self, text="GESTIÓN DE PROPIETARIOS", font="bold") self.header.pack(pady=20, side=TOP) #========================== WRAPPER ============================ #Contiene los Notebooks con los campos formulario self.wrapper = Frame (self) self.wrapper.pack(side=LEFT, fill=Y) #Esto centro el wrapper #self.wrapper.pack(side=LEFT, fill=BOTH, expand=True) #================ NOTEBOOK =============> self.nb = Notebook(self.wrapper) #-----------------------> TAB 1 self.tab1 = Frame (self.nb) self.f0 = Frame(self.tab1)#Para dejar espacio entre Tab y Label self.f0.pack(fill=X, pady=10)#------------------------------- #========================= PERSONALES ========================== self.f1 = Frame(self.tab1)#------------------------------- self.f1.pack(pady=5,fill=X) self.ccL = Label(self.f1, text='CC/Nit:') self.ccL.pack(side=LEFT) ccE = Entry(self.f1, textvariable=cedula) ccE.pack(side=LEFT, fill=X, expand=1) ccE.focus_set() self.refL = Label(self.f1, text='Título:') self.refL.pack(side=LEFT) refE = Entry(self.f1, textvariable=titulo, width=10) refE.pack(side=LEFT) #refE.bind("<KeyRelease>", caps) self.dateinL = Label(self.f1, text='Fecha Ingreso:') self.dateinL.pack(side=LEFT) dateinE = Entry(self.f1, textvariable=ingreso, width=10, state=DISABLED) ingreso.set("0000-00-00") dateinE.pack(side=LEFT) self.f2 = Frame(self.tab1)#------------------------------- self.f2.pack(pady=5,fill=X) self.socialL = Label(self.f2, text='Razón Social:') self.socialL.pack(side=LEFT) socialE = Entry(self.f2, textvariable=rsocial) socialE.pack(side=LEFT, fill=X, expand=1) socialE.bind("<KeyRelease>", caps) self.cityL = Label(self.f2, text='Ciudad de residencia:') self.cityL.pack(side=LEFT) cityE = Entry(self.f2, textvariable=residencia, width=15) cityE.pack(side=LEFT) cityE.bind("<KeyRelease>", caps) self.f3 = Frame(self.tab1) self.f3.pack(pady=5,fill=X)#----------------------------------------- self.nameL = Label(self.f3, text='Nombres:') self.nameL.pack(side=LEFT) nameE = Entry(self.f3, textvariable=nombres) nameE.pack(side=LEFT, fill=X, expand=1) nameE.bind("<KeyRelease>", caps) self.lnameL = Label(self.f3, text='Apellidos:') self.lnameL.pack(side=LEFT) lnameE = Entry(self.f3, textvariable=apellidos) lnameE.pack(side=LEFT, fill=X, expand=1) lnameE.bind("<KeyRelease>", caps) self.f4 = Frame(self.tab1) self.f4.pack(pady=5,fill=X)#----------------------------------------- self.adressL = Label(self.f4, text='Dir. Casa:') self.adressL.pack(side=LEFT) adressE = Entry(self.f4, textvariable=direccion) adressE.pack(side=LEFT, fill=X, expand=1) adressE.bind("<KeyRelease>", caps) self.phoneL = Label(self.f4, text='Tel:') self.phoneL.pack(side=LEFT) phoneE = Entry(self.f4, textvariable=telefono, width=20) phoneE.pack(side=LEFT) self.f5 = Frame(self.tab1) self.f5.pack(pady=5,fill=X)#------------------------------------ self.officeL = Label(self.f5, text='Dir. Oficina:') self.officeL.pack(side=LEFT) officeE = Entry(self.f5, textvariable=oficina, width=20) officeE.pack(side=LEFT, fill=X, expand=1) officeE.bind("<KeyRelease>", caps) self.officetelL = Label(self.f5, text='Tel:') self.officetelL.pack(side=LEFT) officetelE = Entry(self.f5, textvariable=tel, width=15) officetelE.pack(fill=X, side=LEFT) self.telfaxL = Label(self.f5, text='Tel. Fax:') self.telfaxL.pack(side=LEFT) telfaxE = Entry(self.f5, textvariable=telfax, width=10) telfaxE.pack(side=LEFT) self.f6 = Frame(self.tab1) self.f6.pack(pady=5,fill=X)#------------------------------------ self.emailL = Label(self.f6, text='Email:') self.emailL.pack(side=LEFT) emailE = Entry(self.f6, textvariable=correo, width=30) emailE.pack(side=LEFT) self.birthdayL = Label(self.f6, text='Cumpleaños:') self.birthdayL.pack(side=LEFT) self.birthdayL2 = Label(self.f6, text='Día:') self.birthdayL2.pack(padx=5,side=LEFT) #s = Spinbox(self.f6, from_=1, to=31,textvariable=dia, width=3) #s.pack(side=LEFT) birthdayE = Entry(self.f6, textvariable=dia, width=3) birthdayE.pack(side=LEFT) self.birthdayL3 = Label(self.f6, text='Mes:') self.birthdayL3.pack(padx=5,side=LEFT) birthdayCbx = Combobox(self.f6, textvariable=mes, values=meses, width=10) birthdayCbx.set('Enero') birthdayCbx.pack(side=LEFT) self.f7 = Frame(self.tab1) self.f7.pack(pady=5,fill=X)#------------------------------------ self.mailL = Label(self.f7, text='Dir. Correspondencia:') self.mailL.pack(side=LEFT) mailE = Entry(self.f7, textvariable=envio) mailE.pack(side=LEFT, fill=X, expand=1) mailE.bind("<KeyRelease>", caps) self.mobileL = Label(self.f7, text='Celular:') self.mobileL.pack(side=LEFT) mobileE = Entry(self.f7, textvariable=celular, width=10) mobileE.pack(side=LEFT, fill=X, expand=1) self.f8 = Frame(self.tab1) self.f8.pack(pady=5,fill=X)#------------------------------------ self.personL = Label(self.f8, text='Tipo Persona:') self.personL.pack(side=LEFT) personR1 = Radiobutton(self.f8, text="Natural", variable=tipopersona, value=1) personR1.pack(padx=20,side=LEFT) personR2 = Radiobutton (self.f8, text="Jurídica", variable=tipopersona, value=2) personR2.pack(padx=20,side=LEFT) self.comisionL = Label(self.f8, text='$ Comisión:') self.comisionL.pack(side=LEFT) comisionE = Entry(self.f8, textvariable=comision, width=5) comisionE.pack(side=LEFT) self.f = Frame(self.tab1) self.f.pack(pady=5,fill=X)#------------------------------------ Ch1 = Checkbutton(self.f, text="Retefuente", variable=retefuente) Ch1.pack(side=LEFT) Ch2 = Checkbutton(self.f, text="Rete IVA", variable=reteiva) Ch2.pack(side=LEFT) Ch3 = Checkbutton(self.f, text="Gran Contribuyente", variable=gcontribuyente) Ch3.pack(side=LEFT) Ch4 = Checkbutton(self.f, text="Genera Factura", variable=gfactura) Ch4.pack(side=LEFT) Ch5 = Checkbutton(self.f, text="Genera Cheque", variable=gcheque) Ch5.pack(side=LEFT) self.f9 = Frame(self.tab1) self.f9.pack(pady=5,fill=X)#------------------------------------ self.notesL = Label(self.f9, text='Observaciones:') self.notesL.pack(side=LEFT) self.f10 = Frame(self.tab1) self.f10.pack(pady=5,fill=X)#------------------------------------ note = Text(self.f10, height=5) note.pack(side=LEFT, fill=X, expand=1) self.tab1.pack() #-----------------------> TAB 2 self.tab2 = Frame (self.nb) self.tab2.pack() self.f0 = Frame(self.tab2)#Para dejar espacio entre Tab y Label self.f0.pack(fill=X, pady=10)#---------------------------------- #======================= COMPLEMENTARIOS ======================= self.lf = LabelFrame(self.tab2, text="Datos Representante") self.f0 = Frame(self.lf) self.f0.pack(fill=X, pady=5)#------------------------------- self.ccRL = Label(self.f0, text='CC:') self.ccRL.pack(side=LEFT) cc0E = Entry(self.f0, textvariable=reprecc, width=10) cc0E.pack(side=LEFT, fill=X, expand=1) self.nameL = Label(self.f0, text='Nombres:') self.nameL.pack(side=LEFT) name0E = Entry(self.f0, textvariable=reprenombres) name0E.pack(side=LEFT, fill=X, expand=1) name0E.bind("<KeyRelease>", caps) self.f1 = Frame(self.lf) self.f1.pack(fill=X, pady=5)#------------------------------- self.adressL = Label(self.f1, text='Dir. Casa:') self.adressL.pack(side=LEFT) adress0E = Entry(self.f1, textvariable=repredireccion) adress0E.pack(side=LEFT, fill=X, expand=1) adress0E.bind("<KeyRelease>", caps) self.phoneL = Label(self.f1, text='Tel:') self.phoneL.pack(side=LEFT) phone0E = Entry(self.f1, textvariable=repretelefono, width=20) phone0E.pack(side=LEFT) self.f2 = Frame(self.lf) self.f2.pack(fill=X, pady=5)#------------------------------- self.officeL = Label(self.f2, text='Dir. Oficina:') self.officeL.pack(side=LEFT) office0E = Entry(self.f2, textvariable=repreoficina) office0E.pack(side=LEFT, fill=X, expand=1) office0E.bind("<KeyRelease>", caps) self.officetelL = Label(self.f2, text='Tel:') self.officetelL.pack(side=LEFT) officetel0E = Entry(self.f2, textvariable=repretel, width=20) officetel0E.pack(fill=X, side=LEFT) self.f3 = Frame (self.lf) self.f3.pack(fill=X)#------------------------------------------- self.tbancpL = Label(self.f3, text='Banco:') self.tbancpL.pack(side=LEFT) bank0Cbx = Combobox(self.f3, textvariable=reprebanco, values=tbancos, width=12) bank0Cbx.set('') bank0Cbx.pack(side=LEFT) self.tbancpL = Label(self.f3, text='Tipo Cuenta:') self.tbancpL.pack(side=LEFT) tbank0Cbx = Combobox(self.f3, textvariable=repretcuenta, values=tbanktype, width=8) tbank0Cbx.set('') tbank0Cbx.pack(side=LEFT) self.tcuentaL = Label(self.f3, text='# Cuenta:') self.tcuentaL.pack(side=LEFT) tcuenta0E = Entry(self.f3, textvariable=reprenumcuenta) tcuenta0E.pack(side=LEFT, fill=X, expand=1) self.lf.pack(fill=X, ipady=5)#================================== self.f0 = Frame(self.tab2)#Para dejar espacio entre Tab y Label self.f0.pack(fill=X, pady=10)#------------------------------- #--------------------------------------------------------------- self.lf1 = LabelFrame(self.tab2, text="Datos Titular 1") self.f4 = Frame(self.lf1) self.f4.pack(fill=X, pady=5)#------------------------------- self.ccL = Label(self.f4, text='CC:') self.ccL.pack(side=LEFT) cc1E = Entry(self.f4, textvariable=tit1cc) cc1E.pack(side=LEFT, fill=X, expand=1) self.nameL = Label(self.f4, text='Nombres:') self.nameL.pack(side=LEFT) name1E = Entry(self.f4, textvariable=tit1nombres) name1E.pack(side=LEFT, fill=X, expand=1) name1E.bind("<KeyRelease>", caps) self.f5 = Frame (self.lf1) self.f5.pack(fill=X)#------------------------------------------- self.tbancpL = Label(self.f5, text='Banco:') self.tbancpL.pack(side=LEFT) bank1Cbx = Combobox(self.f5, textvariable=tit1banco, values=tbancos, width=12) bank1Cbx.set('') bank1Cbx.pack(side=LEFT) self.tbancpL = Label(self.f5, text='Tipo Cuenta:') self.tbancpL.pack(side=LEFT) tbank1Cbx = Combobox(self.f5, textvariable=tit1tcuenta, values=tbanktype, width=8) tbank1Cbx.set('') tbank1Cbx.pack(side=LEFT) self.tcuentaL = Label(self.f5, text='# Cuenta:') self.tcuentaL.pack(side=LEFT) tcuenta1E = Entry(self.f5, textvariable=tit1numcuenta) tcuenta1E.pack(side=LEFT, fill=X, expand=1) self.lf1.pack(fill=X, ipady=5)#================================ self.f0 = Frame(self.tab2)#Para dejar espacio entre Tab y Label self.f0.pack(fill=X, pady=10)#------------------------------- #--------------------------------------------------------------- self.lf2 = LabelFrame(self.tab2, text="Datos Titular 2") self.f5 = Frame(self.lf2) self.f5.pack(fill=X, pady=5)#------------------------------- self.ccL = Label(self.f5, text='CC:') self.ccL.pack(side=LEFT) cc2E = Entry(self.f5, textvariable=tit2cc) cc2E.pack(side=LEFT, fill=X, expand=1) self.nameL = Label(self.f5, text='Nombres:') self.nameL.pack(side=LEFT) name2E = Entry(self.f5, textvariable=tit2nombres) name2E.pack(side=LEFT, fill=X, expand=1) name2E.bind("<KeyRelease>", caps) self.f6 = Frame (self.lf2) self.f6.pack(fill=X)#------------------------------------------- self.tbancpL = Label(self.f6, text='Banco:') self.tbancpL.pack(side=LEFT) bank2Cbx = Combobox(self.f6, textvariable=tit2banco, values=tbancos, width=12) bank2Cbx.set('') bank2Cbx.pack(side=LEFT) self.tbancpL = Label(self.f6, text='Tipo Cuenta:') self.tbancpL.pack(side=LEFT) tbank2Cbx = Combobox(self.f6, textvariable=tit2tcuenta, values=tbanktype, width=8) tbank2Cbx.set('') tbank2Cbx.pack(side=LEFT) self.tcuentaL = Label(self.f6, text='# Cuenta:') self.tcuentaL.pack(side=LEFT) tcuenta2E = Entry(self.f6, textvariable=tit2numcuenta) tcuenta2E.pack(side=LEFT, fill=X, expand=1) self.lf2.pack(fill=X, ipady=5)#================================ #--------------------------------------------------------------- self.nb.add (self.tab1, text="Personales") self.nb.add(self.tab2, text="Complementarios") self.nb.pack() #=========================== BOTONES =========================== self.btns = Frame(self.wrapper) self.btns.pack()#------------------------------- clean = Button(self.btns, text='Limpiar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=limpiar) clean.pack(side=RIGHT) update = Button(self.btns, text='Actualizar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=actualizar, state=DISABLED) update.pack(side=RIGHT) add = Button(self.btns, text='Agregar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=Agregar) add.pack(side=RIGHT) #========================= ASIDE =========================== self.aside = Frame(self) self.aside.pack(side=LEFT, fill=BOTH, expand=True) self.wrap1 = Frame(self.aside) self.wrap1.pack() self.viewer = Label(self.wrap1, text="LISTA DE PROPIETARIOS") self.viewer.pack() scroll = Scrollbar(self.wrap1, orient=VERTICAL) scroll.pack(side=RIGHT, fill=Y) lb = Listbox(self.wrap1, yscrollcommand=scroll.set, height=20, width=30, bg='#d8ecf3') scroll.config (command=lb.yview) lb.pack(fill=BOTH) lb.bind("<Double-Button-1>", callback) lb.bind("<Button-3>", popup) #lb.bind('<Escape>', release) self.wrap2 = Frame(self.aside) self.wrap2.pack() self.updateBP = Button(self.wrap2, text='Cargar lista', width=20, bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=cargar_lista) self.updateBP.pack() delete = Button(self.wrap2, text='Borrar', bg='navy', width=20, foreground='white', activebackground='red3', activeforeground='white', command=borrar) delete.pack() edit = Button(self.wrap2, text='Modificar', bg='navy', width=20, foreground='white', activebackground='red3', activeforeground='white', command=modificar) edit.pack() self.wrap3 = Frame(self.aside) self.wrap3.pack() buscador = Label(self.wrap3, text="Buscar por:") buscador.pack(side=LEFT) R1 = Radiobutton(self.wrap3, text="CC", variable=info, value=1) R1.pack(side=LEFT) R2 = Radiobutton (self.wrap3, text="Apellido", variable=info, value=2) R2.pack(side=LEFT) info.set(1) self.wrap4 = Frame(self.aside) self.wrap4.pack() E = Entry(self.wrap4, textvariable=busqueda, width=24) E.pack() E.bind("<KeyRelease>", caps)
class Inmuebles(Frame): def __init__(self, parent, controller): Frame.__init__(self, parent) #VARIABLES GLOBALES global codigo, direccion, piso, telefono, ciudad, zona, barrio, estrato, llaves, preguntarx, fin, vlrenta, vladmon, incluida, vlventa, vlavaluo, comiventa, pagoprop, fpagoprop, fpagoadmin, tpropiedad, area, lineas, habitaciones, closets, lamparas, duchas, lavamanos, tsala, tcocina, tpiso, tgarage, rutabus, aservicio, ascensor, citofono, aguacaliente, biblioteca, zverdes, terraza, trifilar, parqueadero, observaciones, lb, Cbx1, Cbx2, zona1, zona2, zona3, zona4, zona5, busqueda, dato, E #INSTANCIAS DE LOS WIDGETS global codE, adressE, comisionE, phoneE, cityCbx, Cbx1, Cbx2, estratoE, keysE, askforE, rent, arriendoE, admonE, include, sale, ventaE, avaluadoE, comiE, pagopropietarioE, diapagopropietarioE, diapagoadmonE, propertyCbx, areaE, lineasE, roomE, closetE, lampE, bathE, sinkE, salasCbx, cocinaCbx, pisoCbx, garageCbx, rutaE, chkb0, chkb1, chkb2, chkb3, chkb4, chkb5, chkb6, chkb7, chkb8, observaciones, add, delete, edit, clean, update #Variables codigo = IntVar() direccion = StringVar() piso = IntVar() telefono = StringVar() ciudad = StringVar() zona = StringVar() barrio = StringVar() estrato = StringVar() llaves = StringVar() preguntarx = StringVar() fin = IntVar() vlrenta = IntVar() vladmon = IntVar() incluida = IntVar() vlventa = IntVar() vlavaluo = IntVar() comiventa = DoubleVar() pagoprop = IntVar() fpagoprop = IntVar() fpagoadmin = IntVar() tpropiedad = StringVar() area = IntVar() lineas = IntVar() habitaciones = IntVar() closets = IntVar() lamparas = IntVar() duchas = IntVar() lavamanos = IntVar() tsala = StringVar() tcocina = StringVar() tpiso = StringVar() tgarage = StringVar() rutabus = StringVar() aservicio = IntVar() ascensor = IntVar() citofono = IntVar() aguacaliente = IntVar() biblioteca = IntVar() zverdes = IntVar() terraza = IntVar() trifilar = IntVar() parqueadero = IntVar() ciudades = [ 'Medellín', 'Envigado', 'Caldas', 'El Retiro', 'Guatapé', 'Bogotá D.C', 'Bello', 'Copacabana', 'Rionegro', 'Sabaneta', "Girardot", "Itaguí" ] zonas = ["Zona 1", "Zona 2", "Zona 3", "Zona 4", "Zona 5"] zona1 = [ 'Centro', 'Manrique', 'Aranjuez', 'Prado', 'Buenos Aires', 'Loreto', 'Milagrosa', 'Villa Hermosa', 'Boston', 'Campo Valdés' ] zona2 = [ 'Poblado', 'Patio Bonito', 'Provenza', 'Castropol', 'Manila', 'San Lucas', 'Envigado', 'El Dorado', 'Loma de Escobero', 'Sabaneta', 'San Diego', 'Las Palmas', 'La Sebastiana' ] zona3 = [ 'Laureles', 'La América', 'Estadio', 'Santa Mónica', 'Floresta', 'Conquistadores', 'Florida Nueva', 'Robledo', 'Los Colores', 'San Joaquín', 'Castilla', 'Pedregal', 'Tricentenario', 'Bello', 'Florencia', 'Boyacá las Brisas', 'Barrio Nuevo', 'La Mota', 'Calazans', 'Simón Bolivar', 'El Portal', 'Envigado' ] zona4 = [ 'Rosales', 'Guayabal', 'Belén', 'Itaguí', 'La Estrella', 'Manzanares', 'El Carmelo', 'Mayorca' ] zona5 = ['El Retiro'] negociacion = StringVar() propiedades = [ 'Casa', 'Apartamento', 'Local', 'Local comercial', 'Local industrial', 'Oficina', 'Bodega', 'Finca', 'Casa finca', 'Cabaña', 'Apartaestudio', 'Apartalock', 'Lote', 'Consultorio', 'Parqueadero' ] comodidades = [ "ALCOBA DE SERVICIO", "ASCENDOR", "CITÓFONO", "AGUA CALIENTE", "BIBLIOTECA", "ZONAS VERDES", "PARQUEADERO VISITANES", "TRIFILAR", "TERRAZA" ] salas = ['Salón', 'Salón comedor', 'Sala garage'] cocina = [ 'Integral', 'Semintegral', 'Sencilla', 'Mixta', 'Cocineta', 'Integral a gas' ] pisos = [ 'Baldosa', 'Mármol', 'Cerámica', 'Alfombra', 'Mármol y Cerámica', 'Alfombra y Cerámica', 'Reforzado', 'Porcelanato', 'Madera' ] garage = ['Cubierto', 'Eléctrico', 'Descubierto', 'Paralelo'] #busqueda = ["Código","Dirección"] busqueda = StringVar() busqueda.trace("w", lambda name, index, mode: buscar()) dato = IntVar() #WIDGETS #========================= HEADER =========================== self.header = Label(self, text="GESTIÓN DE IMNUEBLES", font="bold") self.header.pack(pady=20, side=TOP) #========================== WRAPPER ========================== self.wrapper = Frame(self) self.wrapper.pack(side=LEFT, fill=Y) #Esto centro el wrapper #self.wrapper.pack(side=LEFT, fill=BOTH, expand=True) #================ NOTEBOOK =============> self.nb = Notebook(self.wrapper) #-----------------------> TAB 1 self.tab1 = Frame(self.nb) self.f0 = Frame( self.tab1) #Es para dejar un espacio entre el Tab y el Label self.f0.pack(fill=X, pady=10) #------------------------------- self.f1 = Frame(self.tab1) #------------------------------- self.f1.pack(pady=5, fill=X) self.codL = Label(self.f1, text='Código:') self.codL.pack(side=LEFT) codE = Entry(self.f1, textvariable=codigo, width=5) codE.pack(side=LEFT) codE.focus_set() self.adressL = Label(self.f1, text='Dir. Casa:') self.adressL.pack(side=LEFT) adressE = Entry(self.f1, textvariable=direccion) adressE.pack(side=LEFT, fill=X, expand=1) adressE.bind("<KeyRelease>", caps) self.comisionL = Label(self.f1, text='Piso:') self.comisionL.pack(side=LEFT) comisionE = Entry(self.f1, textvariable=piso, width=5) comisionE.pack(side=LEFT) self.phoneL = Label(self.f1, text='Tel:') self.phoneL.pack(side=LEFT) phoneE = Entry(self.f1, textvariable=telefono, width=20) phoneE.pack(side=LEFT) self.f2 = Frame(self.tab1) self.f2.pack(pady=5, fill=X) #------------------------------------ self.cityL = Label(self.f2, text='Ciudad:') self.cityL.pack(side=LEFT) cityCbx = Combobox(self.f2, textvariable=ciudad, values=ciudades, width=10) cityCbx.set('') cityCbx.pack(side=LEFT, fill=X, expand=1) self.zoneL = Label(self.f2, text='Zona:') self.zoneL.pack(side=LEFT) Cbx1 = Combobox(self.f2, textvariable=zona, values=zonas, width=10) Cbx1.set('') Cbx1.bind("<<ComboboxSelected>>", zone) Cbx1.pack(side=LEFT, fill=X, expand=1) self.neighborL = Label(self.f2, text='Barrio:') self.neighborL.pack(side=LEFT) Cbx2 = Combobox(self.f2, textvariable=barrio, width=10) Cbx2.set('') Cbx2.pack(side=LEFT, fill=X, expand=1) self.estratoL = Label(self.f2, text='Estrato:') self.estratoL.pack(side=LEFT) estratoE = Entry(self.f2, textvariable=estrato, width=5) estratoE.pack(side=LEFT) self.f3 = Frame(self.tab1) self.f3.pack(pady=5, fill=X) #------------------------------------ self.keysL = Label(self.f3, text='Llaves en:') self.keysL.pack(side=LEFT) keysE = Entry(self.f3, textvariable=llaves, width=24) keysE.pack(side=LEFT, fill=X, expand=1) keysE.bind("<KeyRelease>", caps) self.askforL = Label(self.f3, text='Preguntar por:') self.askforL.pack(side=LEFT) askforE = Entry(self.f3, textvariable=preguntarx, width=24) askforE.pack(side=LEFT, fill=X, expand=1) askforE.bind("<KeyRelease>", caps) self.negociacionLF = LabelFrame(self.tab1, text="Valores Negociación") self.negociacionLF.pack(anchor=W, pady=5, fill=X) #---------------------- self.f5a = Frame(self.negociacionLF) self.f5a.pack(pady=5, fill=X) #--------------------------- rent = Radiobutton(self.f5a, text="Se Arrienda: ", variable=fin, value=1) rent.pack(side=LEFT) self.arriendoL = Label(self.f5a, text='Valor $') self.arriendoL.pack(side=LEFT) arriendoE = Entry(self.f5a, textvariable=vlrenta, width=15) arriendoE.pack(side=LEFT) self.admonL = Label(self.f5a, text='Administración $') self.admonL.pack(side=LEFT) admonE = Entry(self.f5a, textvariable=vladmon, width=15) admonE.pack(side=LEFT) include = Checkbutton(self.f5a, text="Admin. incluida", variable=incluida) include.pack(side=LEFT) self.f5b = Frame(self.negociacionLF) self.f5b.pack(pady=5, fill=X) #--------------------------- sale = Radiobutton(self.f5b, text="Se Vende: ", variable=fin, value=2) sale.pack(side=LEFT) self.ventaL = Label(self.f5b, text='Valor $') self.ventaL.pack(side=LEFT) ventaE = Entry(self.f5b, textvariable=vlventa, width=15) ventaE.pack(side=LEFT) self.avaluadoL = Label(self.f5b, text='Avaluado $') self.avaluadoL.pack(side=LEFT) avaluadoE = Entry(self.f5b, textvariable=vlavaluo, width=15) avaluadoE.pack(side=LEFT) self.comiL = Label(self.f5b, text='Comisión Venta') self.comiL.pack(side=LEFT) comiE = Entry(self.f5b, textvariable=comiventa, width=5) comiE.pack(side=LEFT) self.porcentL = Label(self.f5b, text='%') self.porcentL.pack(side=LEFT) self.pagoLF = LabelFrame(self.tab1, text="Detalles de pago") self.pagoLF.pack(anchor=W, pady=5, fill=X) #----------- self.f6 = Frame(self.pagoLF) self.f6.pack(pady=5, fill=X) #--------------------------- self.pagopropietarioL = Label(self.f6, text='$ Pago Propietario:') self.pagopropietarioL.pack(side=LEFT) pagopropietarioE = Entry(self.f6, textvariable=pagoprop, width=10) pagopropietarioE.pack(side=LEFT, fill=X, expand=1) self.diapagopropietarioL = Label(self.f6, text='Día Pago Propietario:') self.diapagopropietarioL.pack(side=LEFT) diapagopropietarioE = Entry(self.f6, textvariable=fpagoprop, width=5) diapagopropietarioE.pack(side=LEFT) self.diapagoadmonL = Label(self.f6, text='Día Pago Admon:') self.diapagoadmonL.pack(side=LEFT) diapagoadmonE = Entry(self.f6, textvariable=fpagoadmin, width=5) diapagoadmonE.pack(side=LEFT) self.tab1.pack() #-----------------------> TAB 2 self.tab2 = Frame(self.nb) self.tab2.pack() self.f0 = Frame(self.tab2) self.f0.pack(fill=X, pady=10) #------------------------------- self.f1 = Frame(self.tab2) self.f1.pack(fill=X) #------------------------------- self.propertyL = Label(self.f1, text='Tipo Propiedad:') self.propertyL.pack(side=LEFT) propertyCbx = Combobox(self.f1, textvariable=tpropiedad, values=propiedades, width=15) propertyCbx.set('') propertyCbx.pack(side=LEFT) self.areaL = Label(self.f1, text='Área:') self.areaL.pack(side=LEFT) areaE = Entry(self.f1, textvariable=area, width=5) areaE.pack(side=LEFT) self.m2L = Label(self.f1, text='m2') self.m2L.pack(side=LEFT) self.emptyL = Label(self.f1) ###VACIO### self.emptyL.pack(padx=5, side=LEFT) self.lineasL = Label(self.f1, text='# Líneas:') self.lineasL.pack(side=LEFT) lineasE = Entry(self.f1, textvariable=lineas, width=5) lineasE.pack(side=LEFT) self.roomL = Label(self.f1, text='# Habitaciones:') self.roomL.pack(side=LEFT) roomE = Entry(self.f1, textvariable=habitaciones, width=5) roomE.pack(side=LEFT) self.f2 = Frame(self.tab2) #------------------------------- self.f2.pack(pady=5, fill=X) self.closetL = Label(self.f2, text='# Closets:') self.closetL.pack(side=LEFT) closetE = Entry(self.f2, textvariable=closets, width=5) closetE.pack(side=LEFT) self.lampL = Label(self.f2, text='# Lámparas:') self.lampL.pack(side=LEFT) lampE = Entry(self.f2, textvariable=lamparas, width=5) lampE.pack(side=LEFT) self.bathL = Label(self.f2, text='# Baños:') self.bathL.pack(side=LEFT) bathE = Entry(self.f2, textvariable=duchas, width=5) bathE.pack(side=LEFT) self.sinkL = Label(self.f2, text='# Lavamanos:') self.sinkL.pack(side=LEFT) sinkE = Entry(self.f2, textvariable=lavamanos, width=5) sinkE.pack(side=LEFT) self.f4 = Frame(self.tab2) self.f4.pack(pady=5, fill=X) #------------------------------- self.salaL = Label(self.f4, text='Tipo Sala:') self.salaL.pack(side=LEFT) salasCbx = Combobox(self.f4, textvariable=tsala, values=salas) salasCbx.set('') salasCbx.pack(side=LEFT) self.cocinaL = Label(self.f4, text='Tipo Cocina:') self.cocinaL.pack(side=LEFT) cocinaCbx = Combobox(self.f4, textvariable=tcocina, values=cocina) cocinaCbx.set('') cocinaCbx.pack(side=LEFT) self.f5 = Frame(self.tab2) self.f5.pack(pady=5, fill=X) #------------------------------- self.pisoL = Label(self.f5, text='Tipo Piso:') self.pisoL.pack(side=LEFT) pisoCbx = Combobox(self.f5, textvariable=tpiso, values=pisos) pisoCbx.set('') pisoCbx.pack(side=LEFT) self.garageL = Label(self.f5, text='Tipo garage:') self.garageL.pack(side=LEFT) garageCbx = Combobox(self.f5, textvariable=tgarage, values=garage) garageCbx.set('') garageCbx.pack(side=LEFT) self.f6 = Frame(self.tab2) #------------------------------- self.f6.pack(pady=5, fill=X) self.rutaL = Label(self.f6, text='Ruta de Buses:') self.rutaL.pack(side=LEFT) rutaE = Entry(self.f6, textvariable=rutabus, width=30) rutaE.pack(side=LEFT) self.f7 = Frame(self.tab2) self.f7.pack(pady=5, fill=X) #------------------------------- self.comodidades = LabelFrame(self.f7, text="Comodidades:") self.comodidades.pack(anchor=W, pady=5, fill=X, expand=1) #---------------------- chkb0 = Checkbutton(self.comodidades, text="ALCOBA DE SERVICIO", variable=aservicio) chkb0.grid(row=0, column=0, sticky=W) chkb1 = Checkbutton(self.comodidades, text="ASCENSOR", variable=ascensor) chkb1.grid(row=0, column=1, sticky=W) chkb2 = Checkbutton(self.comodidades, text="CITÓFONO", variable=citofono) chkb2.grid(row=0, column=2, sticky=W) chkb3 = Checkbutton(self.comodidades, text="AGUA CALIENTE", variable=aguacaliente) chkb3.grid(row=0, column=3, sticky=W) chkb4 = Checkbutton(self.comodidades, text="BIBLIOTECA", variable=biblioteca) chkb4.grid(row=1, column=0, sticky=W) chkb5 = Checkbutton(self.comodidades, text="ZONAS VERDES", variable=zverdes) chkb5.grid(row=1, column=1, sticky=W) chkb6 = Checkbutton(self.comodidades, text="TERRAZA", variable=terraza) chkb6.grid(row=1, column=2, sticky=W) chkb7 = Checkbutton(self.comodidades, text="TRIFILAR", variable=trifilar) chkb7.grid(row=1, column=3, sticky=W) chkb8 = Checkbutton(self.comodidades, text="PARQUEADERO VISITANTES", variable=parqueadero) chkb8.grid(row=2, column=0, sticky=W) self.f9 = Frame(self.tab2) self.f9.pack(pady=5, fill=X) #------------------------------------ self.notesL = Label(self.f9, text='Observaciones:') self.notesL.pack(side=LEFT) self.f10 = Frame(self.tab2) self.f10.pack(pady=5, fill=X) #----------------------------------- observaciones = Text(self.f10, height=5) observaciones.pack(side=LEFT, fill=X, expand=1) #--------------------------------------------------------------- self.nb.add(self.tab1, text="Datos Generales") self.nb.add(self.tab2, text="Inventario y Comodidades") self.nb.pack() #=========================== BOTONES =========================== self.fBtn = Frame(self.wrapper) self.fBtn.pack() #------------------------------- clean = Button(self.fBtn, text='Limpiar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=limpiar) clean.pack(side=RIGHT) update = Button(self.fBtn, text='Actualizar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=actualizar, state=DISABLED) update.pack(side=RIGHT) add = Button(self.fBtn, text='Agregar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=Agregar) add.pack(side=RIGHT) #========================= ASIDE =========================== self.aside = Frame(self) self.aside.pack(side=TOP, fill=BOTH) self.wrap1 = Frame(self.aside) self.wrap1.pack() self.viewer = Label(self.wrap1, text="LISTA DE INMUEBLES") self.viewer.pack() scroll = Scrollbar(self.wrap1, orient=VERTICAL) scroll.pack(side=RIGHT, fill=Y) lb = Listbox(self.wrap1, yscrollcommand=scroll.set, height=20, width=30, bg='#d8ecf3') scroll.config(command=lb.yview) lb.pack(fill=BOTH) lb.bind("<Double-Button-1>", callback) self.wrap2 = Frame(self.aside) self.wrap2.pack() self.updateBP = Button(self.wrap2, text='Cargar lista', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=cargar_lista) self.updateBP.pack(fill=X) delete = Button(self.wrap2, text='Borrar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=borrar) delete.pack(fill=X) edit = Button(self.wrap2, text='Modificar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=modificar) edit.pack(fill=X) buscador = Label(self.wrap2, text="Buscar por Código:") buscador.pack() E = Entry(self.wrap2, textvariable=busqueda, width=24) E.pack() E.bind("<KeyRelease>", caps)
def __init__(self, master): self.fname="" #global variables self.t1=StringVar() self.t2=StringVar() self.t3=StringVar() self.t4=StringVar() self.t5=StringVar() self.t6=StringVar() self.var1=StringVar() self.var2=StringVar() self.var3=StringVar() self.var4=StringVar() self.var5=StringVar() self.var6=StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=650, height=500) #end #title of window master.title("Airdecap-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont=tkFont.Font(family="Helvetica", size=15,underline = True) self.myfontnew=tkFont.Font(family="Helvetica", size=11,underline = True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb,name="frame_content", bg="white") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="FIlter-1") # add tab to Notebook self.frame_content7 = Frame(nb, name='frame_content7', bg="white") nb.add(self.frame_content7, text="Detect Devices") # repeat for each tab self.frame_content5 = Frame(nb, name='frame_content5', bg="white") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text = 'Airdecap-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) btndetect=Button(self.frame_content7, text = 'Detect', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 1, column = 0, padx = 5, pady = 5) btndbrowse=Button(self.frame_content7, text = 'Attach File', command =self.browse_file, height=2, width=15, font=self.customFont).grid(row = 3, column = 0, padx = 5, pady = 5) self.lilnew1=Listbox(self.frame_content7,bg="black", fg="white", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row = 1, column = 1, rowspan=3) #End Label(self.frame_content, text = 'Airdecap-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) Label(self.frame_content, text = 'Options :',font=self.myfontnew, bg="white").grid(row = 1, column = 1) #Button(self.frame_content, text = 'ivs', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 0, padx = 5, pady = 5) #Button(self.frame_content, text = 'gpsd', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 1, padx = 5, pady = 5) #Button(self.frame_content, text = 'write', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 2, padx = 5, pady = 5) #command Listbox Label(self.frame_content5, text = 'Edit Command From Here',font=self.myfontnew, bg="white", justify=LEFT).grid(row = 0, column = 0) TextCommandBox=Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output=Text(self.frame_content5,bg="black", fg="white", font=self.myfont, height=20, width=42) self.output.grid(row = 0, column = 1, padx=50, pady=5, rowspan=3) btnsubmit=Button(self.frame_content5, width=15, height=2, text="Get Result", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear=Button(self.frame_content5, width=15, height=2, text="Clear Output", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "-l", \ onvalue = "-l", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var1) self.C1.grid(row = 2, column = 0, padx = 5, pady = 5) self.t1=Text(self.frame_content,height=1,width = 20) self.t1.grid(row = 2, column = 1, padx = 5, pady = 5) l1=Label(self.frame_content, text = ': don\'t remove the 802.11 header',font=self.myfont, bg="white", justify=LEFT).grid(row = 2, column = 2, padx = 5, pady = 5) self.C2 = Checkbutton(self.frame_content, text = "-b", \ onvalue = "-b", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var2) self.C2.grid(row = 3, column = 0, padx = 5, pady = 5) self.t2=Text(self.frame_content,height=1,width = 20) self.t2.grid(row = 3, column = 1, padx = 5, pady = 5) l2=Label(self.frame_content, text = ': access point MAC address filter',font=self.myfont, bg="white", justify=LEFT).grid(row = 3, column = 2, padx = 5, pady = 5) self.C3 = Checkbutton(self.frame_content, text = "-k", \ onvalue = "-k", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var3) self.C3.grid(row = 4, column = 0, padx = 5, pady = 5) self.t3=Text(self.frame_content,height=1,width = 20) self.t3.grid(row = 4, column = 1, padx = 5, pady = 5) l3=Label(self.frame_content, text = ': WPA/WPA2 Pairwise Master Key in hex',font=self.myfont, bg="white", justify=LEFT).grid(row = 4, column = 2, padx = 5, pady = 5) self.C4 = Checkbutton(self.frame_content, text = "-e", \ onvalue = "-e", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var4) self.C4.grid(row = 5, column = 0, padx = 5, pady = 5) self.t4=Text(self.frame_content,height=1,width = 20) self.t4.grid(row = 5, column = 1, padx = 5, pady = 5) l4=Label(self.frame_content, text = ': target network ascii identifier',font=self.myfont, bg="white", justify=LEFT).grid(row = 5, column = 2, padx = 5, pady = 5) self.C5 = Checkbutton(self.frame_content, text = "-p", \ onvalue = "-p", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var5) self.C5.grid(row = 6, column = 0, padx = 5, pady = 5) self.t5=Text(self.frame_content,height=1,width = 20) self.t5.grid(row = 6, column = 1, padx = 5, pady = 5) l5=Label(self.frame_content, text = ': target network WPA/WPA2 passphrase',font=self.myfont, bg="white", justify=LEFT).grid(row = 6, column = 2, padx = 5, pady = 5) self.C6 = Checkbutton(self.frame_content, text = "-w", \ onvalue = "-w", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var6) self.C6.grid(row = 8, column = 0, padx = 5, pady = 5) self.t6=Text(self.frame_content,height=1,width = 20) self.t6.grid(row = 8, column = 1, padx = 5, pady = 5) l6=Label(self.frame_content, text = ': target network WEP key in hexadecimal',font=self.myfont, bg="white", justify=LEFT).grid(row = 8, column = 2, padx = 5, pady = 5)
def report_cash(master, from_date=None, to_date=None, reason=None): """Создает и выводи на экран окно с отчетом по блокноту расходов""" def press(index): """функция, срабатывающая при нажатии кнопок переключения между видами сортировок. Переключает вкладки в блокноте""" window_names = tabs.tabs() tabs.select(window_names[index]) def make_query_cash(from_date=None, to_date=None, reason=None): """Возвращает кортеж запросов для последующего использования при составлении отчета по расходам""" select = queries.report_cash_query() if reason: for q in range(len(select)): new_select = [] for element in select[q]: if element.reason == reason: new_select.append(element) select[q] = new_select if from_date and to_date: for q in range(len(select)): new_select = [] for element in select[q]: if (element.date_time >= from_date) and \ (element.date_time <= to_date + timedelta(days=1)): new_select.append(element) select[q] = new_select elif from_date: for q in range(len(select)): new_select = [] for element in select[q]: if element.date_time >= from_date: new_select.append(element) select[q] = new_select elif to_date: for q in range(len(select)): new_select = [] for element in select[q]: if element.date_time <= to_date + timedelta(days=1): new_select.append(element) select[q] = new_select return select def show(frame, iterator): """Выводит на экран выборку, заданную в iterator""" scrollbar = Scrollbar(frame) tree = Treeview(frame, selectmode='none', padding=3, style='Custom.Treeview', height=REPORT_HEIGHT, yscrollcommand=scrollbar.set) tree.pack(side=LEFT, fill=BOTH, expand=YES) scrollbar.config(command=tree.yview) scrollbar.pack(side=LEFT, fill=Y) tree.tag_configure('1', font=('Verdana', FONT_SIZE_REPORT)) tree.tag_configure('2', font=('Verdana', FONT_SIZE_REPORT), background='#f5f5ff') Style().configure('Custom.Treeview', rowheight=FONT_SIZE_REPORT*2) columns = ['#' + str(x + 1) for x in range(5)] tree.configure(columns=columns) for q in range(len(header)): tree.heading('#%d' % (q + 1), text=header[q], anchor='w') tree.column('#%d' % (q + 1), width=REPORT_SCALE * col_width[q + 1], anchor='w') tree.heading('#0', text='', anchor='w') tree.column('#0', width=0, anchor='w', minwidth=0) flag = True for item in iterator: col = [] col.append(add_s(item.reason.text)) col.append(add_s(item.summ)) col.append(add_s(item.comment)) col.append(add_s(item.date_time.strftime('%d.%m.%Y'))) col.append(add_s(item.date_time.time())[:8]) flag = not flag if flag: tree.insert('', 'end', text='', values=col, tag='2') else: tree.insert('', 'end', text='', values=col, tag='1') # --------------------------------------------# tl = Toplevel(master) tl.title(u'Отчет по расходам') bottom = Frame(tl, relief=SUNKEN) bottom.pack(side=BOTTOM, fill=X) showArea = [] tabs = Notebook(tl, style='Hidden.TNotebook') for q in range (2): frame = Frame(tabs, height=REPORT_HEIGHT) tabs.add(frame, text='') showArea.append(frame) tabs.pack(side=TOP, fill=BOTH, expand=YES) Style().layout('Hidden.TNotebook.Tab', '') header = (u'Причина', u'Сумма', u'Комментарий', u'Дата', u'Время') col_width = (0, 30, 10, 50, 16, 16) query = make_query_cash(from_date, to_date, reason) for q in range(len(query)): summ = show(showArea[q], query[q]) Button(bottom, text=u'Сортировка\nпо причине', command=lambda: press(0) ).pack(side=LEFT, padx=REPORT_PAD, pady=REPORT_PAD) Button(bottom, text=u'Сортировка\nпо времени', command=lambda:press(1) ).pack(side=LEFT, padx=REPORT_PAD, pady=REPORT_PAD) Button(bottom, text=u'Экспорт в\nMS Excel').pack( side=RIGHT, padx=REPORT_PAD, pady=REPORT_PAD) tl.focus_set()
def __init__(self, master): self.fname="" #global variables self.t1=StringVar() self.t2=StringVar() self.t3=StringVar() self.t4=StringVar() self.t5=StringVar() self.var1=StringVar() self.var2=StringVar() self.var3=StringVar() self.var4=StringVar() self.var5=StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=650, height=500) #end #title of window master.title("Airgraph-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont=tkFont.Font(family="Helvetica", size=15,underline = True) self.myfontnew=tkFont.Font(family="Helvetica", size=11,underline = True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb,name="frame_content", bg="lightsteelblue") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook # repeat for each tab self.frame_content7 = Frame(nb, name='frame_content7', bg="lightsteelblue") nb.add(self.frame_content7, text="Detect Devices") self.frame_content5 = Frame(nb, name='frame_content5', bg="lightsteelblue") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text = 'Airgraph-ng',font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row = 0, column = 0) btndetect=Button(self.frame_content7, text = 'Detect', fg="cornflowerblue", command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 1, column = 0, padx = 5, pady = 5) btndbrowse=Button(self.frame_content7, text = 'Attach File', fg="cornflowerblue", command =self.browse_file, height=2, width=15, font=self.customFont).grid(row = 3, column = 0, padx = 5, pady = 5) self.lilnew1=Listbox(self.frame_content7,bg="black", fg="firebrick", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row = 1, column = 1, rowspan=3) #End Label(self.frame_content, text = 'Airgraph-ng',font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row = 0, column = 0) Label(self.frame_content, text = 'Options :',font=self.myfontnew, bg="midnightblue", fg="deepskyblue").grid(row = 1, column = 1) #Button(self.frame_content, text = 'ivs', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 0, padx = 5, pady = 5) #Button(self.frame_content, text = 'gpsd', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 1, padx = 5, pady = 5) #Button(self.frame_content, text = 'write', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 2, padx = 5, pady = 5) #command Listbox Label(self.frame_content5, text = 'Edit Command From Here',font=self.myfontnew, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row = 0, column = 0) TextCommandBox=Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output=Text(self.frame_content5,bg="black", fg="firebrick", font=self.myfont, height=20, width=42) self.output.grid(row = 0, column = 1, padx=50, pady=5, rowspan=3) btnsubmit=Button(self.frame_content5, width=15, height=2, text="Get Result", fg="cornflowerblue", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear=Button(self.frame_content5, width=15, height=2, text="Clear Output", fg="cornflowerblue", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "-i", fg="deepskyblue", \ onvalue = "-i", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var1) self.C1.grid(row = 2, column = 0, padx = 5, pady = 5) self.t1=Text(self.frame_content,height=1,width = 20) self.t1.grid(row = 2, column = 1, padx = 5, pady = 5) l1=Label(self.frame_content, text = ': Input File',font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row = 2, column = 2, padx = 5, pady = 5) self.C2 = Checkbutton(self.frame_content, text = "-o", fg="deepskyblue", \ onvalue = "-o", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var2) self.C2.grid(row = 3, column = 0, padx = 5, pady = 5) self.t2=Text(self.frame_content,height=1,width = 20) self.t2.grid(row = 3, column = 1, padx = 5, pady = 5) l2=Label(self.frame_content, text = ': Output File',font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row = 3, column = 2, padx = 5, pady = 5) self.C3 = Checkbutton(self.frame_content, text = "-g", fg="deepskyblue", \ onvalue = "-g", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var3) self.C3.grid(row = 4, column = 0, padx = 5, pady = 5) self.t3=Text(self.frame_content,height=1,width = 20) self.t3.grid(row = 4, column = 1, padx = 5, pady = 5) l3=Label(self.frame_content, text = ': Graph Type',font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row = 4, column = 2, padx = 5, pady = 5) self.C4 = Checkbutton(self.frame_content, text = "-a", fg="deepskyblue", \ onvalue = "-a", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var4) self.C4.grid(row = 5, column = 0, padx = 5, pady = 5) self.t4=Text(self.frame_content,height=1,width = 20) self.t4.grid(row = 5, column = 1, padx = 5, pady = 5) l4=Label(self.frame_content, text = ': Print the about',font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row = 5, column = 2, padx = 5, pady = 5) self.C5 = Checkbutton(self.frame_content, text = "-h", fg="deepskyblue", \ onvalue = "-h", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var5) self.C5.grid(row = 6, column = 0, padx = 5, pady = 5) self.t5=Text(self.frame_content,height=1,width = 20) self.t5.grid(row = 6, column = 1, padx = 5, pady = 5) l5=Label(self.frame_content, text = ': Print this help.',font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row = 6, column = 2, padx = 5, pady = 5)
def __init__(self, master): self.fname = "" #global variables self.t1 = StringVar() self.t2 = StringVar() self.t3 = StringVar() self.t4 = StringVar() self.t5 = StringVar() self.t6 = StringVar() self.t7 = StringVar() self.t8 = StringVar() self.t9 = StringVar() self.t10 = StringVar() self.t11 = StringVar() self.t12 = StringVar() self.t13 = StringVar() self.t14 = StringVar() self.t15 = StringVar() self.t16 = StringVar() self.t17 = StringVar() self.t18 = StringVar() self.t19 = StringVar() self.t20 = StringVar() self.t21 = StringVar() self.t22 = StringVar() self.t23 = StringVar() self.t24 = StringVar() self.t25 = StringVar() self.t26 = StringVar() self.t27 = StringVar() self.t28 = StringVar() self.t29 = StringVar() self.t30 = StringVar() self.t31 = StringVar() self.t32 = StringVar() self.t33 = StringVar() self.t34 = StringVar() self.var1 = StringVar() self.var2 = StringVar() self.var3 = StringVar() self.var4 = StringVar() self.var5 = StringVar() self.var6 = StringVar() self.var7 = StringVar() self.var8 = StringVar() self.var9 = StringVar() self.var10 = StringVar() self.var11 = StringVar() self.var12 = StringVar() self.var13 = StringVar() self.var14 = StringVar() self.var15 = StringVar() self.var16 = StringVar() self.var17 = StringVar() self.var18 = StringVar() self.var19 = StringVar() self.var20 = StringVar() self.var21 = StringVar() self.var22 = StringVar() self.var23 = StringVar() self.var24 = StringVar() self.var25 = StringVar() self.var26 = StringVar() self.var27 = StringVar() self.var28 = StringVar() self.var29 = StringVar() self.var30 = StringVar() self.var31 = StringVar() self.var32 = StringVar() self.var33 = StringVar() self.var34 = StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=650, height=385) #end #title of window master.title("Airbase-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont = tkFont.Font(family="Helvetica", size=15, underline=True) self.myfontnew = tkFont.Font(family="Helvetica", size=11, underline=True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb, name="frame_content", bg="white") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook # repeat for each tab self.frame_content2 = Frame(nb, name='frame_content2', bg="white") nb.add(self.frame_content2, text="Filter-2") self.frame_content3 = Frame(nb, name='frame_content3', bg="white") nb.add(self.frame_content3, text="Filter-3") self.frame_content4 = Frame(nb, name='frame_content4', bg="white") nb.add(self.frame_content4, text="Filter-4") self.frame_content6 = Frame(nb, name='frame_content6', bg="white") nb.add(self.frame_content6, text="Filter-5") self.frame_content7 = Frame(nb, name='frame_content7', bg="white") nb.add(self.frame_content7, text="Detect Devices") self.frame_content5 = Frame(nb, name='frame_content5', bg="white") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text='Airbase-ng', font=self.headerfont, bg="white", padx=10, pady=10).grid(row=0, column=0) btndetect = Button(self.frame_content7, text='Detect', command=self.canvas_detect, height=2, width=15, font=self.customFont).grid(row=1, column=0, padx=5, pady=5) btndbrowse = Button(self.frame_content7, text='Attach File', command=self.browse_file, height=2, width=15, font=self.customFont).grid(row=3, column=0, padx=5, pady=5) self.lilnew1 = Listbox(self.frame_content7, bg="black", fg="white", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row=1, column=1, rowspan=3) #End Label(self.frame_content, text='Airbase-ng', font=self.headerfont, bg="white", padx=10, pady=10).grid(row=0, column=0) Label(self.frame_content, text='Options :', font=self.myfontnew, bg="white").grid(row=1, column=1) #command Listbox Label(self.frame_content5, text='Edit Command From Here', font=self.myfontnew, bg="white", justify=LEFT).grid(row=0, column=0) TextCommandBox = Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output = Text(self.frame_content5, bg="black", fg="white", font=self.myfont, height=20, width=42) self.output.grid(row=0, column=1, padx=50, pady=5, rowspan=3) btnsubmit = Button(self.frame_content5, width=15, height=2, text="Get Result", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear = Button(self.frame_content5, width=15, height=2, text="Clear Output", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "-a", \ onvalue = "-a", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var1) self.C1.grid(row=2, column=0, padx=5, pady=5) self.t1 = Text(self.frame_content, height=1, width=20) self.t1.grid(row=2, column=1, padx=5, pady=5) l1 = Label(self.frame_content, text=': set Access Point MAC address', font=self.myfont, bg="white", justify=LEFT).grid(row=2, column=2, padx=5, pady=5) self.C2 = Checkbutton(self.frame_content, text = "-i", \ onvalue = "-i", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var2) self.C2.grid(row=3, column=0, padx=5, pady=5) self.t2 = Text(self.frame_content, height=1, width=20) self.t2.grid(row=3, column=1, padx=5, pady=5) l2 = Label(self.frame_content, text=': capture packets from this interface', font=self.myfont, bg="white", justify=LEFT).grid(row=3, column=2, padx=5, pady=5) self.C3 = Checkbutton(self.frame_content, text = "-w", \ onvalue = "-w", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var3) self.C3.grid(row=4, column=0, padx=5, pady=5) self.t3 = Text(self.frame_content, height=1, width=20) self.t3.grid(row=4, column=1, padx=5, pady=5) l3 = Label(self.frame_content, text=': use this WEP key to encrypt/decrypt packets', font=self.myfont, bg="white", justify=LEFT).grid(row=4, column=2, padx=5, pady=5) self.C4 = Checkbutton(self.frame_content, text = "-h", \ onvalue = "-h", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var4) self.C4.grid(row=5, column=0, padx=5, pady=5) self.t4 = Text(self.frame_content, height=1, width=20) self.t4.grid(row=5, column=1, padx=5, pady=5) l4 = Label(self.frame_content, text=': source mac for MITM mode', font=self.myfont, bg="white", justify=LEFT).grid(row=5, column=2, padx=5, pady=5) self.C5 = Checkbutton(self.frame_content, text = "-f", \ onvalue = "-f", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var5) self.C5.grid(row=6, column=0, padx=5, pady=5) self.t5 = Text(self.frame_content, height=1, width=20) self.t5.grid(row=6, column=1, padx=5, pady=5) l5 = Label(self.frame_content, text=': disallow specified client MACs (default: allow)', font=self.myfont, bg="white", justify=LEFT).grid(row=6, column=2, padx=5, pady=5) self.C6 = Checkbutton(self.frame_content, text = "-W", \ onvalue = "-W", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var6) self.C6.grid(row=7, column=0, padx=5, pady=5) self.t6 = Text(self.frame_content, height=1, width=20) self.t6.grid(row=7, column=1, padx=5, pady=5) l6 = Label( self.frame_content, text=': [don\'t] set WEP flag in beacons 0|1 (default: auto)', font=self.myfont, bg="white", justify=LEFT).grid(row=7, column=2, padx=5, pady=5) self.C7 = Checkbutton(self.frame_content, text = "-q", \ onvalue = "-q", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var7) self.C7.grid(row=8, column=0, padx=5, pady=5) self.t7 = Text(self.frame_content, height=1, width=20) self.t7.grid(row=8, column=1, padx=5, pady=5) l7 = Label(self.frame_content, text=': quiet (do not print statistics)', font=self.myfont, bg="white", justify=LEFT).grid(row=8, column=2, padx=5, pady=5) self.C8 = Checkbutton(self.frame_content2, text = "-v", \ onvalue = "-v", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var8) self.C8.grid(row=9, column=0, padx=5, pady=5) self.t8 = Text(self.frame_content2, height=1, width=20) self.t8.grid(row=9, column=1, padx=5, pady=5) l8 = Label(self.frame_content2, text=': verbose (print more messages) (long --verbose)', font=self.myfont, bg="white", justify=LEFT).grid(row=9, column=2, padx=5, pady=5) self.C9 = Checkbutton(self.frame_content2, text = "-M", \ onvalue = "-M", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var9) self.C9.grid(row=10, column=0, padx=5, pady=5) self.t9 = Text(self.frame_content2, height=1, width=20) self.t9.grid(row=10, column=1, padx=5, pady=5) l9 = Label(self.frame_content2, text=': M-I-T-M between [specified] clients and bssids', font=self.myfont, bg="white", justify=LEFT).grid(row=10, column=2, padx=5, pady=5) Label(self.frame_content2, text='Airbase-ng', font=self.headerfont, bg="white", padx=10, pady=10).grid(row=0, column=0) self.C10 = Checkbutton(self.frame_content2, text = "-A", \ onvalue = "-A", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var10) self.C10.grid(row=11, column=0, padx=5, pady=5) self.t10 = Text(self.frame_content2, height=1, width=20) self.t10.grid(row=11, column=1, padx=5, pady=5) l10 = Label( self.frame_content2, text=': Ad-Hoc Mode (allows other clients to peer) (long --ad-hoc)', font=self.myfont, bg="white", justify=LEFT).grid(row=11, column=2, padx=5, pady=5) self.C11 = Checkbutton(self.frame_content2, text = "-Y", \ onvalue = "-Y", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var11) self.C11.grid(row=12, column=0, padx=5, pady=5) self.t11 = Text(self.frame_content2, height=1, width=20) self.t11.grid(row=12, column=1, padx=5, pady=5) l11 = Label(self.frame_content2, text=': external packet processing', font=self.myfont, bg="white", justify=LEFT).grid(row=12, column=2, padx=5, pady=5) self.C12 = Checkbutton(self.frame_content2, text = "-c", \ onvalue = "-c", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var12) self.C12.grid(row=13, column=0, padx=5, pady=5) self.t12 = Text(self.frame_content2, height=1, width=20) self.t12.grid(row=13, column=1, padx=5, pady=5) l12 = Label(self.frame_content2, text=': sets the channel the AP is running on', font=self.myfont, bg="white", justify=LEFT).grid(row=13, column=2, padx=5, pady=5) self.C13 = Checkbutton(self.frame_content2, text = "-X", \ onvalue = "-X", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var13) self.C13.grid(row=14, column=0, padx=5, pady=5) self.t13 = Text(self.frame_content2, height=1, width=20) self.t13.grid(row=14, column=1, padx=5, pady=5) l13 = Label(self.frame_content2, text=': hidden ESSID (long --hidden)', font=self.myfont, bg="white", justify=LEFT).grid(row=14, column=2, padx=5, pady=5) self.C14 = Checkbutton(self.frame_content2, text = "-s", \ onvalue = "-s", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var14) self.C14.grid(row=15, column=0, padx=5, pady=5) self.t14 = Text(self.frame_content2, height=1, width=20) self.t14.grid(row=15, column=1, padx=5, pady=5) l14 = Label(self.frame_content2, text=': force shared key authentication', font=self.myfont, bg="white").grid(row=15, column=2, padx=5, pady=5) Label(self.frame_content3, text='Airbase-ng', font=self.headerfont, bg="white", padx=10, pady=10).grid(row=0, column=0) Label(self.frame_content3, text='Filter Options :', font=self.myfontnew, bg="white", justify=LEFT).grid(row=16, column=1) self.C15 = Checkbutton(self.frame_content3, text = "-S", \ onvalue = "-S", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var15) self.C15.grid(row=17, column=0, padx=5, pady=5) self.t15 = Text(self.frame_content3, height=1, width=20) self.t15.grid(row=17, column=1, padx=5, pady=5) l15 = Label(self.frame_content3, text=': set shared key challenge length (default: 128)', font=self.myfont, bg="white", justify=LEFT).grid(row=17, column=2, padx=5, pady=5) self.C16 = Checkbutton(self.frame_content3, text = "-L", \ onvalue = "-L", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var16) self.C16.grid(row=18, column=0, padx=5, pady=5) self.t16 = Text(self.frame_content3, height=1, width=20) self.t16.grid(row=18, column=1, padx=5, pady=5) l16 = Label(self.frame_content3, text=': Caffe-Latte attack (long --caffe-latte)', font=self.myfont, bg="white", justify=LEFT).grid(row=18, column=2, padx=5, pady=5) self.C17 = Checkbutton(self.frame_content3, text = "-N", \ onvalue = "-N", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var17) self.C17.grid(row=19, column=0, padx=5, pady=5) self.t17 = Text(self.frame_content3, height=1, width=20) self.t17.grid(row=19, column=1, padx=5, pady=5) l17 = Label( self.frame_content3, text=': creates arp request against wep client (long cfrag)', font=self.myfont, bg="white", justify=LEFT).grid(row=19, column=2, padx=5, pady=5) self.C18 = Checkbutton(self.frame_content3, text = "-x", \ onvalue = "-x", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var18) self.C18.grid(row=21, column=0, padx=5, pady=5) self.t18 = Text(self.frame_content3, height=1, width=20) self.t18.grid(row=21, column=1, padx=5, pady=5) l18 = Label(self.frame_content3, text=': number of packets per second (default: 100)', font=self.myfont, bg="white", justify=LEFT).grid(row=21, column=2, padx=5, pady=5) self.C19 = Checkbutton(self.frame_content3, text = "-y", \ onvalue = "-y", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var19) self.C19.grid(row=22, column=0, padx=5, pady=5) self.t19 = Text(self.frame_content3, height=1, width=20) self.t19.grid(row=22, column=1, padx=5, pady=5) l19 = Label(self.frame_content3, text=': disables responses to broadcast probes', font=self.myfont, bg="white", justify=LEFT).grid(row=22, column=2, padx=5, pady=5) Label(self.frame_content4, text='Airbase-ng', font=self.headerfont, bg="white", padx=10, pady=10).grid(row=0, column=0) self.C20 = Checkbutton(self.frame_content4, text = "--o", \ onvalue = "--o", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var20) self.C20.grid(row=23, column=0, padx=5, pady=5) self.t20 = Text(self.frame_content4, height=1, width=20) self.t20.grid(row=23, column=1, padx=5, pady=5) l20 = Label( self.frame_content4, text=': set all WPA,WEP,open tags. can\'t be used with -z & -Z', font=self.myfont, bg="white", justify=LEFT).grid(row=23, column=2, padx=5, pady=5) self.C21 = Checkbutton(self.frame_content4, text = "-z", \ onvalue = "-z", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var21) self.C21.grid(row=24, column=0, padx=5, pady=5) self.t21 = Text(self.frame_content4, height=1, width=20) self.t21.grid(row=24, column=1, padx=5, pady=5) l21 = Label( self.frame_content4, text=': sets WPA1 tags. 1=WEP40 2=TKIP 3=WRAP 4=CCMP 5=WEP104', font=self.myfont, bg="white", justify=LEFT).grid(row=24, column=2, padx=5, pady=5) self.C22 = Checkbutton(self.frame_content4, text = "-Z", \ onvalue = "-Z", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var22) self.C22.grid(row=25, column=0, padx=5, pady=5) self.t22 = Text(self.frame_content4, height=1, width=20) self.t22.grid(row=25, column=1, padx=5, pady=5) l22 = Label(self.frame_content4, text=': same as -z, but for WPA2', font=self.myfont, bg="white", justify=LEFT).grid(row=25, column=2, padx=5, pady=5) self.C23 = Checkbutton(self.frame_content4, text = "-V", \ onvalue = "-V", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var23) self.C23.grid(row=26, column=0, padx=5, pady=5) self.t23 = Text(self.frame_content4, height=1, width=20) self.t23.grid(row=26, column=1, padx=5, pady=5) l23 = Label(self.frame_content4, text=': fake EAPOL 1=MD5 2=SHA1 3=auto', font=self.myfont, bg="white", justify=LEFT).grid(row=26, column=2, padx=5, pady=5) self.C24 = Checkbutton(self.frame_content4, text = "-F", \ onvalue = "-F", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var24) self.C24.grid(row=27, column=0, padx=5, pady=5) self.t24 = Text(self.frame_content4, height=1, width=20) self.t24.grid(row=27, column=1, padx=5, pady=5) l24 = Label( self.frame_content4, text=': write all sent and received frames into pcap file', font=self.myfont, bg="white", justify=LEFT).grid(row=27, column=2, padx=5, pady=5) self.C25 = Checkbutton(self.frame_content4, text = "-P", \ onvalue = "-P", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var25) self.C25.grid(row=28, column=0, padx=5, pady=5) self.t25 = Text(self.frame_content4, height=1, width=20) self.t25.grid(row=28, column=1, padx=5, pady=5) l25 = Label( self.frame_content4, text=': respond to all probes, even when specifying ESSIDs', font=self.myfont, bg="white", justify=LEFT).grid(row=28, column=2, padx=5, pady=5) self.C26 = Checkbutton(self.frame_content4, text = "-I", \ onvalue = "-I", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var26) self.C26.grid(row=29, column=0, padx=5, pady=5) self.t26 = Text(self.frame_content4, height=1, width=20) self.t26.grid(row=29, column=1, padx=5, pady=5) l26 = Label(self.frame_content4, text=': sets the beacon interval value in ms', font=self.myfont, bg="white", justify=LEFT).grid(row=29, column=2, padx=5, pady=5) self.C27 = Checkbutton(self.frame_content4, text = "-C", \ onvalue = "-C", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var27) self.C27.grid(row=30, column=0, padx=5, pady=5) self.t27 = Text(self.frame_content4, height=1, width=20) self.t27.grid(row=30, column=1, padx=5, pady=5) l27 = Label( self.frame_content4, text=': enables beaconing of probed ESSID values (requires -P)', font=self.myfont, bg="white", justify=LEFT).grid(row=30, column=2, padx=5, pady=5) Label(self.frame_content6, text='Airbase-ng', font=self.headerfont, bg="white", padx=10, pady=10).grid(row=0, column=0) Label(self.frame_content6, text='Filter Options :', font=self.myfontnew, bg="white", justify=LEFT).grid(row=16, column=1) self.C28 = Checkbutton(self.frame_content6, text = "--bssid", \ onvalue = "--bssid", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var28) self.C28.grid(row=31, column=0, padx=5, pady=5) self.t28 = Text(self.frame_content6, height=1, width=20) self.t28.grid(row=31, column=1, padx=5, pady=5) l28 = Label(self.frame_content6, text=': BSSID to filter/use (short -b)', font=self.myfont, bg="white", justify=LEFT).grid(row=31, column=2, padx=5, pady=5) self.C29 = Checkbutton(self.frame_content6, text = "--bssids", \ onvalue = "--bssids", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var29) self.C29.grid(row=32, column=0, padx=5, pady=5) self.t29 = Text(self.frame_content6, height=1, width=20) self.t29.grid(row=32, column=1, padx=5, pady=5) l29 = Label( self.frame_content6, text=': read a list of BSSIDs out of that file (short -B)', font=self.myfont, bg="white", justify=LEFT).grid(row=32, column=2, padx=5, pady=5) self.C30 = Checkbutton(self.frame_content6, text = "--client", \ onvalue = "--client", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var30) self.C30.grid(row=33, column=0, padx=5, pady=5) self.t30 = Text(self.frame_content6, height=1, width=20) self.t30.grid(row=33, column=1, padx=5, pady=5) l30 = Label(self.frame_content6, text=': MAC of client to accept (short -d)', font=self.myfont, bg="white", justify=LEFT).grid(row=33, column=2, padx=5, pady=5) self.C31 = Checkbutton(self.frame_content6, text = "--clients", \ onvalue = "--clients", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var31) self.C31.grid(row=34, column=0, padx=5, pady=5) self.t31 = Text(self.frame_content6, height=1, width=20) self.t31.grid(row=34, column=1, padx=5, pady=5) l31 = Label(self.frame_content6, text=': read a list of MACs out of that file (short -D)', font=self.myfont, bg="white", justify=LEFT).grid(row=34, column=2, padx=5, pady=5) self.C32 = Checkbutton(self.frame_content6, text = "--essid", \ onvalue = "--essid", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var32) self.C32.grid(row=35, column=0, padx=5, pady=5) self.t32 = Text(self.frame_content6, height=1, width=20) self.t32.grid(row=35, column=1, padx=5, pady=5) l32 = Label(self.frame_content6, text=': specify a single ESSID (short -e)', font=self.myfont, bg="white", justify=LEFT).grid(row=35, column=2, padx=5, pady=5) self.C33 = Checkbutton(self.frame_content6, text = "--essids", \ onvalue = "--essids", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var33) self.C33.grid(row=36, column=0, padx=5, pady=5) self.t33 = Text(self.frame_content6, height=1, width=20) self.t33.grid(row=36, column=1, padx=5, pady=5) l33 = Label( self.frame_content6, text=': read a list of ESSIDs out of that file (short -E)', font=self.myfont, bg="white", justify=LEFT).grid(row=36, column=2, padx=5, pady=5) self.C34 = Checkbutton(self.frame_content6, text = "--help", \ onvalue = "--help", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var34) self.C34.grid(row=37, column=0, padx=5, pady=5) self.t34 = Text(self.frame_content6, height=1, width=20) self.t34.grid(row=37, column=1, padx=5, pady=5) l34 = Label(self.frame_content6, text=': Displays the usage screen (short -H)', font=self.myfont, bg="white", justify=LEFT).grid(row=37, column=2, padx=5, pady=5)
class Propietarios(Frame): def __init__(self, parent, controller): Frame.__init__(self, parent) #VARIABLES GLOBALES global cedula, titulo, ingreso, rsocial, residencia, nombres, apellidos, direccion, telefono, oficina, tel, telfax, correo, cumpleanos, dia, mes, envio, celular, tipopersona, comision, retefuente, reteiva, gcontribuyente, gfactura, gcheque, reprecc, reprenombres, repredireccion, repretelefono, repreoficina, repretel, reprebanco, repretcuenta, reprenumcuenta, tit1cc, tit1nombres, tit1banco, tit1tcuenta, tit1numcuenta, tit2cc, tit2nombres, tit2banco, tit2tcuenta, tit2numcuenta, lb, note, popmenu, busqueda, dato, E #INSTANCIEAS DE LOS WIDGETS global ccE, refE, dateinE, socialE, cityE, nameE, lnameE, adressE, phoneE, officeE, officetelE, telfaxE, emailE, birthdayE, birthdayCbx, mailE, mobileE, personR1, personR2, comisionE, Ch1, Ch2, Ch3, Ch4, Ch5, note, cc0E, name0E, adress0E, phone0E, office0E, officetel0E, bank0Cbx, tbank0Cbx, tcuenta0E, cc1E, name1E, bank1Cbx, tbank1Cbx, tcuenta1E, cc2E, name2E, bank2Cbx, tbank2Cbx, tcuenta2E, add, update, delete, clean global info, lists, _propietarios _propietarios = dict() lists = [] #Variables cedula = StringVar() titulo = StringVar() ingreso = StringVar() rsocial = StringVar() residencia = StringVar() nombres = StringVar() apellidos = StringVar() direccion = StringVar() telefono = StringVar() oficina = StringVar() tel = StringVar() telfax = StringVar() correo = StringVar() dia = IntVar() mes = StringVar() envio = StringVar() celular = StringVar() tipopersona = IntVar() comision = DoubleVar() retefuente = IntVar() reteiva = IntVar() gcontribuyente = IntVar() gfactura = IntVar() gcheque = IntVar() notas = StringVar() #---------------------------- reprecc = StringVar() reprenombres = StringVar() repredireccion = StringVar() repretelefono = StringVar() repreoficina = StringVar() repretel = StringVar() reprebanco = StringVar() repretcuenta = StringVar() reprenumcuenta = StringVar() tit1cc = StringVar() tit1nombres = StringVar() tit1banco = StringVar() tit1tcuenta = StringVar() tit1numcuenta = StringVar() tit2cc = StringVar() tit2nombres = StringVar() tit2banco = StringVar() tit2tcuenta = StringVar() tit2numcuenta = StringVar() meses = [ "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" ] tbancos = [ 'Bancolombia', "Banco Bogotá", "Banco Agrario", "Banco Occidente" ] tbanktype = ['Corriente', 'Ahorro'] #BUSQUEDA = ["Nombre","CC/Nit"] busqueda = StringVar() busqueda.trace("w", lambda name, index, mode: buscar()) info = IntVar() #eleccion = IntVar() dato = StringVar() # MENU DEL MOUSE popmenu = Menu(self, tearoff=0) popmenu.add_command(label="Imprimir", command=hello) popmenu.add_command(label="Cargar", command=modificar) popmenu.add_command(label="Eliminar", command=borrar) #popmenu.add_separator() popmenu.bind('<Escape>', release) #WIDGETS #========================= HEADER ============================== self.header = Label(self, text="GESTIÓN DE PROPIETARIOS", font="bold") self.header.pack(pady=20, side=TOP) #========================== WRAPPER ============================ #Contiene los Notebooks con los campos formulario self.wrapper = Frame(self) self.wrapper.pack(side=LEFT, fill=Y) #Esto centro el wrapper #self.wrapper.pack(side=LEFT, fill=BOTH, expand=True) #================ NOTEBOOK =============> self.nb = Notebook(self.wrapper) #-----------------------> TAB 1 self.tab1 = Frame(self.nb) self.f0 = Frame(self.tab1) #Para dejar espacio entre Tab y Label self.f0.pack(fill=X, pady=10) #------------------------------- #========================= PERSONALES ========================== self.f1 = Frame(self.tab1) #------------------------------- self.f1.pack(pady=5, fill=X) self.ccL = Label(self.f1, text='CC/Nit:') self.ccL.pack(side=LEFT) ccE = Entry(self.f1, textvariable=cedula) ccE.pack(side=LEFT, fill=X, expand=1) ccE.focus_set() self.refL = Label(self.f1, text='Título:') self.refL.pack(side=LEFT) refE = Entry(self.f1, textvariable=titulo, width=10) refE.pack(side=LEFT) #refE.bind("<KeyRelease>", caps) self.dateinL = Label(self.f1, text='Fecha Ingreso:') self.dateinL.pack(side=LEFT) dateinE = Entry(self.f1, textvariable=ingreso, width=10, state=DISABLED) ingreso.set("0000-00-00") dateinE.pack(side=LEFT) self.f2 = Frame(self.tab1) #------------------------------- self.f2.pack(pady=5, fill=X) self.socialL = Label(self.f2, text='Razón Social:') self.socialL.pack(side=LEFT) socialE = Entry(self.f2, textvariable=rsocial) socialE.pack(side=LEFT, fill=X, expand=1) socialE.bind("<KeyRelease>", caps) self.cityL = Label(self.f2, text='Ciudad de residencia:') self.cityL.pack(side=LEFT) cityE = Entry(self.f2, textvariable=residencia, width=15) cityE.pack(side=LEFT) cityE.bind("<KeyRelease>", caps) self.f3 = Frame(self.tab1) self.f3.pack(pady=5, fill=X) #----------------------------------------- self.nameL = Label(self.f3, text='Nombres:') self.nameL.pack(side=LEFT) nameE = Entry(self.f3, textvariable=nombres) nameE.pack(side=LEFT, fill=X, expand=1) nameE.bind("<KeyRelease>", caps) self.lnameL = Label(self.f3, text='Apellidos:') self.lnameL.pack(side=LEFT) lnameE = Entry(self.f3, textvariable=apellidos) lnameE.pack(side=LEFT, fill=X, expand=1) lnameE.bind("<KeyRelease>", caps) self.f4 = Frame(self.tab1) self.f4.pack(pady=5, fill=X) #----------------------------------------- self.adressL = Label(self.f4, text='Dir. Casa:') self.adressL.pack(side=LEFT) adressE = Entry(self.f4, textvariable=direccion) adressE.pack(side=LEFT, fill=X, expand=1) adressE.bind("<KeyRelease>", caps) self.phoneL = Label(self.f4, text='Tel:') self.phoneL.pack(side=LEFT) phoneE = Entry(self.f4, textvariable=telefono, width=20) phoneE.pack(side=LEFT) self.f5 = Frame(self.tab1) self.f5.pack(pady=5, fill=X) #------------------------------------ self.officeL = Label(self.f5, text='Dir. Oficina:') self.officeL.pack(side=LEFT) officeE = Entry(self.f5, textvariable=oficina, width=20) officeE.pack(side=LEFT, fill=X, expand=1) officeE.bind("<KeyRelease>", caps) self.officetelL = Label(self.f5, text='Tel:') self.officetelL.pack(side=LEFT) officetelE = Entry(self.f5, textvariable=tel, width=15) officetelE.pack(fill=X, side=LEFT) self.telfaxL = Label(self.f5, text='Tel. Fax:') self.telfaxL.pack(side=LEFT) telfaxE = Entry(self.f5, textvariable=telfax, width=10) telfaxE.pack(side=LEFT) self.f6 = Frame(self.tab1) self.f6.pack(pady=5, fill=X) #------------------------------------ self.emailL = Label(self.f6, text='Email:') self.emailL.pack(side=LEFT) emailE = Entry(self.f6, textvariable=correo, width=30) emailE.pack(side=LEFT) self.birthdayL = Label(self.f6, text='Cumpleaños:') self.birthdayL.pack(side=LEFT) self.birthdayL2 = Label(self.f6, text='Día:') self.birthdayL2.pack(padx=5, side=LEFT) #s = Spinbox(self.f6, from_=1, to=31,textvariable=dia, width=3) #s.pack(side=LEFT) birthdayE = Entry(self.f6, textvariable=dia, width=3) birthdayE.pack(side=LEFT) self.birthdayL3 = Label(self.f6, text='Mes:') self.birthdayL3.pack(padx=5, side=LEFT) birthdayCbx = Combobox(self.f6, textvariable=mes, values=meses, width=10) birthdayCbx.set('Enero') birthdayCbx.pack(side=LEFT) self.f7 = Frame(self.tab1) self.f7.pack(pady=5, fill=X) #------------------------------------ self.mailL = Label(self.f7, text='Dir. Correspondencia:') self.mailL.pack(side=LEFT) mailE = Entry(self.f7, textvariable=envio) mailE.pack(side=LEFT, fill=X, expand=1) mailE.bind("<KeyRelease>", caps) self.mobileL = Label(self.f7, text='Celular:') self.mobileL.pack(side=LEFT) mobileE = Entry(self.f7, textvariable=celular, width=10) mobileE.pack(side=LEFT, fill=X, expand=1) self.f8 = Frame(self.tab1) self.f8.pack(pady=5, fill=X) #------------------------------------ self.personL = Label(self.f8, text='Tipo Persona:') self.personL.pack(side=LEFT) personR1 = Radiobutton(self.f8, text="Natural", variable=tipopersona, value=1) personR1.pack(padx=20, side=LEFT) personR2 = Radiobutton(self.f8, text="Jurídica", variable=tipopersona, value=2) personR2.pack(padx=20, side=LEFT) self.comisionL = Label(self.f8, text='$ Comisión:') self.comisionL.pack(side=LEFT) comisionE = Entry(self.f8, textvariable=comision, width=5) comisionE.pack(side=LEFT) self.f = Frame(self.tab1) self.f.pack(pady=5, fill=X) #------------------------------------ Ch1 = Checkbutton(self.f, text="Retefuente", variable=retefuente) Ch1.pack(side=LEFT) Ch2 = Checkbutton(self.f, text="Rete IVA", variable=reteiva) Ch2.pack(side=LEFT) Ch3 = Checkbutton(self.f, text="Gran Contribuyente", variable=gcontribuyente) Ch3.pack(side=LEFT) Ch4 = Checkbutton(self.f, text="Genera Factura", variable=gfactura) Ch4.pack(side=LEFT) Ch5 = Checkbutton(self.f, text="Genera Cheque", variable=gcheque) Ch5.pack(side=LEFT) self.f9 = Frame(self.tab1) self.f9.pack(pady=5, fill=X) #------------------------------------ self.notesL = Label(self.f9, text='Observaciones:') self.notesL.pack(side=LEFT) self.f10 = Frame(self.tab1) self.f10.pack(pady=5, fill=X) #------------------------------------ note = Text(self.f10, height=5) note.pack(side=LEFT, fill=X, expand=1) self.tab1.pack() #-----------------------> TAB 2 self.tab2 = Frame(self.nb) self.tab2.pack() self.f0 = Frame(self.tab2) #Para dejar espacio entre Tab y Label self.f0.pack(fill=X, pady=10) #---------------------------------- #======================= COMPLEMENTARIOS ======================= self.lf = LabelFrame(self.tab2, text="Datos Representante") self.f0 = Frame(self.lf) self.f0.pack(fill=X, pady=5) #------------------------------- self.ccRL = Label(self.f0, text='CC:') self.ccRL.pack(side=LEFT) cc0E = Entry(self.f0, textvariable=reprecc, width=10) cc0E.pack(side=LEFT, fill=X, expand=1) self.nameL = Label(self.f0, text='Nombres:') self.nameL.pack(side=LEFT) name0E = Entry(self.f0, textvariable=reprenombres) name0E.pack(side=LEFT, fill=X, expand=1) name0E.bind("<KeyRelease>", caps) self.f1 = Frame(self.lf) self.f1.pack(fill=X, pady=5) #------------------------------- self.adressL = Label(self.f1, text='Dir. Casa:') self.adressL.pack(side=LEFT) adress0E = Entry(self.f1, textvariable=repredireccion) adress0E.pack(side=LEFT, fill=X, expand=1) adress0E.bind("<KeyRelease>", caps) self.phoneL = Label(self.f1, text='Tel:') self.phoneL.pack(side=LEFT) phone0E = Entry(self.f1, textvariable=repretelefono, width=20) phone0E.pack(side=LEFT) self.f2 = Frame(self.lf) self.f2.pack(fill=X, pady=5) #------------------------------- self.officeL = Label(self.f2, text='Dir. Oficina:') self.officeL.pack(side=LEFT) office0E = Entry(self.f2, textvariable=repreoficina) office0E.pack(side=LEFT, fill=X, expand=1) office0E.bind("<KeyRelease>", caps) self.officetelL = Label(self.f2, text='Tel:') self.officetelL.pack(side=LEFT) officetel0E = Entry(self.f2, textvariable=repretel, width=20) officetel0E.pack(fill=X, side=LEFT) self.f3 = Frame(self.lf) self.f3.pack(fill=X) #------------------------------------------- self.tbancpL = Label(self.f3, text='Banco:') self.tbancpL.pack(side=LEFT) bank0Cbx = Combobox(self.f3, textvariable=reprebanco, values=tbancos, width=12) bank0Cbx.set('') bank0Cbx.pack(side=LEFT) self.tbancpL = Label(self.f3, text='Tipo Cuenta:') self.tbancpL.pack(side=LEFT) tbank0Cbx = Combobox(self.f3, textvariable=repretcuenta, values=tbanktype, width=8) tbank0Cbx.set('') tbank0Cbx.pack(side=LEFT) self.tcuentaL = Label(self.f3, text='# Cuenta:') self.tcuentaL.pack(side=LEFT) tcuenta0E = Entry(self.f3, textvariable=reprenumcuenta) tcuenta0E.pack(side=LEFT, fill=X, expand=1) self.lf.pack(fill=X, ipady=5) #================================== self.f0 = Frame(self.tab2) #Para dejar espacio entre Tab y Label self.f0.pack(fill=X, pady=10) #------------------------------- #--------------------------------------------------------------- self.lf1 = LabelFrame(self.tab2, text="Datos Titular 1") self.f4 = Frame(self.lf1) self.f4.pack(fill=X, pady=5) #------------------------------- self.ccL = Label(self.f4, text='CC:') self.ccL.pack(side=LEFT) cc1E = Entry(self.f4, textvariable=tit1cc) cc1E.pack(side=LEFT, fill=X, expand=1) self.nameL = Label(self.f4, text='Nombres:') self.nameL.pack(side=LEFT) name1E = Entry(self.f4, textvariable=tit1nombres) name1E.pack(side=LEFT, fill=X, expand=1) name1E.bind("<KeyRelease>", caps) self.f5 = Frame(self.lf1) self.f5.pack(fill=X) #------------------------------------------- self.tbancpL = Label(self.f5, text='Banco:') self.tbancpL.pack(side=LEFT) bank1Cbx = Combobox(self.f5, textvariable=tit1banco, values=tbancos, width=12) bank1Cbx.set('') bank1Cbx.pack(side=LEFT) self.tbancpL = Label(self.f5, text='Tipo Cuenta:') self.tbancpL.pack(side=LEFT) tbank1Cbx = Combobox(self.f5, textvariable=tit1tcuenta, values=tbanktype, width=8) tbank1Cbx.set('') tbank1Cbx.pack(side=LEFT) self.tcuentaL = Label(self.f5, text='# Cuenta:') self.tcuentaL.pack(side=LEFT) tcuenta1E = Entry(self.f5, textvariable=tit1numcuenta) tcuenta1E.pack(side=LEFT, fill=X, expand=1) self.lf1.pack(fill=X, ipady=5) #================================ self.f0 = Frame(self.tab2) #Para dejar espacio entre Tab y Label self.f0.pack(fill=X, pady=10) #------------------------------- #--------------------------------------------------------------- self.lf2 = LabelFrame(self.tab2, text="Datos Titular 2") self.f5 = Frame(self.lf2) self.f5.pack(fill=X, pady=5) #------------------------------- self.ccL = Label(self.f5, text='CC:') self.ccL.pack(side=LEFT) cc2E = Entry(self.f5, textvariable=tit2cc) cc2E.pack(side=LEFT, fill=X, expand=1) self.nameL = Label(self.f5, text='Nombres:') self.nameL.pack(side=LEFT) name2E = Entry(self.f5, textvariable=tit2nombres) name2E.pack(side=LEFT, fill=X, expand=1) name2E.bind("<KeyRelease>", caps) self.f6 = Frame(self.lf2) self.f6.pack(fill=X) #------------------------------------------- self.tbancpL = Label(self.f6, text='Banco:') self.tbancpL.pack(side=LEFT) bank2Cbx = Combobox(self.f6, textvariable=tit2banco, values=tbancos, width=12) bank2Cbx.set('') bank2Cbx.pack(side=LEFT) self.tbancpL = Label(self.f6, text='Tipo Cuenta:') self.tbancpL.pack(side=LEFT) tbank2Cbx = Combobox(self.f6, textvariable=tit2tcuenta, values=tbanktype, width=8) tbank2Cbx.set('') tbank2Cbx.pack(side=LEFT) self.tcuentaL = Label(self.f6, text='# Cuenta:') self.tcuentaL.pack(side=LEFT) tcuenta2E = Entry(self.f6, textvariable=tit2numcuenta) tcuenta2E.pack(side=LEFT, fill=X, expand=1) self.lf2.pack(fill=X, ipady=5) #================================ #--------------------------------------------------------------- self.nb.add(self.tab1, text="Personales") self.nb.add(self.tab2, text="Complementarios") self.nb.pack() #=========================== BOTONES =========================== self.btns = Frame(self.wrapper) self.btns.pack() #------------------------------- clean = Button(self.btns, text='Limpiar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=limpiar) clean.pack(side=RIGHT) update = Button(self.btns, text='Actualizar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=actualizar, state=DISABLED) update.pack(side=RIGHT) add = Button(self.btns, text='Agregar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=Agregar) add.pack(side=RIGHT) #========================= ASIDE =========================== self.aside = Frame(self) self.aside.pack(side=LEFT, fill=BOTH, expand=True) self.wrap1 = Frame(self.aside) self.wrap1.pack() self.viewer = Label(self.wrap1, text="LISTA DE PROPIETARIOS") self.viewer.pack() scroll = Scrollbar(self.wrap1, orient=VERTICAL) scroll.pack(side=RIGHT, fill=Y) lb = Listbox(self.wrap1, yscrollcommand=scroll.set, height=20, width=30, bg='#d8ecf3') scroll.config(command=lb.yview) lb.pack(fill=BOTH) lb.bind("<Double-Button-1>", callback) lb.bind("<Button-3>", popup) #lb.bind('<Escape>', release) self.wrap2 = Frame(self.aside) self.wrap2.pack() self.updateBP = Button(self.wrap2, text='Cargar lista', width=20, bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=cargar_lista) self.updateBP.pack() delete = Button(self.wrap2, text='Borrar', bg='navy', width=20, foreground='white', activebackground='red3', activeforeground='white', command=borrar) delete.pack() edit = Button(self.wrap2, text='Modificar', bg='navy', width=20, foreground='white', activebackground='red3', activeforeground='white', command=modificar) edit.pack() self.wrap3 = Frame(self.aside) self.wrap3.pack() buscador = Label(self.wrap3, text="Buscar por:") buscador.pack(side=LEFT) R1 = Radiobutton(self.wrap3, text="CC", variable=info, value=1) R1.pack(side=LEFT) R2 = Radiobutton(self.wrap3, text="Apellido", variable=info, value=2) R2.pack(side=LEFT) info.set(1) self.wrap4 = Frame(self.aside) self.wrap4.pack() E = Entry(self.wrap4, textvariable=busqueda, width=24) E.pack() E.bind("<KeyRelease>", caps)
def show_sell_bills(master): """Заполняет верхний фрейм продаж блокнотом со счетами и сответствующими элементами управления.""" sellTopFrame = Frame(master, relief=GROOVE) sellTopFrame.pack(side=TOP, fill=X, padx=10, pady=5) #------------------------------------------------------------ def b_add(): """Срабатывает при нажатии кнопки "Добавить счет", добавляет таб в блокноте со счетами""" bill = Bill(note) bills.append(bill) tab = bill.frame note.add(tab, text = show_sell_bills.entry.get()) button_del_bill.configure(state=NORMAL) button_add_bill = Button(sellTopFrame,text=u'Добавить\nсчет', style='Little.TButton', command=b_add) button_add_bill.pack(side=LEFT, padx=10, pady=10, fill=X) #------------------------------------------------------------ """Хоть и без отдельной функции, но комментарий расширенный стоит дать. Это окошко ввода названия для создаваемого счета""" show_sell_bills.entry = StringVar() show_sell_bills.entry.set(u'Стол ') entry = Entry(sellTopFrame, textvariable=show_sell_bills.entry, font=('verdana', FONT_SIZE)) entry.pack(side=LEFT, padx=10, pady=10) #------------------------------------------------------------ def b_left(): """Срабатывает при нажатии кнопки "влево", сдвигается влево на один таб в блокноте со счетами""" w_name = note.select() window_names = note.tabs() if window_names: index = window_names.index(w_name) - 1 note.select(window_names[index]) button_left = Button(sellTopFrame, image=data.IMG_INTERFACE[3], command=b_left) button_left.pack(side=LEFT, padx=5, pady=5) #------------------------------------------------------------ def b_right(): """Срабатывает при нажатии кнопки "вправо", сдвигается вправо на один таб в блокноте со счетами""" w_name = note.select() window_names = note.tabs() if window_names: index = window_names.index(w_name) + 1 if index == len(window_names): index = 0 note.select(window_names[index]) button_right = Button(sellTopFrame, image=data.IMG_INTERFACE[4], command=b_right) button_right.pack(side=LEFT, padx=5, pady=5) #------------------------------------------------------------ def b_del(): """Срабатывает при нажатии кнопки "удалить счет", удаляет таб в блокноте со счетами""" w_name = note.select() window_names = note.tabs() if not window_names: button_del_bill.configure(state=DISABLED) else: index = window_names.index(w_name) if not bills[index].bill: note.forget(note.select()) del(bills[index]) if not note.tabs(): button_del_bill.configure(state=DISABLED) else: if tkMessageBox.askokcancel('Внимание!', 'Вы уверены, что хотите удалить этот счет?'): note.forget(note.select()) del(bills[index]) if not note.tabs(): button_del_bill.configure(state=DISABLED) button_del_bill = Button(sellTopFrame,text=u'Удалить\nсчет', style='Little.TButton', command=b_del) button_del_bill.pack(side=LEFT, padx=10, pady=10, fill=X) #----- ОСТАВШИЕСЯ ЭЛЕМЕНТЫ - БЛОКНОТ, СЧЕТЧИК ПРОДАЖ, КАЛЬКУЛЯТОР ------ label = Label(sellTopFrame, text='', bg='white', font=('Lucida Console', FONT_SIZE)) label.pack(side=RIGHT, padx=10, pady=5) def label_renew(): """Обновляет счетчик продаж в верхнем правом углу экрана""" sold = '%6.2f' % round(queries.sell_in_day(),2) + ' грн.' label.configure(text='СЕГОДНЯ ПРОДАНО\n на ' + sold) label_renew() show_sell_bills.label_renew = label_renew #----------- button_calc = Button(sellTopFrame, image=data.IMG_INTERFACE[8], command=calculator_press) button_calc.pack(side=RIGHT, padx=5, pady=5) button_paid = Button(sellTopFrame, image=data.IMG_INTERFACE[10], width=8, compound=LEFT, text=u'Блокнот\nрасходов', command=lambda: calc_pad(data)) button_paid.pack(side=RIGHT, padx=5, pady=5) #----------- note = Notebook(master, style='Custom.TNotebook') bills = [] note.pack(side=TOP, padx=BILL_PAD_X, pady=BILL_PAD_Y) #----------- Один пустой столик ставим по умолчанию ---------- bill = Bill(note) bills.append(bill) tab = bill.frame note.add(tab, text = u' Стол 1 ') #------------------------------------------------------------- #--------Автоподъем высоты ------------ sellTopFrame.update() y1 = sellTopFrame.winfo_height() y2 = note.winfo_height() master.configure(height = y1 + y2 + 40) master.pack_propagate(False) #--------------------------------------- calculator_press.window_calc = False return bills, note
#Create a Main Window to display MainWindow = Tk() MainWindow.title('Cloud Sync') MainWindow.minsize(500, 500) MainWindow.maxsize(500, 500) #Create tabs _tabs = Notebook(MainWindow) _tabs.pack(fill='both', expand='yes') _tab_upload = Text(MainWindow) _tab_dropBox = Text(MainWindow) _tab_googleDrive = Text(MainWindow) #Add tabs to the Main Window _tabs.add(_tab_upload, text='Upload') _tabs.add(_tab_dropBox, text='Dropbox') _tabs.add(_tab_googleDrive, text='Google Drive') #Label is used to display information to user _label_upload = Label(_tab_upload, fg='Red', text='Choose a file to upload', bg='white', font=("Calibri", 10)) _label_upload.pack(pady=10) #Button let's the user select a file to upload _button_upload = Button(_tab_upload, text="Upload", pady=5, width=10, command=uploadFile) _button_upload.pack(pady=10) #Lets user choose the file to be downloaded from Dropbox/Google Drive _label_dropBox = Label(_tab_dropBox, fg='Red', text='Choose a file to download', bg='white', font=("Calibri", 10)) _label_dropBox.pack(pady=10) _listbox_dropBox = Listbox(_tab_dropBox, width=50, height=15)
def __init__(self, master): self.fname = "" #global variables self.t1 = StringVar() self.t2 = StringVar() self.t3 = StringVar() self.t4 = StringVar() self.t5 = StringVar() self.t6 = StringVar() self.t7 = StringVar() self.t8 = StringVar() self.t9 = StringVar() self.t10 = StringVar() self.t11 = StringVar() self.t12 = StringVar() self.t13 = StringVar() self.t14 = StringVar() self.t15 = StringVar() self.t16 = StringVar() self.t17 = StringVar() self.t18 = StringVar() self.t19 = StringVar() self.t20 = StringVar() self.t21 = StringVar() self.t22 = StringVar() self.t23 = StringVar() self.t24 = StringVar() self.t25 = StringVar() self.t26 = StringVar() self.t27 = StringVar() self.t28 = StringVar() self.t29 = StringVar() self.t30 = StringVar() self.t31 = StringVar() self.t32 = StringVar() self.t33 = StringVar() self.t34 = StringVar() self.var1 = StringVar() self.var2 = StringVar() self.var3 = StringVar() self.var4 = StringVar() self.var5 = StringVar() self.var6 = StringVar() self.var7 = StringVar() self.var8 = StringVar() self.var9 = StringVar() self.var10 = StringVar() self.var11 = StringVar() self.var12 = StringVar() self.var13 = StringVar() self.var14 = StringVar() self.var15 = StringVar() self.var16 = StringVar() self.var17 = StringVar() self.var18 = StringVar() self.var19 = StringVar() self.var20 = StringVar() self.var21 = StringVar() self.var22 = StringVar() self.var23 = StringVar() self.var24 = StringVar() self.var25 = StringVar() self.var26 = StringVar() self.var27 = StringVar() self.var28 = StringVar() self.var29 = StringVar() self.var30 = StringVar() self.var31 = StringVar() self.var32 = StringVar() self.var33 = StringVar() self.var34 = StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=750, height=470) #end #title of window master.title("Aircrack-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont = tkFont.Font(family="Helvetica", size=15, underline=True) self.myfontnew = tkFont.Font(family="Helvetica", size=11, underline=True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb, name="frame_content", bg="lightsteelblue") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook # repeat for each tab self.frame_content2 = Frame(nb, name='frame_content2', bg="lightsteelblue") nb.add(self.frame_content2, text="Filter-2") self.frame_content3 = Frame(nb, name='frame_content3', bg="lightsteelblue") nb.add(self.frame_content3, text="Filter-3") self.frame_content4 = Frame(nb, name='frame_content4', bg="lightsteelblue") nb.add(self.frame_content4, text="Filter-4") self.frame_content6 = Frame(nb, name='frame_content6', bg="lightsteelblue") nb.add(self.frame_content6, text="Filter-5") self.frame_content7 = Frame(nb, name='frame_content7', bg="lightsteelblue") nb.add(self.frame_content7, text="Detect Devices") self.frame_content5 = Frame(nb, name='frame_content5', bg="lightsteelblue") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text='Aircrack-ng', font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row=0, column=0) btndetect = Button(self.frame_content7, text='Detect', fg="cornflowerblue", command=self.canvas_detect, height=2, width=15, font=self.customFont).grid(row=1, column=0, padx=5, pady=5) btndbrowse = Button(self.frame_content7, text='Attach File', fg="cornflowerblue", command=self.browse_file, height=2, width=15, font=self.customFont).grid(row=3, column=0, padx=5, pady=5) self.lilnew1 = Listbox(self.frame_content7, bg="black", fg="firebrick", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row=1, column=1, rowspan=3) #End Label(self.frame_content, text='Aircrack-ng', font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row=0, column=0) Label(self.frame_content, text='Options :', font=self.myfontnew, bg="midnightblue", fg="deepskyblue").grid(row=1, column=1) #Button(self.frame_content, text = 'ivs', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 0, padx = 5, pady = 5) #Button(self.frame_content, text = 'gpsd', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 1, padx = 5, pady = 5) #Button(self.frame_content, text = 'write', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 2, padx = 5, pady = 5) #command Listbox Label(self.frame_content5, text='Edit Command From Here', font=self.myfontnew, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=0, column=0) TextCommandBox = Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output = Text(self.frame_content5, bg="black", fg="firebrick", font=self.myfont, height=20, width=42) self.output.grid(row=0, column=1, padx=50, pady=5, rowspan=3) btnsubmit = Button(self.frame_content5, width=15, height=2, text="Get Result", fg="cornflowerblue", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear = Button(self.frame_content5, width=15, height=2, text="Clear Output", fg="cornflowerblue", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "-a", fg="deepskyblue", \ onvalue = "-a", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var1) self.C1.grid(row=2, column=0, padx=5, pady=5) self.t1 = Text(self.frame_content, height=1, width=20) self.t1.grid(row=2, column=1, padx=5, pady=5) l1 = Label( self.frame_content, text=': Force attack mode (1 = static WEP, 2 = WPA/WPA2-PSK).', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=2, column=2, padx=5, pady=5) self.C2 = Checkbutton(self.frame_content, text = "-b", fg="deepskyblue", \ onvalue = "-b", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var2) self.C2.grid(row=3, column=0, padx=5, pady=5) self.t2 = Text(self.frame_content, height=1, width=20) self.t2.grid(row=3, column=1, padx=5, pady=5) l2 = Label( self.frame_content, text= ': Long version bssid. Select the target network based on\n the access point\'s MAC address.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=3, column=2, padx=5, pady=5) self.C3 = Checkbutton(self.frame_content, text = "-e", fg="deepskyblue", \ onvalue = "-e", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var3) self.C3.grid(row=4, column=0, padx=5, pady=5) self.t3 = Text(self.frame_content, height=1, width=20) self.t3.grid(row=4, column=1, padx=5, pady=5) l3 = Label( self.frame_content, text= ': If set, all IVs from networks with the same ESSID will be used.\n This option is also required for WPA/WPA2-PSK cracking if the\n ESSID is not broadcasted (hidden).', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=4, column=2, padx=5, pady=5) self.C4 = Checkbutton(self.frame_content, text = "-p", fg="deepskyblue", \ onvalue = "-p", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var4) self.C4.grid(row=5, column=0, padx=5, pady=5) self.t4 = Text(self.frame_content, height=1, width=20) self.t4.grid(row=5, column=1, padx=5, pady=5) l4 = Label( self.frame_content, text= ': On SMP systems: # of CPU to use. This option is invalid on\n non-SMP systems.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=5, column=2, padx=5, pady=5) self.C5 = Checkbutton(self.frame_content, text = "-q", fg="deepskyblue", \ onvalue = "-q", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var5) self.C5.grid(row=6, column=0, padx=5, pady=5) self.t5 = Text(self.frame_content, height=1, width=20) self.t5.grid(row=6, column=1, padx=5, pady=5) l5 = Label( self.frame_content, text= ': Enable quiet mode (no status output until the key is found, or not).', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=6, column=2, padx=5, pady=5) self.C6 = Checkbutton(self.frame_content, text = "-c", fg="deepskyblue", \ onvalue = "-c", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var6) self.C6.grid(row=7, column=0, padx=5, pady=5) self.t6 = Text(self.frame_content, height=1, width=20) self.t6.grid(row=7, column=1, padx=5, pady=5) l6 = Label( self.frame_content, text= ': (WEP cracking) Restrict the search space to alpha-numeric\n characters only (0x20 - 0x7F).', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=7, column=2, padx=5, pady=5) self.C7 = Checkbutton(self.frame_content, text = "-t", fg="deepskyblue", \ onvalue = "-t", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var7) self.C7.grid(row=8, column=0, padx=5, pady=5) self.t7 = Text(self.frame_content, height=1, width=20) self.t7.grid(row=8, column=1, padx=5, pady=5) l7 = Label( self.frame_content, text= ': (WEP cracking) Restrict the search space to binary coded decimal\n hex characters.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=8, column=2, padx=5, pady=5) Label(self.frame_content2, text='Aircrack-ng', font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row=0, column=0) #frame2 self.C8 = Checkbutton(self.frame_content2, text = "-h", fg="deepskyblue", \ onvalue = "-h", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var8) self.C8.grid(row=9, column=0, padx=5, pady=5) self.t8 = Text(self.frame_content2, height=1, width=20) self.t8.grid(row=9, column=1, padx=5, pady=5) l8 = Label( self.frame_content2, text= ': (WEP cracking) Restrict the search space to numeric\n characters (0x30-0x39) These keys are used by default\n in most Fritz!BOXes.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=9, column=2, padx=5, pady=5) self.C9 = Checkbutton(self.frame_content2, text = "-d", fg="deepskyblue", \ onvalue = "-d", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var9) self.C9.grid(row=10, column=0, padx=5, pady=5) self.t9 = Text(self.frame_content2, height=1, width=20) self.t9.grid(row=10, column=1, padx=5, pady=5) l9 = Label( self.frame_content2, text= ': (WEP cracking) Long version debug. Set the beginning\n of the WEP key (in hex), for debugging purposes.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=10, column=2, padx=5, pady=5) self.C10 = Checkbutton(self.frame_content2, text = "-m", fg="deepskyblue", \ onvalue = "-m", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var10) self.C10.grid(row=11, column=0, padx=5, pady=5) self.t10 = Text(self.frame_content2, height=1, width=20) self.t10.grid(row=11, column=1, padx=5, pady=5) l10 = Label( self.frame_content2, text= ': (WEP cracking) MAC address to filter WEP data packets.\n Alternatively, specify -m ff:ff:ff:ff:ff:ff to use all and every IVs,\n regardless of the network.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=11, column=2, padx=5, pady=5) self.C11 = Checkbutton(self.frame_content2, text = "-M", fg="deepskyblue", \ onvalue = "-M", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var11) self.C11.grid(row=12, column=0, padx=5, pady=5) self.t11 = Text(self.frame_content2, height=1, width=20) self.t11.grid(row=12, column=1, padx=5, pady=5) l11 = Label( self.frame_content2, text=': (WEP cracking) Sets the maximum number of ivs to use.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=12, column=2, padx=5, pady=5) self.C12 = Checkbutton(self.frame_content2, text = "-n", fg="deepskyblue", \ onvalue = "-n", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var12) self.C12.grid(row=13, column=0, padx=5, pady=5) self.t12 = Text(self.frame_content2, height=1, width=20) self.t12.grid(row=13, column=1, padx=5, pady=5) l12 = Label( self.frame_content2, text= ': (WEP cracking) Specify the length of the key: 64 for 40-bit\n WEP, 128 for 104-bit WEP, etc. The default value is 128.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=13, column=2, padx=5, pady=5) self.C13 = Checkbutton(self.frame_content2, text = "-i", fg="deepskyblue", \ onvalue = "-i", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var13) self.C13.grid(row=14, column=0, padx=5, pady=5) self.t13 = Text(self.frame_content2, height=1, width=20) self.t13.grid(row=14, column=1, padx=5, pady=5) l13 = Label( self.frame_content2, text= ': (WEP cracking) Only keep the IVs that have this key index\n (1 to 4). The default behaviour is to ignore the key index.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=14, column=2, padx=5, pady=5) self.C14 = Checkbutton(self.frame_content2, text = "-f", fg="deepskyblue", \ onvalue = "-f", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var14) self.C14.grid(row=15, column=0, padx=5, pady=5) self.t14 = Text(self.frame_content2, height=1, width=20) self.t14.grid(row=15, column=1, padx=5, pady=5) l14 = Label( self.frame_content2, text= ': (WEP cracking) By default, this parameter is set to 2 for\n 104-bit WEP and to 5 for 40-bit WEP. Specify a higher\n value to increase the bruteforce level: cracking will take\n more time, but with a higher likelyhood of success.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=15, column=2, padx=5, pady=5) #frame3 Label(self.frame_content3, text='Aircrack-ng', font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row=0, column=0) self.C15 = Checkbutton(self.frame_content3, text = "-H", fg="deepskyblue", \ onvalue = "-H", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var15) self.C15.grid(row=17, column=0, padx=5, pady=5) self.t15 = Text(self.frame_content3, height=1, width=20) self.t15.grid(row=17, column=1, padx=5, pady=5) l15 = Label(self.frame_content3, text=': Long version help. Output help information.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=17, column=2, padx=5, pady=5) self.C16 = Checkbutton(self.frame_content3, text = "-l", fg="deepskyblue", \ onvalue = "-l", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var16) self.C16.grid(row=18, column=0, padx=5, pady=5) self.t16 = Text(self.frame_content3, height=1, width=20) self.t16.grid(row=18, column=1, padx=5, pady=5) l16 = Label( self.frame_content3, text=': (Lowercase L, ell) logs the key to the file specified.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=18, column=2, padx=5, pady=5) self.C17 = Checkbutton(self.frame_content3, text = "-K", fg="deepskyblue", \ onvalue = "-K", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var17) self.C17.grid(row=19, column=0, padx=5, pady=5) self.t17 = Text(self.frame_content3, height=1, width=20) self.t17.grid(row=19, column=1, padx=5, pady=5) l17 = Label( self.frame_content3, text= ': (WEP cracking) There are 17 korek statistical attacks.\n Sometimes one attack creates a huge false positive that\n prevents the key from being found, even with lots of IVs.\n Try -k 1, -k 2, -k 17 to disable each attack selectively.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=19, column=2, padx=5, pady=5) self.C18 = Checkbutton(self.frame_content3, text = "-k", fg="deepskyblue", \ onvalue = "-k", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var18) self.C18.grid(row=21, column=0, padx=5, pady=5) self.t18 = Text(self.frame_content3, height=1, width=20) self.t18.grid(row=21, column=1, padx=5, pady=5) l18 = Label(self.frame_content3, text=': number of packets per second (default: 100)', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=21, column=2, padx=5, pady=5) self.C19 = Checkbutton(self.frame_content3, text = "-p", fg="deepskyblue", \ onvalue = "-p", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var19) self.C19.grid(row=22, column=0, padx=5, pady=5) self.t19 = Text(self.frame_content3, height=1, width=20) self.t19.grid(row=22, column=1, padx=5, pady=5) l19 = Label( self.frame_content3, text= ': Allow the number of threads for cracking even if you have\n a non-SMP computer.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=22, column=2, padx=5, pady=5) self.C20 = Checkbutton(self.frame_content3, text = "-r", fg="deepskyblue", \ onvalue = "-r", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var20) self.C20.grid(row=23, column=0, padx=5, pady=5) self.t20 = Text(self.frame_content3, height=1, width=20) self.t20.grid(row=23, column=1, padx=5, pady=5) l20 = Label( self.frame_content3, text= ': Utilizes a database generated by airolib-ng as input to\n determine the WPA key. Outputs an error message if\n aircrack-ng has not been compiled with sqlite support.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=23, column=2, padx=5, pady=5) self.C21 = Checkbutton(self.frame_content3, text = "-x/-x0", fg="deepskyblue", \ onvalue = "-x/-x0", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var21) self.C21.grid(row=24, column=0, padx=5, pady=5) self.t21 = Text(self.frame_content3, height=1, width=20) self.t21.grid(row=24, column=1, padx=5, pady=5) l21 = Label(self.frame_content3, text=': (WEP cracking) Disable last keybytes brutforce.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=24, column=2, padx=5, pady=5) #frame4 Label(self.frame_content4, text='Aircrack-ng', font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row=0, column=0) self.C22 = Checkbutton(self.frame_content4, text = "-x1", fg="deepskyblue", \ onvalue = "-x1", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var22) self.C22.grid(row=25, column=0, padx=5, pady=5) self.t22 = Text(self.frame_content4, height=1, width=20) self.t22.grid(row=25, column=1, padx=5, pady=5) l22 = Label( self.frame_content4, text= ': (WEP cracking) Enable last keybyte bruteforcing (default).', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=25, column=2, padx=5, pady=5) self.C23 = Checkbutton(self.frame_content4, text = "-x2", fg="deepskyblue", \ onvalue = "-x2", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var23) self.C23.grid(row=26, column=0, padx=5, pady=5) self.t23 = Text(self.frame_content4, height=1, width=20) self.t23.grid(row=26, column=1, padx=5, pady=5) l23 = Label( self.frame_content4, text=': (WEP cracking) Enable last two keybytes bruteforcing.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=26, column=2, padx=5, pady=5) self.C24 = Checkbutton(self.frame_content4, text = "-X", fg="deepskyblue", \ onvalue = "-X", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var24) self.C24.grid(row=27, column=0, padx=5, pady=5) self.t24 = Text(self.frame_content4, height=1, width=20) self.t24.grid(row=27, column=1, padx=5, pady=5) l24 = Label( self.frame_content4, text= ': (WEP cracking) Disable bruteforce multithreading (SMP only).', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=27, column=2, padx=5, pady=5) self.C25 = Checkbutton(self.frame_content4, text = "-y", fg="deepskyblue", \ onvalue = "-y", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var25) self.C25.grid(row=28, column=0, padx=5, pady=5) self.t25 = Text(self.frame_content4, height=1, width=20) self.t25.grid(row=28, column=1, padx=5, pady=5) l25 = Label( self.frame_content4, text= ': (WEP cracking) Experimental single bruteforce attack which\n should only be used when the standard attack mode fails with\n more than one million IVs', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=28, column=2, padx=5, pady=5) self.C26 = Checkbutton(self.frame_content4, text = "-u", fg="deepskyblue", \ onvalue = "-u", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var26) self.C26.grid(row=29, column=0, padx=5, pady=5) self.t26 = Text(self.frame_content4, height=1, width=20) self.t26.grid(row=29, column=1, padx=5, pady=5) l26 = Label( self.frame_content4, text= ': Long form -cpu-detect. Provide information on the number of\n CPUs and MMX support. Example responses to "aircrack-ng \n -cpu-detect" are "Nb CPU detected: 2" or Nb CPU detected: \n 1 (MMX available)".', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=29, column=2, padx=5, pady=5) self.C27 = Checkbutton(self.frame_content4, text = "-w", fg="deepskyblue", \ onvalue = "-w", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var27) self.C27.grid(row=30, column=0, padx=5, pady=5) self.t27 = Text(self.frame_content4, height=1, width=20) self.t27.grid(row=30, column=1, padx=5, pady=5) l27 = Label( self.frame_content4, text= ': (WPA cracking) Path to a wordlist or "-"without the quotes for \n standard in (stdin).', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=30, column=2, padx=5, pady=5) self.C28 = Checkbutton(self.frame_content4, text = "-z", fg="deepskyblue", \ onvalue = "-z", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var28) self.C28.grid(row=31, column=0, padx=5, pady=5) self.t28 = Text(self.frame_content4, height=1, width=20) self.t28.grid(row=31, column=1, padx=5, pady=5) l28 = Label( self.frame_content4, text=': Invokes the PTW WEP cracking method. (Default in v1.x)', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=31, column=2, padx=5, pady=5) #frame4 Label(self.frame_content6, text='Aircrack-ng', font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row=0, column=0) self.C29 = Checkbutton(self.frame_content6, text = "-P", fg="deepskyblue", \ onvalue = "-P", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var29) self.C29.grid(row=32, column=0, padx=5, pady=5) self.t29 = Text(self.frame_content6, height=1, width=20) self.t29.grid(row=32, column=1, padx=5, pady=5) l29 = Label( self.frame_content6, text=': Long version -ptw-debug. Invokes the PTW debug mode.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=32, column=2, padx=5, pady=5) self.C30 = Checkbutton(self.frame_content6, text = "-C", fg="deepskyblue", \ onvalue = "-C", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var30) self.C30.grid(row=33, column=0, padx=5, pady=5) self.t30 = Text(self.frame_content6, height=1, width=20) self.t30.grid(row=33, column=1, padx=5, pady=5) l30 = Label( self.frame_content6, text= ': Long version -combine. Merge the given APs to a virtual one.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=33, column=2, padx=5, pady=5) self.C31 = Checkbutton(self.frame_content6, text = "-D", fg="deepskyblue", \ onvalue = "-D", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var31) self.C31.grid(row=34, column=0, padx=5, pady=5) self.t31 = Text(self.frame_content6, height=1, width=20) self.t31.grid(row=34, column=1, padx=5, pady=5) l31 = Label( self.frame_content6, text=': Long version -wep-decloak. Run in WEP decloak mode.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=34, column=2, padx=5, pady=5) self.C32 = Checkbutton(self.frame_content6, text = "-V", fg="deepskyblue", \ onvalue = "-V", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var32) self.C32.grid(row=35, column=0, padx=5, pady=5) self.t32 = Text(self.frame_content6, height=1, width=20) self.t32.grid(row=35, column=1, padx=5, pady=5) l32 = Label( self.frame_content6, text= ': Long version -visual-inspection. Run in visual inspection mode.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=35, column=2, padx=5, pady=5) self.C33 = Checkbutton(self.frame_content6, text = "-1", fg="deepskyblue", \ onvalue = "-1", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var33) self.C33.grid(row=36, column=0, padx=5, pady=5) self.t33 = Text(self.frame_content6, height=1, width=20) self.t33.grid(row=36, column=1, padx=5, pady=5) l33 = Label(self.frame_content6, text=': Long version -oneshot. Run in oneshot mode.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=36, column=2, padx=5, pady=5) self.C34 = Checkbutton(self.frame_content6, text = "-S", fg="deepskyblue", \ onvalue = "-S", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var34) self.C34.grid(row=37, column=0, padx=5, pady=5) self.t34 = Text(self.frame_content6, height=1, width=20) self.t34.grid(row=37, column=1, padx=5, pady=5) l34 = Label(self.frame_content6, text=': WPA cracking speed test.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=37, column=2, padx=5, pady=5)
class MainWindow(object): def __init__(self, root, debugger): ''' ----------------------------------------------------- | main button toolbar | ----------------------------------------------------- | < ma | in content area > | | | | | | | File list | File name | Inspector | | (stack/ | Code area | | | breakpnts) | | | | | | | | | | | ----------------------------------------------------- | status bar area | ----------------------------------------------------- ''' # Obtain and expand the current working directory. base_path = os.path.abspath(os.getcwd()) base_path = os.path.normcase(base_path) + '/' # Create a filename normalizer based on the CWD. self.filename_normalizer = filename_normalizer(base_path) self.debugger = debugger # Associate the debugger with this view. self.debugger.view = self # Root window self.root = root self.root.title('Bugjar') self.root.geometry('1024x768') # Prevent the menus from having the empty tearoff entry self.root.option_add('*tearOff', False) # Catch the close button self.root.protocol("WM_DELETE_WINDOW", self.cmd_quit) # Catch the "quit" event. self.root.createcommand('exit', self.cmd_quit) # Setup the menu self._setup_menubar() # Set up the main content for the window. self._setup_button_toolbar() self._setup_main_content() self._setup_status_bar() # Now configure the weights for the root frame self.root.columnconfigure(0, weight=1) self.root.rowconfigure(0, weight=0) self.root.rowconfigure(1, weight=1) self.root.rowconfigure(2, weight=0) debugger.start() ###################################################### # Internal GUI layout methods. ###################################################### def _setup_menubar(self): # Menubar self.menubar = Menu(self.root) # self.menu_Apple = Menu(self.menubar, name='Apple') # self.menubar.add_cascade(menu=self.menu_Apple) self.menu_file = Menu(self.menubar) self.menubar.add_cascade(menu=self.menu_file, label='File') self.menu_program = Menu(self.menubar) self.menubar.add_cascade(menu=self.menu_program, label='Program') self.menu_help = Menu(self.menubar) self.menubar.add_cascade(menu=self.menu_help, label='Help') # self.menu_Apple.add_command(label='Test', command=self.cmd_dummy) # self.menu_file.add_command(label='New', command=self.cmd_dummy, accelerator="Command-N") self.menu_file.add_command(label='Open...', command=self.cmd_open_file, accelerator="Command-O") self.root.bind('<Command-o>', self.cmd_open_file) # self.menu_file.add_command(label='Close', command=self.cmd_dummy) self.menu_program.add_command(label='Run', command=self.cmd_run, accelerator="R") self.root.bind('<r>', self.cmd_run) self.menu_program.add_command(label='Step', command=self.cmd_step, accelerator="S") self.root.bind('<s>', self.cmd_step) self.menu_program.add_command(label='Next', command=self.cmd_next, accelerator="N") self.root.bind('<n>', self.cmd_next) self.menu_program.add_command(label='Return', command=self.cmd_return, accelerator="BackSpace") self.root.bind('<BackSpace>', self.cmd_return) self.menu_help.add_command(label='Open Documentation', command=self.cmd_bugjar_docs) self.menu_help.add_command(label='Open Bugjar project page', command=self.cmd_bugjar_page) self.menu_help.add_command(label='Open Bugjar on GitHub', command=self.cmd_bugjar_github) self.menu_help.add_command(label='Open BeeWare project page', command=self.cmd_beeware_page) # last step - configure the menubar self.root['menu'] = self.menubar def _setup_button_toolbar(self): ''' The button toolbar runs as a horizontal area at the top of the GUI. It is a persistent GUI component ''' # Main toolbar self.toolbar = Frame(self.root) self.toolbar.grid(column=0, row=0, sticky=(W, E)) # Buttons on the toolbar self.run_button = Button(self.toolbar, text='Run', command=self.cmd_run) self.run_button.grid(column=0, row=0) self.step_button = Button(self.toolbar, text='Step', command=self.cmd_step) self.step_button.grid(column=1, row=0) self.next_button = Button(self.toolbar, text='Next', command=self.cmd_next) self.next_button.grid(column=2, row=0) self.return_button = Button(self.toolbar, text='Return', command=self.cmd_return) self.return_button.grid(column=3, row=0) self.toolbar.columnconfigure(0, weight=0) self.toolbar.rowconfigure(0, weight=0) def _setup_main_content(self): ''' Sets up the main content area. It is a persistent GUI component ''' # Main content area self.content = PanedWindow(self.root, orient=HORIZONTAL) self.content.grid(column=0, row=1, sticky=(N, S, E, W)) # Create subregions of the content self._setup_file_lists() self._setup_code_area() self._setup_inspector() # Set up weights for the left frame's content self.content.columnconfigure(0, weight=1) self.content.rowconfigure(0, weight=1) self.content.pane(0, weight=1) self.content.pane(1, weight=2) self.content.pane(2, weight=1) def _setup_file_lists(self): self.file_notebook = Notebook(self.content, padding=(0, 5, 0, 5)) self.content.add(self.file_notebook) self._setup_stack_frame_list() self._setup_breakpoint_list() def _setup_stack_frame_list(self): self.stack_frame = Frame(self.content) self.stack_frame.grid(column=0, row=0, sticky=(N, S, E, W)) self.file_notebook.add(self.stack_frame, text='Stack') self.stack = StackView(self.stack_frame, normalizer=self.filename_normalizer) self.stack.grid(column=0, row=0, sticky=(N, S, E, W)) # # The tree's vertical scrollbar self.stack_scrollbar = Scrollbar(self.stack_frame, orient=VERTICAL) self.stack_scrollbar.grid(column=1, row=0, sticky=(N, S)) # # Tie the scrollbar to the text views, and the text views # # to each other. self.stack.config(yscrollcommand=self.stack_scrollbar.set) self.stack_scrollbar.config(command=self.stack.yview) # Setup weights for the "stack" tree self.stack_frame.columnconfigure(0, weight=1) self.stack_frame.columnconfigure(1, weight=0) self.stack_frame.rowconfigure(0, weight=1) # Handlers for GUI events self.stack.bind('<<TreeviewSelect>>', self.on_stack_frame_selected) def _setup_breakpoint_list(self): self.breakpoints_frame = Frame(self.content) self.breakpoints_frame.grid(column=0, row=0, sticky=(N, S, E, W)) self.file_notebook.add(self.breakpoints_frame, text='Breakpoints') self.breakpoints = BreakpointView(self.breakpoints_frame, normalizer=self.filename_normalizer) self.breakpoints.grid(column=0, row=0, sticky=(N, S, E, W)) # The tree's vertical scrollbar self.breakpoints_scrollbar = Scrollbar(self.breakpoints_frame, orient=VERTICAL) self.breakpoints_scrollbar.grid(column=1, row=0, sticky=(N, S)) # Tie the scrollbar to the text views, and the text views # to each other. self.breakpoints.config(yscrollcommand=self.breakpoints_scrollbar.set) self.breakpoints_scrollbar.config(command=self.breakpoints.yview) # Setup weights for the "breakpoint list" tree self.breakpoints_frame.columnconfigure(0, weight=1) self.breakpoints_frame.columnconfigure(1, weight=0) self.breakpoints_frame.rowconfigure(0, weight=1) # Handlers for GUI events self.breakpoints.tag_bind('breakpoint', '<Double-Button-1>', self.on_breakpoint_double_clicked) self.breakpoints.tag_bind('breakpoint', '<<TreeviewSelect>>', self.on_breakpoint_selected) self.breakpoints.tag_bind('file', '<<TreeviewSelect>>', self.on_breakpoint_file_selected) def _setup_code_area(self): self.code_frame = Frame(self.content) self.code_frame.grid(column=1, row=0, sticky=(N, S, E, W)) # Label for current file self.current_file = StringVar() self.current_file_label = Label(self.code_frame, textvariable=self.current_file) self.current_file_label.grid(column=0, row=0, sticky=(W, E)) # Code display area self.code = DebuggerCode(self.code_frame, debugger=self.debugger) self.code.grid(column=0, row=1, sticky=(N, S, E, W)) # Set up weights for the code frame's content self.code_frame.columnconfigure(0, weight=1) self.code_frame.rowconfigure(0, weight=0) self.code_frame.rowconfigure(1, weight=1) self.content.add(self.code_frame) def _setup_inspector(self): self.inspector_frame = Frame(self.content) self.inspector_frame.grid(column=2, row=0, sticky=(N, S, E, W)) self.inspector = InspectorView(self.inspector_frame) self.inspector.grid(column=0, row=0, sticky=(N, S, E, W)) # The tree's vertical scrollbar self.inspector_scrollbar = Scrollbar(self.inspector_frame, orient=VERTICAL) self.inspector_scrollbar.grid(column=1, row=0, sticky=(N, S)) # Tie the scrollbar to the text views, and the text views # to each other. self.inspector.config(yscrollcommand=self.inspector_scrollbar.set) self.inspector_scrollbar.config(command=self.inspector.yview) # Setup weights for the "breakpoint list" tree self.inspector_frame.columnconfigure(0, weight=1) self.inspector_frame.columnconfigure(1, weight=0) self.inspector_frame.rowconfigure(0, weight=1) self.content.add(self.inspector_frame) def _setup_status_bar(self): # Status bar self.statusbar = Frame(self.root) self.statusbar.grid(column=0, row=2, sticky=(W, E)) # Current status self.run_status = StringVar() self.run_status_label = Label(self.statusbar, textvariable=self.run_status) self.run_status_label.grid(column=0, row=0, sticky=(W, E)) self.run_status.set('Not running') # Main window resize handle self.grip = Sizegrip(self.statusbar) self.grip.grid(column=1, row=0, sticky=(S, E)) # Set up weights for status bar frame self.statusbar.columnconfigure(0, weight=1) self.statusbar.columnconfigure(1, weight=0) self.statusbar.rowconfigure(0, weight=0) ###################################################### # Utility methods for controlling content ###################################################### def show_file(self, filename, line=None, breakpoints=None): """Show the content of the nominated file. If specified, line is the current line number to highlight. If the line isn't currently visible, the window will be scrolled until it is. breakpoints is a list of line numbers that have current breakpoints. If refresh is true, the file will be reloaded and redrawn. """ # Set the filename label for the current file self.current_file.set(self.filename_normalizer(filename)) # Update the code view; this means changing the displayed file # if necessary, and updating the current line. if filename != self.code.filename: self.code.filename = filename for bp in self.debugger.breakpoints(filename).values(): if bp.enabled: self.code.enable_breakpoint(bp.line) else: self.code.disable_breakpoint(bp.line) self.code.line = line ###################################################### # TK Main loop ###################################################### def mainloop(self): self.root.mainloop() ###################################################### # TK Command handlers ###################################################### def cmd_quit(self): "Quit the debugger" self.debugger.stop() self.root.quit() def cmd_run(self, event=None): "Run until the next breakpoint, or end of execution" self.debugger.do_run() def cmd_step(self, event=None): "Step into the next line of code" self.debugger.do_step() def cmd_next(self, event=None): "Run the next line of code in the current frame" self.debugger.do_next() def cmd_return(self, event=None): "Return to the previous frame" self.debugger.do_return() def cmd_open_file(self, event=None): "Open a file in the breakpoint pane" filename = tkFileDialog.askopenfilename(initialdir=os.path.abspath(os.getcwd())) if filename: # Convert to canonical form filename = os.path.abspath(filename) filename = os.path.normcase(filename) # Show the file contents self.code.filename = filename # Ensure the file appears on the breakpoint list self.breakpoints.insert_filename(filename) # Show the breakpoint panel self.file_notebook.select(self.breakpoints_frame) # ... select the new filename self.breakpoints.selection_set(filename) # .. and clear any currently selected item on the stack tree self.stack.selection_remove(self.stack.selection()) def cmd_bugjar_page(self): "Show the Bugjar project page" webbrowser.open_new('http://pybee.org/bugjar') def cmd_bugjar_github(self): "Show the Bugjar GitHub repo" webbrowser.open_new('http://github.com/pybee/bugjar') def cmd_bugjar_docs(self): "Show the Bugjar documentation" # If this is a formal release, show the docs for that # version. otherwise, just show the head docs. if len(NUM_VERSION) == 3: webbrowser.open_new('http://bugjar.readthedocs.org/en/v%s/' % VERSION) else: webbrowser.open_new('http://bugjar.readthedocs.org/') def cmd_beeware_page(self): "Show the BeeWare project page" webbrowser.open_new('http://pybee.org/') ###################################################### # Handlers for GUI actions ###################################################### def on_stack_frame_selected(self, event): "When a stack frame is selected, highlight the file and line" if event.widget.selection(): _, index = event.widget.selection()[0].split(':') line, frame = self.debugger.stack[int(index)] # Display the file in the code view self.show_file(filename=frame['filename'], line=line) # Display the contents of the selected frame in the inspector self.inspector.show_frame(frame) # Clear any currently selected item on the breakpoint tree self.breakpoints.selection_remove(self.breakpoints.selection()) def on_breakpoint_selected(self, event): "When a breakpoint on the tree has been selected, show the breakpoint" if event.widget.selection(): parts = event.widget.focus().split(':') bp = self.debugger.breakpoint((parts[0], int(parts[1]))) self.show_file(filename=bp.filename, line=bp.line) # Clear any currently selected item on the stack tree self.stack.selection_remove(self.stack.selection()) def on_breakpoint_file_selected(self, event): "When a file is selected on the breakpoint tree, show the file" if event.widget.selection(): filename = event.widget.focus() self.show_file(filename=filename) # Clear any currently selected item on the stack tree self.stack.selection_remove(self.stack.selection()) def on_breakpoint_double_clicked(self, event): "When a breakpoint on the tree is double clicked, toggle it's status" if event.widget.selection(): parts = event.widget.focus().split(':') bp = self.debugger.breakpoint((parts[0], int(parts[1]))) if bp.enabled: self.debugger.disable_breakpoint(bp) else: self.debugger.enable_breakpoint(bp) # Clear any currently selected item on the stack tree self.stack.selection_remove(self.stack.selection()) ###################################################### # Handlers for debugger responses ###################################################### def on_stack(self, stack): "A report of a new stack" # Make sure the stack frame list is displayed self.file_notebook.select(self.stack_frame) # Update the stack list self.stack.update_stack(stack) if len(stack) > 0: # Update the display of the current file line = stack[-1][0] filename = stack[-1][1]['filename'] self.show_file(filename=filename, line=line) # Select the current stack frame in the frame list self.stack.selection_set('frame:%s' % (len(stack) - 1)) else: # No current frame (probably end of execution), # so clear the current line marker self.code.line = None def on_line(self, filename, line): "A single line of code has been executed" self.run_status.set('Line (%s:%s)' % (filename, line)) def on_call(self, args): "A callable has been invoked" self.run_status.set('Call: %s' % args) def on_return(self, retval): "A callable has returned" self.run_status.set('Return: %s' % retval) def on_exception(self, name, value): "An exception has been raised" self.run_status.set('Exception: %s - %s' % (name, value)) tkMessageBox.showwarning(message='%s: %s' % (name, value)) def on_postmortem(self): "An exception has been raised" self.run_status.set('Post mortem mode') tkMessageBox.showerror(message='Entering post mortem mode. Step/Next will restart') def on_restart(self): "The code has finished running, and will start again" self.run_status.set('Not running') tkMessageBox.showinfo(message='Program has finished, and will restart.') def on_info(self, message): "The debugger needs to inform the user of something" tkMessageBox.showinfo(message=message) def on_warning(self, message): "The debugger needs to warn the user of something" tkMessageBox.showwarning(message=message) def on_error(self, message): "The debugger needs to report an error" tkMessageBox.showerror(message=message) def on_breakpoint_enable(self, bp): "A breakpoint has been enabled in the debugger" # If the breakpoint is in the currently displayed file, updated # the display of the breakpoint. if bp.filename == self.code.filename: self.code.enable_breakpoint(bp.line, temporary=bp.temporary) # ... then update the display of the breakpoint on the tree self.breakpoints.update_breakpoint(bp) def on_breakpoint_disable(self, bp): "A breakpoint has been disabled in the debugger" # If the breakpoint is in the currently displayed file, updated # the display of the breakpoint. if bp.filename == self.code.filename: self.code.disable_breakpoint(bp.line) # ... then update the display of the breakpoint on the tree self.breakpoints.update_breakpoint(bp) def on_breakpoint_ignore(self, bp, count): "A breakpoint has been ignored by the debugger" # If the breakpoint is in the currently displayed file, updated # the display of the breakpoint. if bp.filename == self.code.filename: self.code.ignore_breakpoint(bp.line) # ... then update the display of the breakpoint on the tree self.breakpoints.update_breakpoint(bp) def on_breakpoint_clear(self, bp): "A breakpoint has been cleared in the debugger" # If the breakpoint is in the currently displayed file, updated # the display of the breakpoint. if bp.filename == self.code.filename: self.code.clear_breakpoint(bp.line) # ... then update the display of the breakpoint on the tree self.breakpoints.update_breakpoint(bp)
class ReciboCaja(Frame): def __init__(self, parent, controller): Frame.__init__(self, parent) lupa = PhotoImage(file='img/lupa.png') #VARIABLES tcontrato = ['Vivienda', 'Comercial'] aplica = StringVar() #WIDGETS #========================= HEADER =========================== self.header = Label(self, text="RECIBO DE CAJA", font="bold") self.header.pack(pady=20, side=TOP) #========================== WRAPPER ========================== self.wrapper = Frame (self) self.wrapper.pack(side=TOP, fill=Y) #self.wrapper.pack(side=LEFT, fill=Y)#Este ubica el forma a la IZA #================ NOTEBOOK =============> self.nb = Notebook(self.wrapper) #-----------------------> TAB 1 self.tab1 = Frame (self.nb) self.tab1.pack() self.f0 = Frame(self.tab1)#------------------------------------- self.f0.pack(pady=5,fill=X) self.R1 = Radiobutton(self.f0, text="Arrendatario", variable=aplica, value='Arrendatario') self.R1.pack(padx=20,side=LEFT) self.R2 = Radiobutton (self.f0, text="Propietario", variable=aplica, value='Propietario') self.R2.pack(padx=20,side=LEFT) self.R3 = Radiobutton (self.f0, text="Tercero", variable=aplica, value='Tercero') self.R3.pack(padx=20,side=LEFT) self.f1 = Frame(self.tab1)#------------------------------------- self.f1.pack(pady=5,fill=X) self.cc = Label(self.f1, text='CC/Nit: ') self.cc.pack(side=LEFT) self.ccE = Entry(self.f1) self.ccE.pack(side=LEFT) self.b1 = Button(self.f1, text='Buscar', image=lupa) self.b1.image=lupa self.b1.pack(side=LEFT) self.f2 = Frame(self.tab1) self.f2.pack(pady=5,fill=X)#------------------------------------ self.nombre = Label(self.f2, text='Nombre:') self.nombre.pack(side=LEFT) self.nombrE = Entry(self.f2, width=5, state=DISABLED) self.nombrE.pack(side=LEFT, fill=X, expand=1) self.f3 = Frame(self.tab1) self.f3.pack(pady=5,fill=X)#------------------------------------ self.inmueble = Label(self.f3, text='Inmueble:') self.inmueble.pack(side=LEFT) self.inmuebleCbx = Combobox(self.f3, values=NONE, width=10) self.inmuebleCbx.set('') self.inmuebleCbx.pack(side=LEFT, fill=X, expand=1) self.b2 = Button(self.f3, text='Agregar', image=lupa) self.b2.image=lupa self.b2.pack(side=LEFT) self.f4 = Frame(self.tab1) self.f4.pack(pady=5,fill=X)#------------------------------------ self.fpago = Label(self.f4, text='Forma de Pago:') self.fpago.pack(side=LEFT) self.fpagoCbx = Combobox(self.f4, values=NONE, width=10) self.fpagoCbx.set('') self.fpagoCbx.pack(side=LEFT) self.b3 = Button(self.f4, text='Crear novedad', state=DISABLED) self.b3.pack(side=LEFT) #========================== TREEVIEW =========================== self.f5 = Frame(self.tab1) self.f5.pack(pady=5,fill=X)#------------------------------------ self.tree = Treeview(self.f5, height=4, show="headings", columns=('col1','col2','col3')) self.tree.pack(side=LEFT, fill=X, expand=1) self.tree.column('col1', width=20, anchor='center') self.tree.column('col2', width=200, anchor='center') self.tree.column('col3', width=10, anchor='center') self.tree.heading('col1', text='CC') self.tree.heading('col2', text='Descripción') self.tree.heading('col3', text='Valor') self.scroll = Scrollbar(self.f3,orient=VERTICAL,command=self.tree.yview) self.tree.configure(yscrollcommand=self.scroll.set) self.f6 = Frame(self.tab1) self.f6.pack(pady=5,fill=X)#-------------------- self.notesL = Label(self.f6, text='Observaciones:') self.notesL.pack(side=LEFT) self.f7 = Frame(self.tab1) self.f7.pack(pady=5,fill=X)#------------------- self.notesT = Text(self.f7, height=5) self.notesT.pack(fill=X, side=LEFT, expand=1) #-----------------------> TAB 2 self.tab2 = Frame (self.nb) self.tab2.pack() #-----------------------> TAB 3 self.tab3 = Frame (self.nb) self.tab3.pack() #--------------------------------------------------------------- self.nb.add (self.tab1, text="Datos Generales") self.nb.add(self.tab2, text="Referencia de Pago", state=DISABLED) self.nb.add(self.tab3, text="Referencias Bancarias", state=DISABLED) self.nb.pack() #--------------------------------------------------------------- self.fBtn = Frame(self.wrapper) self.fBtn.pack()#------------------------------- self.queryB = Button(self.fBtn, text='Consultar') self.queryB.pack(side=RIGHT) self.deleteB = Button(self.fBtn, text='Borrar') self.deleteB.pack(side=RIGHT) self.updateB = Button(self.fBtn, text='Actualizar') self.updateB.pack(side=RIGHT) self.addB = Button(self.fBtn, text='Agregar') self.addB.pack(side=RIGHT) #========================= ASIDE =========================== """
def __init__(self, master): self.fname="" #global variables self.t1=StringVar() self.t2=StringVar() self.t3=StringVar() self.t4=StringVar() self.t5=StringVar() self.t6=StringVar() self.t7=StringVar() self.t8=StringVar() self.t9=StringVar() self.t10=StringVar() self.t11=StringVar() self.t12=StringVar() self.t13=StringVar() self.t14=StringVar() self.t15=StringVar() self.t16=StringVar() self.t17=StringVar() self.t18=StringVar() self.t19=StringVar() self.t20=StringVar() self.t21=StringVar() self.t22=StringVar() self.t23=StringVar() self.t24=StringVar() self.t25=StringVar() self.t26=StringVar() self.t27=StringVar() self.t28=StringVar() self.t29=StringVar() self.t30=StringVar() self.t31=StringVar() self.t32=StringVar() self.t33=StringVar() self.t34=StringVar() self.var1=StringVar() self.var2=StringVar() self.var3=StringVar() self.var4=StringVar() self.var5=StringVar() self.var6=StringVar() self.var7=StringVar() self.var8=StringVar() self.var9=StringVar() self.var10=StringVar() self.var11=StringVar() self.var12=StringVar() self.var13=StringVar() self.var14=StringVar() self.var15=StringVar() self.var16=StringVar() self.var17=StringVar() self.var18=StringVar() self.var19=StringVar() self.var20=StringVar() self.var21=StringVar() self.var22=StringVar() self.var23=StringVar() self.var24=StringVar() self.var25=StringVar() self.var26=StringVar() self.var27=StringVar() self.var28=StringVar() self.var29=StringVar() self.var30=StringVar() self.var31=StringVar() self.var32=StringVar() self.var33=StringVar() self.var34=StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=650, height=385) #end #title of window master.title("Airbase-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont=tkFont.Font(family="Helvetica", size=15,underline = True) self.myfontnew=tkFont.Font(family="Helvetica", size=11,underline = True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb,name="frame_content", bg="white") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook # repeat for each tab self.frame_content2 = Frame(nb, name='frame_content2', bg="white") nb.add(self.frame_content2, text="Filter-2") self.frame_content3 = Frame(nb, name='frame_content3', bg="white") nb.add(self.frame_content3, text="Filter-3") self.frame_content4 = Frame(nb, name='frame_content4', bg="white") nb.add(self.frame_content4, text="Filter-4") self.frame_content6 = Frame(nb, name='frame_content6', bg="white") nb.add(self.frame_content6, text="Filter-5") self.frame_content7 = Frame(nb, name='frame_content7', bg="white") nb.add(self.frame_content7, text="Detect Devices") self.frame_content5 = Frame(nb, name='frame_content5', bg="white") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text = 'Airbase-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) btndetect=Button(self.frame_content7, text = 'Detect', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 1, column = 0, padx = 5, pady = 5) btndbrowse=Button(self.frame_content7, text = 'Attach File', command =self.browse_file, height=2, width=15, font=self.customFont).grid(row = 3, column = 0, padx = 5, pady = 5) self.lilnew1=Listbox(self.frame_content7,bg="black", fg="white", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row = 1, column = 1, rowspan=3) #End Label(self.frame_content, text = 'Airbase-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) Label(self.frame_content, text = 'Options :',font=self.myfontnew, bg="white").grid(row = 1, column = 1) #command Listbox Label(self.frame_content5, text = 'Edit Command From Here',font=self.myfontnew, bg="white", justify=LEFT).grid(row = 0, column = 0) TextCommandBox=Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output=Text(self.frame_content5,bg="black", fg="white", font=self.myfont, height=20, width=42) self.output.grid(row = 0, column = 1, padx=50, pady=5, rowspan=3) btnsubmit=Button(self.frame_content5, width=15, height=2, text="Get Result", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear=Button(self.frame_content5, width=15, height=2, text="Clear Output", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "-a", \ onvalue = "-a", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var1) self.C1.grid(row = 2, column = 0, padx = 5, pady = 5) self.t1=Text(self.frame_content,height=1,width = 20) self.t1.grid(row = 2, column = 1, padx = 5, pady = 5) l1=Label(self.frame_content, text = ': set Access Point MAC address',font=self.myfont, bg="white", justify=LEFT).grid(row = 2, column = 2, padx = 5, pady = 5) self.C2 = Checkbutton(self.frame_content, text = "-i", \ onvalue = "-i", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var2) self.C2.grid(row = 3, column = 0, padx = 5, pady = 5) self.t2=Text(self.frame_content,height=1,width = 20) self.t2.grid(row = 3, column = 1, padx = 5, pady = 5) l2=Label(self.frame_content, text = ': capture packets from this interface',font=self.myfont, bg="white", justify=LEFT).grid(row = 3, column = 2, padx = 5, pady = 5) self.C3 = Checkbutton(self.frame_content, text = "-w", \ onvalue = "-w", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var3) self.C3.grid(row = 4, column = 0, padx = 5, pady = 5) self.t3=Text(self.frame_content,height=1,width = 20) self.t3.grid(row = 4, column = 1, padx = 5, pady = 5) l3=Label(self.frame_content, text = ': use this WEP key to encrypt/decrypt packets',font=self.myfont, bg="white", justify=LEFT).grid(row = 4, column = 2, padx = 5, pady = 5) self.C4 = Checkbutton(self.frame_content, text = "-h", \ onvalue = "-h", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var4) self.C4.grid(row = 5, column = 0, padx = 5, pady = 5) self.t4=Text(self.frame_content,height=1,width = 20) self.t4.grid(row = 5, column = 1, padx = 5, pady = 5) l4=Label(self.frame_content, text = ': source mac for MITM mode',font=self.myfont, bg="white", justify=LEFT).grid(row = 5, column = 2, padx = 5, pady = 5) self.C5 = Checkbutton(self.frame_content, text = "-f", \ onvalue = "-f", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var5) self.C5.grid(row = 6, column = 0, padx = 5, pady = 5) self.t5=Text(self.frame_content,height=1,width = 20) self.t5.grid(row = 6, column = 1, padx = 5, pady = 5) l5=Label(self.frame_content, text = ': disallow specified client MACs (default: allow)',font=self.myfont, bg="white", justify=LEFT).grid(row = 6, column = 2, padx = 5, pady = 5) self.C6 = Checkbutton(self.frame_content, text = "-W", \ onvalue = "-W", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var6) self.C6.grid(row = 7, column = 0, padx = 5, pady = 5) self.t6=Text(self.frame_content,height=1,width = 20) self.t6.grid(row = 7, column = 1, padx = 5, pady = 5) l6=Label(self.frame_content, text = ': [don\'t] set WEP flag in beacons 0|1 (default: auto)',font=self.myfont, bg="white", justify=LEFT).grid(row = 7, column = 2, padx = 5, pady = 5) self.C7 = Checkbutton(self.frame_content, text = "-q", \ onvalue = "-q", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var7) self.C7.grid(row = 8, column = 0, padx = 5, pady = 5) self.t7=Text(self.frame_content,height=1,width = 20) self.t7.grid(row = 8, column = 1, padx = 5, pady = 5) l7=Label(self.frame_content, text = ': quiet (do not print statistics)',font=self.myfont, bg="white", justify=LEFT).grid(row = 8, column = 2, padx = 5, pady = 5) self.C8 = Checkbutton(self.frame_content2, text = "-v", \ onvalue = "-v", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var8) self.C8.grid(row = 9, column = 0, padx = 5, pady = 5) self.t8=Text(self.frame_content2,height=1,width = 20) self.t8.grid(row = 9, column = 1, padx = 5, pady = 5) l8=Label(self.frame_content2, text = ': verbose (print more messages) (long --verbose)',font=self.myfont, bg="white", justify=LEFT).grid(row = 9, column = 2, padx = 5, pady = 5) self.C9 = Checkbutton(self.frame_content2, text = "-M", \ onvalue = "-M", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var9) self.C9.grid(row = 10, column = 0, padx = 5, pady = 5) self.t9=Text(self.frame_content2,height=1,width = 20) self.t9.grid(row = 10, column = 1, padx = 5, pady = 5) l9=Label(self.frame_content2, text = ': M-I-T-M between [specified] clients and bssids',font=self.myfont, bg="white", justify=LEFT).grid(row = 10, column = 2, padx = 5, pady = 5) Label(self.frame_content2, text = 'Airbase-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) self.C10 = Checkbutton(self.frame_content2, text = "-A", \ onvalue = "-A", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var10) self.C10.grid(row = 11, column = 0, padx = 5, pady = 5) self.t10=Text(self.frame_content2,height=1,width = 20) self.t10.grid(row = 11, column = 1, padx = 5, pady = 5) l10=Label(self.frame_content2, text = ': Ad-Hoc Mode (allows other clients to peer) (long --ad-hoc)',font=self.myfont, bg="white", justify=LEFT).grid(row = 11, column = 2, padx = 5, pady = 5) self.C11 = Checkbutton(self.frame_content2, text = "-Y", \ onvalue = "-Y", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var11) self.C11.grid(row = 12, column = 0, padx = 5, pady = 5) self.t11=Text(self.frame_content2,height=1,width = 20) self.t11.grid(row = 12, column = 1, padx = 5, pady = 5) l11=Label(self.frame_content2, text = ': external packet processing',font=self.myfont, bg="white", justify=LEFT).grid(row = 12, column = 2, padx = 5, pady = 5) self.C12 = Checkbutton(self.frame_content2, text = "-c", \ onvalue = "-c", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var12) self.C12.grid(row = 13, column = 0, padx = 5, pady = 5) self.t12=Text(self.frame_content2,height=1,width = 20) self.t12.grid(row = 13, column = 1, padx = 5, pady = 5) l12=Label(self.frame_content2, text = ': sets the channel the AP is running on',font=self.myfont, bg="white", justify=LEFT).grid(row = 13, column = 2, padx = 5, pady = 5) self.C13 = Checkbutton(self.frame_content2, text = "-X", \ onvalue = "-X", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var13) self.C13.grid(row = 14, column = 0, padx = 5, pady = 5) self.t13=Text(self.frame_content2,height=1,width = 20) self.t13.grid(row = 14, column = 1, padx = 5, pady = 5) l13=Label(self.frame_content2, text = ': hidden ESSID (long --hidden)',font=self.myfont, bg="white", justify=LEFT).grid(row = 14, column = 2, padx = 5, pady = 5) self.C14 = Checkbutton(self.frame_content2, text = "-s", \ onvalue = "-s", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var14) self.C14.grid(row = 15, column = 0, padx = 5, pady = 5) self.t14=Text(self.frame_content2,height=1,width = 20) self.t14.grid(row = 15, column = 1, padx = 5, pady = 5) l14=Label(self.frame_content2, text = ': force shared key authentication',font=self.myfont, bg="white").grid(row = 15, column = 2, padx = 5, pady = 5) Label(self.frame_content3, text = 'Airbase-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) Label(self.frame_content3, text = 'Filter Options :',font=self.myfontnew, bg="white", justify=LEFT).grid(row = 16, column = 1) self.C15 = Checkbutton(self.frame_content3, text = "-S", \ onvalue = "-S", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var15) self.C15.grid(row = 17, column = 0, padx = 5, pady = 5) self.t15=Text(self.frame_content3,height=1,width = 20) self.t15.grid(row = 17, column = 1, padx = 5, pady = 5) l15=Label(self.frame_content3, text = ': set shared key challenge length (default: 128)',font=self.myfont, bg="white", justify=LEFT).grid(row = 17, column = 2, padx = 5, pady = 5) self.C16 = Checkbutton(self.frame_content3, text = "-L", \ onvalue = "-L", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var16) self.C16.grid(row = 18, column = 0, padx = 5, pady = 5) self.t16=Text(self.frame_content3,height=1,width = 20) self.t16.grid(row = 18, column = 1, padx = 5, pady = 5) l16=Label(self.frame_content3, text = ': Caffe-Latte attack (long --caffe-latte)',font=self.myfont, bg="white", justify=LEFT).grid(row = 18, column = 2, padx = 5, pady = 5) self.C17 = Checkbutton(self.frame_content3, text = "-N", \ onvalue = "-N", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var17) self.C17.grid(row = 19, column = 0, padx = 5, pady = 5) self.t17=Text(self.frame_content3,height=1,width = 20) self.t17.grid(row = 19, column = 1, padx = 5, pady = 5) l17=Label(self.frame_content3, text = ': creates arp request against wep client (long cfrag)',font=self.myfont, bg="white", justify=LEFT).grid(row = 19, column = 2, padx = 5, pady = 5) self.C18 = Checkbutton(self.frame_content3, text = "-x", \ onvalue = "-x", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var18) self.C18.grid(row = 21, column = 0, padx = 5, pady = 5) self.t18=Text(self.frame_content3,height=1,width = 20) self.t18.grid(row = 21, column = 1, padx = 5, pady = 5) l18=Label(self.frame_content3, text = ': number of packets per second (default: 100)',font=self.myfont, bg="white", justify=LEFT).grid(row = 21, column = 2, padx = 5, pady = 5) self.C19 = Checkbutton(self.frame_content3, text = "-y", \ onvalue = "-y", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var19) self.C19.grid(row = 22, column = 0, padx = 5, pady = 5) self.t19=Text(self.frame_content3,height=1,width = 20) self.t19.grid(row = 22, column = 1, padx = 5, pady = 5) l19=Label(self.frame_content3, text = ': disables responses to broadcast probes',font=self.myfont, bg="white", justify=LEFT).grid(row = 22, column = 2, padx = 5, pady = 5) Label(self.frame_content4, text = 'Airbase-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) self.C20 = Checkbutton(self.frame_content4, text = "--o", \ onvalue = "--o", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var20) self.C20.grid(row = 23, column = 0, padx = 5, pady = 5) self.t20=Text(self.frame_content4,height=1,width = 20) self.t20.grid(row = 23, column = 1, padx = 5, pady = 5) l20=Label(self.frame_content4, text = ': set all WPA,WEP,open tags. can\'t be used with -z & -Z',font=self.myfont, bg="white", justify=LEFT).grid(row = 23, column = 2, padx = 5, pady = 5) self.C21 = Checkbutton(self.frame_content4, text = "-z", \ onvalue = "-z", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var21) self.C21.grid(row = 24, column = 0, padx = 5, pady = 5) self.t21=Text(self.frame_content4,height=1,width = 20) self.t21.grid(row = 24, column = 1, padx = 5, pady = 5) l21=Label(self.frame_content4, text = ': sets WPA1 tags. 1=WEP40 2=TKIP 3=WRAP 4=CCMP 5=WEP104',font=self.myfont, bg="white", justify=LEFT).grid(row = 24, column = 2, padx = 5, pady = 5) self.C22 = Checkbutton(self.frame_content4, text = "-Z", \ onvalue = "-Z", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var22) self.C22.grid(row = 25, column = 0, padx = 5, pady = 5) self.t22=Text(self.frame_content4,height=1,width = 20) self.t22.grid(row = 25, column = 1, padx = 5, pady = 5) l22=Label(self.frame_content4, text = ': same as -z, but for WPA2',font=self.myfont, bg="white", justify=LEFT).grid(row = 25, column = 2, padx = 5, pady = 5) self.C23 = Checkbutton(self.frame_content4, text = "-V", \ onvalue = "-V", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var23) self.C23.grid(row = 26, column = 0, padx = 5, pady = 5) self.t23=Text(self.frame_content4,height=1,width = 20) self.t23.grid(row = 26, column = 1, padx = 5, pady = 5) l23=Label(self.frame_content4, text = ': fake EAPOL 1=MD5 2=SHA1 3=auto',font=self.myfont, bg="white", justify=LEFT).grid(row = 26, column = 2, padx = 5, pady = 5) self.C24 = Checkbutton(self.frame_content4, text = "-F", \ onvalue = "-F", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var24) self.C24.grid(row = 27, column = 0, padx = 5, pady = 5) self.t24=Text(self.frame_content4,height=1,width = 20) self.t24.grid(row = 27, column = 1, padx = 5, pady = 5) l24=Label(self.frame_content4, text = ': write all sent and received frames into pcap file',font=self.myfont, bg="white", justify=LEFT).grid(row = 27, column = 2, padx = 5, pady = 5) self.C25 = Checkbutton(self.frame_content4, text = "-P", \ onvalue = "-P", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var25) self.C25.grid(row = 28, column = 0, padx = 5, pady = 5) self.t25=Text(self.frame_content4,height=1,width = 20) self.t25.grid(row = 28, column = 1, padx = 5, pady = 5) l25=Label(self.frame_content4, text = ': respond to all probes, even when specifying ESSIDs',font=self.myfont, bg="white", justify=LEFT).grid(row = 28, column = 2, padx = 5, pady = 5) self.C26 = Checkbutton(self.frame_content4, text = "-I", \ onvalue = "-I", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var26) self.C26.grid(row = 29, column = 0, padx = 5, pady = 5) self.t26=Text(self.frame_content4,height=1,width = 20) self.t26.grid(row = 29, column = 1, padx = 5, pady = 5) l26=Label(self.frame_content4, text = ': sets the beacon interval value in ms',font=self.myfont, bg="white", justify=LEFT).grid(row = 29, column = 2, padx = 5, pady = 5) self.C27 = Checkbutton(self.frame_content4, text = "-C", \ onvalue = "-C", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var27) self.C27.grid(row = 30, column = 0, padx = 5, pady = 5) self.t27=Text(self.frame_content4,height=1,width = 20) self.t27.grid(row = 30, column = 1, padx = 5, pady = 5) l27=Label(self.frame_content4, text = ': enables beaconing of probed ESSID values (requires -P)',font=self.myfont, bg="white", justify=LEFT).grid(row = 30, column = 2, padx = 5, pady = 5) Label(self.frame_content6, text = 'Airbase-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) Label(self.frame_content6, text = 'Filter Options :',font=self.myfontnew, bg="white", justify=LEFT).grid(row = 16, column = 1) self.C28 = Checkbutton(self.frame_content6, text = "--bssid", \ onvalue = "--bssid", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var28) self.C28.grid(row = 31, column = 0, padx = 5, pady = 5) self.t28=Text(self.frame_content6,height=1,width = 20) self.t28.grid(row = 31, column = 1, padx = 5, pady = 5) l28=Label(self.frame_content6, text = ': BSSID to filter/use (short -b)',font=self.myfont, bg="white", justify=LEFT).grid(row = 31, column = 2, padx = 5, pady = 5) self.C29 = Checkbutton(self.frame_content6, text = "--bssids", \ onvalue = "--bssids", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var29) self.C29.grid(row = 32, column = 0, padx = 5, pady = 5) self.t29=Text(self.frame_content6,height=1,width = 20) self.t29.grid(row = 32, column = 1, padx = 5, pady = 5) l29=Label(self.frame_content6, text = ': read a list of BSSIDs out of that file (short -B)',font=self.myfont, bg="white", justify=LEFT).grid(row = 32, column = 2, padx = 5, pady = 5) self.C30 = Checkbutton(self.frame_content6, text = "--client", \ onvalue = "--client", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var30) self.C30.grid(row = 33, column = 0, padx = 5, pady = 5) self.t30=Text(self.frame_content6,height=1,width = 20) self.t30.grid(row = 33, column = 1, padx = 5, pady = 5) l30=Label(self.frame_content6, text = ': MAC of client to accept (short -d)',font=self.myfont, bg="white", justify=LEFT).grid(row = 33, column = 2, padx = 5, pady = 5) self.C31 = Checkbutton(self.frame_content6, text = "--clients", \ onvalue = "--clients", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var31) self.C31.grid(row = 34, column = 0, padx = 5, pady = 5) self.t31=Text(self.frame_content6,height=1,width = 20) self.t31.grid(row = 34, column = 1, padx = 5, pady = 5) l31=Label(self.frame_content6, text = ': read a list of MACs out of that file (short -D)',font=self.myfont, bg="white", justify=LEFT).grid(row = 34, column = 2, padx = 5, pady = 5) self.C32 = Checkbutton(self.frame_content6, text = "--essid", \ onvalue = "--essid", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var32) self.C32.grid(row = 35, column = 0, padx = 5, pady = 5) self.t32=Text(self.frame_content6,height=1,width = 20) self.t32.grid(row = 35, column = 1, padx = 5, pady = 5) l32=Label(self.frame_content6, text = ': specify a single ESSID (short -e)',font=self.myfont, bg="white", justify=LEFT).grid(row = 35, column = 2, padx = 5, pady = 5) self.C33 = Checkbutton(self.frame_content6, text = "--essids", \ onvalue = "--essids", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var33) self.C33.grid(row = 36, column = 0, padx = 5, pady = 5) self.t33=Text(self.frame_content6,height=1,width = 20) self.t33.grid(row = 36, column = 1, padx = 5, pady = 5) l33=Label(self.frame_content6, text = ': read a list of ESSIDs out of that file (short -E)',font=self.myfont, bg="white", justify=LEFT).grid(row = 36, column = 2, padx = 5, pady = 5) self.C34 = Checkbutton(self.frame_content6, text = "--help", \ onvalue = "--help", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var34) self.C34.grid(row = 37, column = 0, padx = 5, pady = 5) self.t34=Text(self.frame_content6,height=1,width = 20) self.t34.grid(row = 37, column = 1, padx = 5, pady = 5) l34=Label(self.frame_content6, text = ': Displays the usage screen (short -H)',font=self.myfont, bg="white", justify=LEFT).grid(row = 37, column = 2, padx = 5, pady = 5)
class GUI: ## GUI variables titleText = 'PyCX Simulator' # window title timeInterval = 0 # refresh time in milliseconds running = False modelFigure = None stepSize = 1 currentStep = 0 def __init__(self,title='PyCX Simulator',interval=0,stepSize=1,parameterSetters=[]): self.titleText = title self.timeInterval = interval self.stepSize = stepSize self.parameterSetters = parameterSetters self.varEntries = {} self.statusStr = "" self.initGUI() def initGUI(self): #create root window self.rootWindow = Tk() self.statusText = StringVar(value=self.statusStr) self.setStatusStr("Simulation not yet started") self.rootWindow.wm_title(self.titleText) self.rootWindow.protocol('WM_DELETE_WINDOW',self.quitGUI) self.rootWindow.geometry('550x400') self.rootWindow.columnconfigure(0, weight=1) self.rootWindow.rowconfigure(0, weight=1) self.notebook = Notebook(self.rootWindow) self.notebook.grid(row=0,column=0,padx=2,pady=2,sticky='nswe') self.frameRun = Frame() self.frameSettings = Frame() self.frameParameters = Frame() self.frameInformation = Frame() self.notebook.add(self.frameRun,text="Run") self.notebook.add(self.frameSettings,text="Settings") self.notebook.add(self.frameParameters,text="Parameters") self.notebook.add(self.frameInformation,text="Info") self.notebook.pack(expand=YES, fill=BOTH, padx=5, pady=5 ,side=TOP) self.status = Label(self.rootWindow, width=40,height=3, relief=SUNKEN, bd=1,textvariable=self.statusText) self.status.grid(row=1,column=0,padx=2,pady=2,sticky='nswe') self.status.pack(side=TOP, fill=X, padx=1, pady=1, expand=NO) self.runPauseString = StringVar() self.runPauseString.set("Run") self.buttonRun = Button(self.frameRun,width=30,height=2,textvariable=self.runPauseString,command=self.runEvent) self.buttonRun.pack(side=TOP, padx=5, pady=5) self.showHelp(self.buttonRun,"Runs the simulation (or pauses the running simulation)") self.buttonStep = Button(self.frameRun,width=30,height=2,text='Step Once',command=self.stepOnce) self.buttonStep.pack(side=TOP, padx=5, pady=5) self.showHelp(self.buttonStep,"Steps the simulation only once") self.buttonReset = Button(self.frameRun,width=30,height=2,text='Reset',command=self.resetModel) self.buttonReset.pack(side=TOP, padx=5, pady=5) self.showHelp(self.buttonReset,"Resets the simulation") can = Canvas(self.frameSettings) lab = Label(can, width=25,height=1,text="Step size ", justify=LEFT, anchor=W,takefocus=0) lab.pack(side='left') self.stepScale = Scale(can,from_=1, to=50, resolution=1,command=self.changeStepSize,orient=HORIZONTAL, width=25,length=150) self.stepScale.set(self.stepSize) self.showHelp(self.stepScale,"Skips model redraw during every [n] simulation steps\nResults in a faster model run.") self.stepScale.pack(side='left') can.pack(side='top') can = Canvas(self.frameSettings) lab = Label(can, width=25,height=1,text="Step visualization delay in ms ", justify=LEFT, anchor=W,takefocus=0) lab.pack(side='left') self.stepDelay = Scale(can,from_=0, to=max(2000,self.timeInterval), resolution=10,command=self.changeStepDelay,orient=HORIZONTAL, width=25,length=150) self.stepDelay.set(self.timeInterval) self.showHelp(self.stepDelay,"The visualization of each step is delays by the given number of milliseconds.") self.stepDelay.pack(side='left') can.pack(side='top') scrollInfo = Scrollbar(self.frameInformation) self.textInformation = Text(self.frameInformation, width=45,height=13,bg='lightgray',wrap=WORD,font=("Courier",10)) scrollInfo.pack(side=RIGHT, fill=Y) self.textInformation.pack(side=LEFT,fill=BOTH,expand=YES) scrollInfo.config(command=self.textInformation.yview) self.textInformation.config(yscrollcommand=scrollInfo.set) for variableSetter in self.parameterSetters: can = Canvas(self.frameParameters) lab = Label(can, width=25,height=1,text=variableSetter.__name__+" ",anchor=W,takefocus=0) lab.pack(side='left') ent = Entry(can, width=11) ent.insert(0, str(variableSetter())) if variableSetter.__doc__ != None and len(variableSetter.__doc__) > 0: self.showHelp(ent,variableSetter.__doc__.strip()) ent.pack(side='left') can.pack(side='top') self.varEntries[variableSetter]=ent if len(self.parameterSetters) > 0: self.buttonSaveParameters = Button(self.frameParameters,width=50,height=1,command=self.saveParametersCmd,text="Save parameters to the running model",state=DISABLED) self.showHelp(self.buttonSaveParameters,"Saves the parameter values.\nNot all values may take effect on a running model\nA model reset might be required.") self.buttonSaveParameters.pack(side='top',padx=5,pady=5) self.buttonSaveParametersAndReset = Button(self.frameParameters,width=50,height=1,command=self.saveParametersAndResetCmd,text="Save parameters to the model and reset the model") self.showHelp(self.buttonSaveParametersAndReset,"Saves the given parameter values and resets the model") self.buttonSaveParametersAndReset.pack(side='top',padx=5,pady=5) def setStatusStr(self,newStatus): self.statusStr = newStatus self.statusText.set(self.statusStr) #model control functions def changeStepSize(self,val): self.stepSize = int(val) def changeStepDelay(self,val): self.timeInterval= int(val) def saveParametersCmd(self): for variableSetter in self.parameterSetters: variableSetter(float(self.varEntries[variableSetter].get())) self.setStatusStr("New parameter values have been set") def saveParametersAndResetCmd(self): self.saveParametersCmd() self.resetModel() def runEvent(self): self.running = not self.running if self.running: self.rootWindow.after(self.timeInterval,self.stepModel) self.runPauseString.set("Pause") self.buttonStep.configure(state=DISABLED) self.buttonReset.configure(state=DISABLED) if len(self.parameterSetters) > 0: self.buttonSaveParameters.configure(state=NORMAL) self.buttonSaveParametersAndReset.configure(state=DISABLED) else: self.runPauseString.set("Continue Run") self.buttonStep.configure(state=NORMAL) self.buttonReset.configure(state=NORMAL) if len(self.parameterSetters) > 0: self.buttonSaveParameters.configure(state=NORMAL) self.buttonSaveParametersAndReset.configure(state=NORMAL) def stepModel(self): if self.running: self.modelStepFunc() self.currentStep += 1 self.setStatusStr("Step "+str(self.currentStep)) self.status.configure(foreground='black') if (self.currentStep) % self.stepSize == 0: self.drawModel() self.rootWindow.after(int(self.timeInterval*1.0/self.stepSize),self.stepModel) def stepOnce(self): self.running = False self.runPauseString.set("Continue Run") self.modelStepFunc() self.currentStep += 1 self.setStatusStr("Step "+str(self.currentStep)) self.drawModel() if len(self.parameterSetters) > 0: self.buttonSaveParameters.configure(state=NORMAL) def resetModel(self): self.running = False self.runPauseString.set("Run") self.modelInitFunc() self.currentStep = 0; self.setStatusStr("Model has been reset") self.drawModel() def drawModel(self): if self.modelFigure == None or self.modelFigure.canvas.manager.window == None: self.modelFigure = PL.figure() PL.ion() PL.show() self.modelDrawFunc() self.modelFigure.canvas.manager.window.update() def start(self,func=[]): if len(func)==3: self.modelInitFunc = func[0] self.modelDrawFunc = func[1] self.modelStepFunc = func[2] if (self.modelStepFunc.__doc__ != None and len(self.modelStepFunc.__doc__)>0): self.showHelp(self.buttonStep,self.modelStepFunc.__doc__.strip()) if (self.modelInitFunc.__doc__ != None and len(self.modelInitFunc.__doc__)>0): self.textInformation.config(state=NORMAL) self.textInformation.delete(1.0, END) self.textInformation.insert(END, self.modelInitFunc.__doc__.strip()) self.textInformation.config(state=DISABLED) self.modelInitFunc() self.drawModel() self.rootWindow.mainloop() def quitGUI(self): PL.close('all') self.rootWindow.quit() self.rootWindow.destroy() def showHelp(self, widget,text): def setText(self): self.statusText.set(text) self.status.configure(foreground='blue') def showHelpLeave(self): self.statusText.set(self.statusStr) self.status.configure(foreground='black') widget.bind("<Enter>", lambda e : setText(self)) widget.bind("<Leave>", lambda e : showHelpLeave(self))
def initUI(self, students): note=Notebook(self.parent) #Tabs external_tab = Frame(note) records_tab = Frame(note) edit_tab = Frame(note) note.config() note.add(external_tab, text = "Attendance") note.add(records_tab, text=" Records ") note.add(edit_tab, text=" Edit ") #Create the scrollable list on the left side scrollbar = tk.Scrollbar(external_tab, orient="vertical") lb = tk.Listbox(external_tab, selectmode=MULTIPLE, width=30, height=20, yscrollcommand=scrollbar.set) scrollbar.config(command=lb.yview) scrollbar.pack(side="left", fill="y") lb.pack(side="left",fill="y") self.setList(students, lb) #Add dialogue box for new student frame1 = Frame(external_tab, relief=GROOVE, borderwidth=0) info_frame2 = Frame(records_tab, relief=GROOVE, borderwidth=3) name = tk.Entry(frame1) name.pack(anchor=CENTER, side=BOTTOM) frame1.pack(fill=BOTH, expand=1) self.pack(fill=BOTH, expand=1) #Add the buttons on the right to manipulate the list frame = Frame(external_tab, relief=RAISED, borderwidth=0) addButton = Button(frame, text="Add Student", command= lambda : self.addStudent(name.get(), lb, lb2, lb3)) addButton.pack() deleteButton = Button(frame, text="Remove Student", command= lambda : self.deleteStudent(lb.curselection(), lb, lb2, lb3)) deleteButton.pack(anchor=E, pady=20, side=RIGHT) frame.pack() markCalendarFrame = Frame(external_tab) self.markCalendar = Calendar.newCalendar(markCalendarFrame, True) markCalendarFrame.pack() #Add the reset button and the mark absent button frame2 = Frame(external_tab, relief=RAISED, borderwidth=0) absentButton = Button(frame2, text="Mark as Absent", command= lambda: self.markAbsent(lb.curselection())) absentButton.pack(side=TOP, pady=20) resetButton = Button(frame2, text="Reset Today's Attendance", command=self.resetDay) resetButton.pack(side=TOP, pady=20) frame2.pack(fill=BOTH, expand=1) self.pack(fill=BOTH, expand=1) #Create the Records Listbox scrollbar2 = tk.Scrollbar(records_tab, orient="vertical") lb2 = tk.Listbox(records_tab, selectmode=BROWSE, width=30, height=20, yscrollcommand=scrollbar2.set) scrollbar2.config(command=lb2.yview) scrollbar2.pack(side="left", fill="y") #Bind a click to finding attendance lb2.bind('<<ListboxSelect>>', self.getTotals) lb2.pack(side="left",fill="y") self.setList(students, lb2) #Create the text that updates in real time based on selection self.present_variable.set('') self.absent_variable.set('') info_frame = Frame(records_tab, relief=GROOVE, borderwidth=3) present_setup = tk.Message(records_tab, anchor=W, justify=CENTER, width=100, text="Days Present: ") present_setup.pack(fill=X, side=TOP) present_message = tk.Message(records_tab, anchor=E, justify=CENTER, width=100, textvariable= self.present_variable) present_message.pack(fill=X, side=TOP) info_frame.pack(side=TOP) absent_setup = tk.Message(records_tab, anchor=W, justify=CENTER, width=100, text="Days Absent: ") absent_setup.pack(fill=X, side=TOP) absent_variable = tk.Message(records_tab, anchor=E, justify=CENTER, width=100, textvariable= self.absent_variable) absent_variable.pack(fill=X, side=TOP) info_frame2.pack(side=TOP) #Create a see Calendar Button # calendarButton = Button(records_tab, text="See Specific Days", command= lambda : self.setStudentCalendar(lb2.curselection())) # calendarButton.pack(side=TOP) calendar_frame = Frame(records_tab, relief=GROOVE, borderwidth=3, width = 300) self.theCalendar = Calendar.newCalendar(calendar_frame, False) calendar_frame.pack(side=TOP, pady = 20) clearCalendarButton = Button(records_tab, text="Clear Calendar", command=self.clearStudentCalendar) clearCalendarButton.pack(side=TOP) # close and excel buttons bottomFrame = Frame(width=20) excelButton = Button(bottomFrame, text="Generate Excel", command=self.generateExcel) excelButton.pack(side=LEFT, padx=5, pady=5) closeButton = Button(bottomFrame, text="Close", command=self.closeButton) closeButton.pack(side=RIGHT, padx=10, pady=5) bottomFrame.pack(side=BOTTOM) scrollbar3 = tk.Scrollbar(edit_tab, orient="vertical") lb3 = tk.Listbox(edit_tab, selectmode=BROWSE, width=30, height=20, yscrollcommand=scrollbar3.set) scrollbar3.config(command=lb3.yview) scrollbar3.pack(side="left", fill="y") lb3.bind('<<ListboxSelect>>', self.get_dates) lb3.pack(side="left",fill="y") self.setList(students, lb3) addFrame = Frame(edit_tab) remove_date = Button(addFrame, text="Remove Date", command= lambda : self.remove_date(self.lbedit.curselection(), self.lbedit2.curselection(), True)) remove_date.pack(side=TOP, pady=2) add_dates = Button(addFrame, text="Add Date", command= lambda : self.add_date(lb3.curselection())) add_dates.pack(side=LEFT, pady=2) edit_selection = Button(addFrame, text="Edit Date", command= lambda : self.edit_date(self.lbedit.curselection(), self.lbedit2.curselection())) edit_selection.pack(side=LEFT, pady=2) addFrame.pack(side=TOP) dateFrame = Frame(edit_tab) presentLabel = Label(dateFrame, text="Present") presentLabel.pack(side=TOP) scrollbar4 = tk.Scrollbar(dateFrame, orient="vertical") self.lbedit = tk.Listbox(dateFrame, selectmode=BROWSE, width=29, height=9, yscrollcommand=scrollbar4.set) self.lbedit.pack(side=TOP) absentLabel = Label(dateFrame, text="Absent") absentLabel.pack(side=TOP) scrollbar5 = tk.Scrollbar(dateFrame, orient="vertical") self.lbedit2 = tk.Listbox(dateFrame, selectmode=BROWSE, width=29, height=8, yscrollcommand=scrollbar5.set) self.lbedit2.pack(side=TOP, fill="y") dateFrame.pack(side=LEFT, fill="y") self.pack(fill=BOTH, expand=1) note.pack(fill=BOTH, expand=1)
class channel_plot: ''' ''' def __init__(self, interface, toplevel=False, start_t=False, stop_t=False): ''' ''' self.abort = False if not start_t: start_t = datetime.utcnow() - timedelta(hours=2) if not stop_t: stop_t = datetime.utcnow() self.update_pending = False self.pype = interface self.plot_dicts = {} if isinstance(start_t, datetime): self.start_t = StringVar(value=start_t.strftime(time_format)) elif isinstance(start_t, str): self.start_t = StringVar(value=start_t) else: raise TypeError('start_t must be string or datetime') if isinstance(stop_t, datetime): self.stop_t = StringVar(value=stop_t.strftime(time_format)) elif isinstance(stop_t, str): self.stop_t = StringVar(value=stop_t) else: raise TypeError('stop_t must be string or datetime') self.time_interval = [self.start_t.get(), self.stop_t.get()] self.ymin = DoubleVar() self.ymax = DoubleVar() if toplevel: self.toplevel = toplevel else: self.toplevel = Tk.Tk() self.status_var = StringVar(value='initializing') self._SetupCanvas() self._BuildGui() if not toplevel: Tk.mainloop() def _BuildGui(self): ''' ''' self.removei = IntVar(value=0) self.relative_start_time = BooleanVar(value=False) self.relative_stop_time = BooleanVar(value=False) self.continuous_updates = BooleanVar(value=False) self.ManualLimits = BooleanVar(value=False) self.LogYScale = BooleanVar(value=False) self.ShowGrid = BooleanVar(value=False) self.ConnectedPts = BooleanVar(value=True) Button(self.toplevel, text="Add Line", command=self._AddSubplot ).grid(row=0, column=1) self._AddSubplot() Button(self.toplevel, text="Gas Line Temps", command=self._PlotGasLines ).grid(row=0, column=2) Button(self.toplevel, text="Amps+Cell Temps", command=self._PlotCell ).grid(row=0, column=3) Label(self.toplevel, text='Start Time').grid(row=4, column=1) start_entry = Entry(self.toplevel, textvariable=self.start_t) start_entry.bind('<Return>', self.Update) start_entry.bind('<KP_Enter>', self.Update, '+') start_entry.grid(row=4, column=2, columnspan=2) Checkbutton(self.toplevel, text='Hours ago', variable=self.relative_start_time).grid(row=4, column=4, sticky='W') Label(self.toplevel, text='Stop Time').grid(row=5, column=1) stop_entry = Entry(self.toplevel, textvariable=self.stop_t) stop_entry.bind('<Return>', self.Update) stop_entry.bind('<KP_Enter>', self.Update, '+') stop_entry.grid(row=5, column=2, columnspan=2) Checkbutton(self.toplevel, text='Now', variable=self.relative_stop_time).grid(row=5, column=4, sticky='W') Label(self.toplevel, text='Y limits (min-max)').grid(row=7, column=1) ymin = Entry(self.toplevel, textvariable=self.ymin) ymin.grid(row=7, column=2) ymin.bind('<Return>', self.Update) ymin.bind('<KP_Enter>', self.Update, '+') ymax = Entry(self.toplevel, textvariable=self.ymax) ymax.grid(row=7, column=3) ymax.bind('<Return>', self.Update) ymax.bind('<KP_Enter>', self.Update, '+') Checkbutton(self.toplevel, text='Manual Y-limits', variable=self.ManualLimits ).grid(row=8, column=1) Checkbutton(self.toplevel, text='Log Y-scale', variable=self.LogYScale ).grid(row=8, column=2) Checkbutton(self.toplevel, text='Show Grid', variable=self.ShowGrid ).grid(row=9, column=1) Checkbutton(self.toplevel, text='Connected Points', variable=self.ConnectedPts ).grid(row=9, column=2) Button(self.toplevel, text="Update All", command=self.Update ).grid(row=10, column=1) Button(self.toplevel, text="Save Plot", command=self.SaveFigure ).grid(row=10, column=2) Button(self.toplevel, text="Save Json", command=self.SaveJson ).grid(row=10, column=3) Checkbutton(self.toplevel, text='Continuous (Button above to start)', variable=self.continuous_updates ).grid(row=11, column=1, columnspan=2) self.status_var.set('done') Label(self.toplevel, textvariable=self.status_var).grid(row=20, column=1, columnspan=2) def _SetupCanvas(self): ''' ''' self.figure = Figure() self.figure.subplots_adjust(left=0.15, bottom=0.2) self.subfigure = self.figure.add_subplot(1,1,1) self.notebook = Notebook(self.toplevel) self.notebook.grid(row=1, column=1, rowspan=3, columnspan=3, sticky='nsew') self.canvas = FigureCanvasTkAgg(self.figure, master=self.toplevel) self.canvas.show() self.canvas.get_tk_widget().grid(row=0, column=0, rowspan=10) def _AddSubplot(self): ''' ''' plotnum = len(self.notebook.tabs()) self.plot_dicts[plotnum] = {} frame = Frame(self.notebook) frame.pack(side='top', fill='both', expand='y') self.plot_dicts[plotnum]['xname'] = StringVar(value='None') self.plot_dicts['xunit'] = False self.plot_dicts[plotnum]['yname'] = StringVar(value='None') self.plot_dicts['yunit'] = False Label(frame, text='X Channel').grid(row=0, column=0) Label(frame, text='Y Channel').grid(row=1, column=0) OptionMenu(frame, self.plot_dicts[plotnum]['xname'], "None", "time", "dpph_field", *self.pype.EligibleLoggers() ).grid(row=0, column=1, sticky='ew') OptionMenu(frame, self.plot_dicts[plotnum]['yname'], "None", "dpph_field", *self.pype.EligibleLoggers() ).grid(row=1, column=1, sticky='ew') self.notebook.add(frame, text='line:'+str(plotnum)) def _SetStartStop(self, event=None): ''' ''' try: if self.relative_stop_time.get(): stop_time = datetime.utcnow() else: stop_time = datetime.strptime(self.stop_t.get(), time_format) if self.relative_start_time.get(): hours = float(self.start_t.get()) start = datetime.utcnow() - timedelta(hours=hours) else: start = datetime.strptime(self.start_t.get(), time_format) assert (start < stop_time) self.time_interval[0] = start.strftime(time_format) self.time_interval[1] = stop_time.strftime(time_format) except ValueError: showwarning('Warning', 'invalid time format, must match yyyy-mm-ddThh:mm:ssZ') raise TimeFormatError("invalid start or stop time format") except AssertionError: showwarning('Warning', 'time order error, stop time must be after start time') raise TimeOrderError("stop time must be after start time") def Update(self, event=None, tab='All', unpend=False): ''' Call whatever sequence is needed to update local data and redraw the plot ''' if self.abort: self.abort = False return if unpend: self.update_pending = False self.status_var.set('updating!') if tab == 'All': tab = range(len(self.notebook.tabs())) elif isinstance(tab, int): tab = [tab] else: raise ValueError('tab should be "All" or an int') try: self._SetStartStop(event=None) except: print('SetStartStop problems') self.abort = True self.subfigure.clear() for tabi in tab: if tabi > len(self.subfigure.get_lines()): print('wtf') elif tabi == len(self.subfigure.get_lines()): self._UpdateData(tab=tabi) self._MakePlot(tab=tabi) else: self._UpdateExisting(tab=tabi) self.figure.legends = [] self.figure.legend(*self.subfigure.get_legend_handles_labels()) self.figure.legends[0].draggable(True) self.canvas.draw() self.status_var.set('updated at: ' + datetime.utcnow().strftime(time_format)) if (self.continuous_updates.get() and self.relative_stop_time.get() and not self.update_pending): self.update_pending = True self.toplevel.after(10000, lambda: self.Update(unpend=True)) def _UpdateData(self, tab=0): ''' ''' try: yname = self.plot_dicts[tab]['yname'].get() ychdat = self.pype.GetTimeSeries(yname, self.time_interval[0], self.time_interval[1]) if self.plot_dicts[tab]['xname'].get() == 'time': xchdat = (ychdat[0], ychdat[0], 'time' * len(ychdat[0])) else: xname = self.plot_dicts[tab]['xname'].get() xchdat = self.pype.GetTimeSeries(xname, self.time_interval[0], self.time_interval[1]) if tab > 0 and ychdat[0]: assert xchdat[2][0] == self.plot_dicts['xunit'], 'x units' assert ychdat[2][0] == self.plot_dicts['yunit'], 'y units' self.xdata = [] self.ydata = [] if ychdat[0]: for tx, x in zip(xchdat[0], xchdat[1]): xtmp = False ytmp = False dt = timedelta(seconds=60) for ty, y in zip(ychdat[0], ychdat[1]): if abs(ty - tx) < dt: dt = abs(ty - tx) xtmp = x ytmp = y if xtmp and ytmp: self.xdata.append(xtmp) self.ydata.append(ytmp) [self.xdata, self.ydata] = zip(*sorted(zip(self.xdata, self.ydata))) self.plot_dicts['xunit'] = xchdat[2][0] self.plot_dicts['yunit'] = ychdat[2][0] except AssertionError as e: print('*'*60, '\n the', e[0], 'do not match the 0th line', '*'*60) def _UpdateExisting(self, tab=0): ''' ''' try: yname = self.plot_dicts[tab]['yname'].get() ychdat = self.pype.GetTimeSeries(yname, self.time_interval[0], self.time_interval[1]) if self.plot_dicts[tab]['xname'].get() == 'time': xchdat = (ychdat[0], ychdat[0], 'time' * len(ychdat[0])) else: xname = self.plot_dicts[tab]['xname'].get() xchdat = self.pype.GetTimeSeries(xname, self.time_interval[0], self.time_interval[1]) if tab > 0 and ychdat[0]: assert xchdat[2][0] == self.plot_dicts['xunit'], 'x units' assert ychdat[2][0] == self.plot_dicts['yunit'], 'y units' self.xdata = [] self.ydata = [] if ychdat[0]: for tx, x in zip(xchdat[0], xchdat[1]): xtmp = False ytmp = False dt = timedelta(seconds=60) for ty, y in zip(ychdat[0], ychdat[1]): if abs(ty - tx) < dt: dt = abs(ty - tx) xtmp = x ytmp = y if xtmp and ytmp: self.xdata.append(xtmp) self.ydata.append(ytmp) [self.xdata, self.ydata] = zip(*sorted(zip(self.xdata, self.ydata))) self.plot_dicts['xunit'] = xchdat[2][0] self.plot_dicts['yunit'] = ychdat[2][0] this_line = self.subfigure.get_lines()[tab] this_line.set_xdata(array(self.xdata)) this_line.set_ydata(array(self.ydata)) except AssertionError as e: print('*'*60, '\n the', e[0], 'do not match the 0th line', '*'*60) def _MakePlot(self, tab=0): ''' ''' if self.ConnectedPts.get(): plotformat='o-' else: plotformat='o' if self.plot_dicts[tab]['xname'].get() == 'time': self.subfigure.plot_date(self.xdata, self.ydata, plotformat, label=self.plot_dicts[tab]['yname'].get()) self.subfigure.set_xticklabels(self.subfigure.get_xticklabels(), rotation=-45) self.subfigure.xaxis.set_major_formatter(dates.DateFormatter( "%m/%d %H:%M")) self.subfigure.yaxis.set_major_formatter(ticker.ScalarFormatter( useOffset=False)) else: self.subfigure.plot(self.xdata, self.ydata, plotformat, label=self.plot_dicts[tab]['yname'].get()) self.subfigure.set_title(self.plot_dicts[tab]['yname'].get() + ' vs ' + self.plot_dicts[tab]['xname'].get() + '\n from ' + self.time_interval[0] + ' to ' + self.time_interval[1]) xname = self.plot_dicts[tab]['xname'].get().replace('_', ' ') xunit = '[' + str(self.plot_dicts['xunit']) + ']' self.subfigure.set_xlabel(xname + ' ' + xunit) yname = self.plot_dicts[tab]['yname'].get().replace('_', ' ') yunit = '[' + str(self.plot_dicts['yunit']) + ']' self.subfigure.set_ylabel(yname + ' ' + yunit) tickformat = ticker.ScalarFormatter(useOffset=False) if self.ManualLimits.get(): self.subfigure.set_ylim(bottom=self.ymin.get(), top=self.ymax.get()) if self.LogYScale.get(): self.subfigure.set_yscale('log') if self.ShowGrid.get(): self.subfigure.grid(b=True, which='major') self.subfigure.grid(b=True, which='minor') def _PlotGasLines(self): ''' ''' gas_lines = ['left_gas_line_lower_t', 'left_gas_line_upper_t', 'right_gas_line_lower_t', 'right_gas_line_upper_t'] self._PlotSet(gas_lines) def _PlotCell(self): ''' ''' sensors = ['kh2_temp', 'kh3_temp', 'waveguide_cell_body_temp', 'coldhead_temp'] self._PlotSet(sensors) def _PlotSet(self, channels): ''' Plots a set of channels on common axes ''' for plotn, channel in enumerate(channels): if (len(self.plot_dicts)-2) <= plotn: self._AddSubplot() self.plot_dicts[plotn]['xname'].set('time') self.plot_dicts[plotn]['yname'].set(channel) self.start_t.set('3') self.relative_start_time.set(True) self.relative_stop_time.set(True) self.continuous_updates.set(True) self.Update() def SaveFigure(self): ''' ''' file_extensions = [('vectorized', '.eps'), ('adobe', '.pdf'), ('image', '.png'), ('all', '.*')] outfile = asksaveasfilename(defaultextension='.pdf', filetypes=file_extensions) self.figure.savefig(outfile) def SaveJson(self): ''' ''' outfile = asksaveasfile(defaultextension='.json') outdict = {'xunit':self.plot_dicts['xunit'], 'yunit':self.plot_dicts['yunit'] } for tab in range(len(self.plot_dicts)-2): outdict[tab] = {} outdict[tab]['xname']=self.plot_dicts[tab]['xname'].get() outdict[tab]['yname']=self.plot_dicts[tab]['yname'].get() this_line = self.subfigure.get_lines()[tab] if outdict['xunit'] == 't': outdict[tab]['xdata'] = [str(t) for t in this_line.get_xdata()] else: outdict[tab]['xdata'] = list(this_line.get_xdata()) outdict[tab]['ydata'] = list(this_line.get_ydata()) dump(outdict, outfile, indent=4) outfile.close()
def __init__(self, master): self.fname = "" #global variables self.t1 = StringVar() self.t2 = StringVar() self.t3 = StringVar() self.t4 = StringVar() self.t5 = StringVar() self.t6 = StringVar() self.t7 = StringVar() self.t8 = StringVar() self.var1 = StringVar() self.var2 = StringVar() self.var3 = StringVar() self.var4 = StringVar() self.var5 = StringVar() self.var6 = StringVar() self.var7 = StringVar() self.var8 = StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=870, height=420) #end #title of window master.title("Airolib-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont = tkFont.Font(family="Helvetica", size=15, underline=True) self.myfontnew = tkFont.Font(family="Helvetica", size=11, underline=True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb, name="frame_content", bg="lightsteelblue") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook # repeat for each tab self.frame_content7 = Frame(nb, name='frame_content7', bg="lightsteelblue") nb.add(self.frame_content7, text="Detect Devices") self.frame_content5 = Frame(nb, name='frame_content5', bg="lightsteelblue") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text='Airolib-ng', font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row=0, column=0) btndetect = Button(self.frame_content7, text='Detect', fg="cornflowerblue", command=self.canvas_detect, height=2, width=15, font=self.customFont).grid(row=1, column=0, padx=5, pady=5) btndbrowse = Button(self.frame_content7, text='Attach File', fg="cornflowerblue", command=self.browse_file, height=2, width=15, font=self.customFont).grid(row=3, column=0, padx=5, pady=5) self.lilnew1 = Listbox(self.frame_content7, bg="black", fg="firebrick", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row=1, column=1, rowspan=3) #End Label(self.frame_content, text='Airolib-ng', font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row=0, column=0) Label(self.frame_content, text='Options :', font=self.myfontnew, bg="midnightblue", fg="deepskyblue").grid(row=1, column=1) #Button(self.frame_content, text = 'ivs', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 0, padx = 5, pady = 5) #Button(self.frame_content, text = 'gpsd', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 1, padx = 5, pady = 5) #Button(self.frame_content, text = 'write', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 2, padx = 5, pady = 5) #command Listbox Label(self.frame_content5, text='Edit Command From Here', font=self.myfontnew, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=0, column=0) TextCommandBox = Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output = Text(self.frame_content5, bg="black", fg="firebrick", font=self.myfont, height=20, width=42) self.output.grid(row=0, column=1, padx=50, pady=5, rowspan=3) btnsubmit = Button(self.frame_content5, width=15, height=2, text="Get Result", fg="cornflowerblue", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear = Button(self.frame_content5, width=15, height=2, text="Clear Output", fg="cornflowerblue", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "--stats", fg="deepskyblue", \ onvalue = "--stats", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var1) self.C1.grid(row=2, column=0, padx=5, pady=5) self.t1 = Text(self.frame_content, height=1, width=20) self.t1.grid(row=2, column=1, padx=5, pady=5) l1 = Label(self.frame_content, text=': Output some information about the database.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=2, column=2, padx=5, pady=5) self.C2 = Checkbutton(self.frame_content, text = "--sql", fg="deepskyblue", \ onvalue = "--sql", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var2) self.C2.grid(row=3, column=0, padx=5, pady=5) self.t2 = Text(self.frame_content, height=1, width=20) self.t2.grid(row=3, column=1, padx=5, pady=5) l2 = Label(self.frame_content, text=': Execute the specified SQL statement.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=3, column=2, padx=5, pady=5) self.C3 = Checkbutton(self.frame_content, text = "--clean", fg="deepskyblue", \ onvalue = "--clean", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var3) self.C3.grid(row=4, column=0, padx=5, pady=5) self.t3 = Text(self.frame_content, height=1, width=20) self.t3.grid(row=4, column=1, padx=5, pady=5) l3 = Label( self.frame_content, text=': Perform steps to clean the database from old junk.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=4, column=2, padx=5, pady=5) self.C4 = Checkbutton(self.frame_content, text = "- -batch", fg="deepskyblue", \ onvalue = "--verify", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var4) self.C4.grid(row=5, column=0, padx=5, pady=5) self.t4 = Text(self.frame_content, height=1, width=20) self.t4.grid(row=5, column=1, padx=5, pady=5) l4 = Label( self.frame_content, text= ': Start batch-processing all combinations of ESSIDs and passwords.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=5, column=2, padx=5, pady=5) self.C5 = Checkbutton(self.frame_content, text = "--verify", fg="deepskyblue", \ onvalue = "--verify", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var5) self.C5.grid(row=6, column=0, padx=5, pady=5) self.t5 = Text(self.frame_content, height=1, width=20) self.t5.grid(row=6, column=1, padx=5, pady=5) l5 = Label(self.frame_content, text=': Verify a set of randomly chosen PMKs.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=6, column=2, padx=5, pady=5) self.C6 = Checkbutton(self.frame_content, text = "--export", fg="deepskyblue", \ onvalue = "--export", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var6) self.C6.grid(row=7, column=0, padx=5, pady=5) self.t6 = Text(self.frame_content, height=1, width=20) self.t6.grid(row=7, column=1, padx=5, pady=5) l6 = Label(self.frame_content, text=': Export to a cowpatty file.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=7, column=2, padx=5, pady=5) self.C7 = Checkbutton(self.frame_content, text = "--import cowpatty", fg="deepskyblue", \ onvalue = "--import cowpatty", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var7) self.C7.grid(row=8, column=0, padx=5, pady=5) self.t7 = Text(self.frame_content, height=1, width=20) self.t7.grid(row=8, column=1, padx=5, pady=5) l7 = Label(self.frame_content, text=': Import a cowpatty file and create the database.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=8, column=2, padx=5, pady=5) self.C8 = Checkbutton(self.frame_content, text = "--import", fg="deepskyblue", \ onvalue = "--import", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var8) self.C8.grid(row=9, column=0, padx=5, pady=5) self.t8 = Text(self.frame_content, height=1, width=20) self.t8.grid(row=9, column=1, padx=5, pady=5) l8 = Label( self.frame_content, text= ': Import a text flat file as a list of either ESSIDs or passwords and create the database.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=9, column=2, padx=5, pady=5)
def __init__(self, master): self.fname = "" #global variables self.t1 = StringVar() self.t2 = StringVar() self.t3 = StringVar() self.t4 = StringVar() self.t5 = StringVar() self.t6 = StringVar() self.t7 = StringVar() self.t8 = StringVar() self.t9 = StringVar() self.t10 = StringVar() self.t11 = StringVar() self.t12 = StringVar() self.t13 = StringVar() self.t14 = StringVar() self.t15 = StringVar() self.t16 = StringVar() self.t17 = StringVar() self.t18 = StringVar() self.t19 = StringVar() self.t20 = StringVar() self.t21 = StringVar() self.t22 = StringVar() self.t23 = StringVar() self.t24 = StringVar() self.t25 = StringVar() self.t26 = StringVar() self.t27 = StringVar() self.var1 = StringVar() self.var2 = StringVar() self.var3 = StringVar() self.var4 = StringVar() self.var5 = StringVar() self.var6 = StringVar() self.var7 = StringVar() self.var8 = StringVar() self.var9 = StringVar() self.var10 = StringVar() self.var11 = StringVar() self.var12 = StringVar() self.var13 = StringVar() self.var14 = StringVar() self.var15 = StringVar() self.var16 = StringVar() self.var17 = StringVar() self.var18 = StringVar() self.var19 = StringVar() self.var20 = StringVar() self.var21 = StringVar() self.var22 = StringVar() self.var23 = StringVar() self.var24 = StringVar() self.var25 = StringVar() self.var26 = StringVar() self.var27 = StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=650, height=500) #end #title of window master.title("Aireplay-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont = tkFont.Font(family="Helvetica", size=15, underline=True) self.myfontnew = tkFont.Font(family="Helvetica", size=11, underline=True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb, name="frame_content", bg="lightsteelblue") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook # repeat for each tab self.frame_content2 = Frame(nb, name='frame_content2', bg="lightsteelblue") nb.add(self.frame_content2, text="Filter-2") self.frame_content3 = Frame(nb, name='frame_content3', bg="lightsteelblue") nb.add(self.frame_content3, text="Filter-3") self.frame_content7 = Frame(nb, name='frame_content7', bg="lightsteelblue") nb.add(self.frame_content7, text="Detect Devices") self.frame_content5 = Frame(nb, name='frame_content5', bg="lightsteelblue") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text='Aireplay-ng', font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row=0, column=0) btndetect = Button(self.frame_content7, text='Detect', fg="cornflowerblue", command=self.canvas_detect, height=2, width=15, font=self.customFont).grid(row=1, column=0, padx=5, pady=5) btndbrowse = Button(self.frame_content7, text='Attach File', fg="cornflowerblue", command=self.browse_file, height=2, width=15, font=self.customFont).grid(row=3, column=0, padx=5, pady=5) self.lilnew1 = Listbox(self.frame_content7, bg="black", fg="firebrick", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row=1, column=1, rowspan=3) #End Label(self.frame_content, text='Aireplay-ng', font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row=0, column=0) Label(self.frame_content, text='Filter Options :', font=self.myfontnew, bg="midnightblue", fg="deepskyblue").grid(row=1, column=1) Label(self.frame_content5, text='Edit Command From Here', font=self.myfontnew, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=0, column=0) TextCommandBox = Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output = Text(self.frame_content5, bg="black", fg="firebrick", font=self.myfont, height=20, width=42) self.output.grid(row=0, column=1, padx=50, pady=5, rowspan=3) btnsubmit = Button(self.frame_content5, width=15, height=2, text="Get Result", fg="cornflowerblue", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear = Button(self.frame_content5, width=15, height=2, text="Clear Output", fg="cornflowerblue", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "-b", fg="deepskyblue", \ onvalue = "-b", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var1) self.C1.grid(row=2, column=0, padx=5, pady=5) self.t1 = Text(self.frame_content, height=1, width=20) self.t1.grid(row=2, column=1, padx=5, pady=5) l1 = Label(self.frame_content, text=': MAC address, Access Point', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=2, column=2, padx=5, pady=5) self.C2 = Checkbutton(self.frame_content, text = "-d", fg="deepskyblue", \ onvalue = "-d", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var2) self.C2.grid(row=3, column=0, padx=5, pady=5) self.t2 = Text(self.frame_content, height=1, width=20) self.t2.grid(row=3, column=1, padx=5, pady=5) l2 = Label(self.frame_content, text=': MAC address, Destination', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=3, column=2, padx=5, pady=5) self.C3 = Checkbutton(self.frame_content, text = "-s", fg="deepskyblue", \ onvalue = "-s", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var3) self.C3.grid(row=4, column=0, padx=5, pady=5) self.t3 = Text(self.frame_content, height=1, width=20) self.t3.grid(row=4, column=1, padx=5, pady=5) l3 = Label(self.frame_content, text=': MAC address, Source', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=4, column=2, padx=5, pady=5) self.C4 = Checkbutton(self.frame_content, text = "-m", fg="deepskyblue", \ onvalue = "-m", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var4) self.C4.grid(row=5, column=0, padx=5, pady=5) self.t4 = Text(self.frame_content, height=1, width=20) self.t4.grid(row=5, column=1, padx=5, pady=5) l4 = Label(self.frame_content, text=': minimum packet length', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=5, column=2, padx=5, pady=5) self.C5 = Checkbutton(self.frame_content, text = "-n", fg="deepskyblue", \ onvalue = "-n", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var5) self.C5.grid(row=6, column=0, padx=5, pady=5) self.t5 = Text(self.frame_content, height=1, width=20) self.t5.grid(row=6, column=1, padx=5, pady=5) l5 = Label(self.frame_content, text=': maximum packet length', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=6, column=2, padx=5, pady=5) self.C6 = Checkbutton(self.frame_content, text = "-u", fg="deepskyblue", \ onvalue = "-u", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var6) self.C6.grid(row=7, column=0, padx=5, pady=5) self.t6 = Text(self.frame_content, height=1, width=20) self.t6.grid(row=7, column=1, padx=5, pady=5) l6 = Label(self.frame_content, text=': frame control, type field', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=7, column=2, padx=5, pady=5) self.C7 = Checkbutton(self.frame_content, text = "-v", fg="deepskyblue", \ onvalue = "-v", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var7) self.C7.grid(row=8, column=0, padx=5, pady=5) self.t7 = Text(self.frame_content, height=1, width=20) self.t7.grid(row=8, column=1, padx=5, pady=5) l7 = Label(self.frame_content, text=': frame control, subtype field', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=8, column=2, padx=5, pady=5) self.C8 = Checkbutton(self.frame_content, text = "-t", fg="deepskyblue", \ onvalue = "-t", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var8) self.C8.grid(row=9, column=0, padx=5, pady=5) self.t8 = Text(self.frame_content, height=1, width=20) self.t8.grid(row=9, column=1, padx=5, pady=5) l8 = Label(self.frame_content, text=': frame control, To DS bit', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=9, column=2, padx=5, pady=5) self.C9 = Checkbutton(self.frame_content, text = "-r", fg="deepskyblue", \ onvalue = "-r", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var9) self.C9.grid(row=10, column=0, padx=5, pady=5) self.t9 = Text(self.frame_content, height=1, width=20) self.t9.grid(row=10, column=1, padx=5, pady=5) l9 = Label(self.frame_content, text=': frame control, From DS bit', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=10, column=2, padx=5, pady=5) self.C10 = Checkbutton(self.frame_content, text = "-w", fg="deepskyblue", \ onvalue = "-w", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var10) self.C10.grid(row=11, column=0, padx=5, pady=5) self.t10 = Text(self.frame_content, height=1, width=20) self.t10.grid(row=11, column=1, padx=5, pady=5) l10 = Label(self.frame_content, text=': frame control, WEP bit', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=11, column=2, padx=5, pady=5) Label(self.frame_content2, text='Aireplay-ng', font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row=0, column=0) #frame content 2 self.C11 = Checkbutton(self.frame_content2, text = "-x", fg="deepskyblue", \ onvalue = "-x", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var11) self.C11.grid(row=12, column=0, padx=5, pady=5) self.t11 = Text(self.frame_content2, height=1, width=20) self.t11.grid(row=12, column=1, padx=5, pady=5) l11 = Label(self.frame_content2, text=': number of packets per second', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=12, column=2, padx=5, pady=5) self.C12 = Checkbutton(self.frame_content2, text = "-p", fg="deepskyblue", \ onvalue = "-p", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var12) self.C12.grid(row=13, column=0, padx=5, pady=5) self.t12 = Text(self.frame_content2, height=1, width=20) self.t12.grid(row=13, column=1, padx=5, pady=5) l12 = Label(self.frame_content2, text=': set frame control word (hex)', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=13, column=2, padx=5, pady=5) self.C13 = Checkbutton(self.frame_content2, text = "-a", fg="deepskyblue", \ onvalue = "-a", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var13) self.C13.grid(row=14, column=0, padx=5, pady=5) self.t13 = Text(self.frame_content2, height=1, width=20) self.t13.grid(row=14, column=1, padx=5, pady=5) l13 = Label(self.frame_content2, text=': set Access Point MAC address', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=14, column=2, padx=5, pady=5) self.C14 = Checkbutton(self.frame_content2, text = "-c", fg="deepskyblue", \ onvalue = "-c", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var14) self.C14.grid(row=15, column=0, padx=5, pady=5) self.t14 = Text(self.frame_content2, height=1, width=20) self.t14.grid(row=15, column=1, padx=5, pady=5) l14 = Label(self.frame_content2, text=': set Destination MAC address', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=15, column=2, padx=5, pady=5) self.C15 = Checkbutton(self.frame_content2, text = "-h", fg="deepskyblue", \ onvalue = "-h", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var15) self.C15.grid(row=16, column=0, padx=5, pady=5) self.t15 = Text(self.frame_content2, height=1, width=20) self.t15.grid(row=16, column=1, padx=5, pady=5) l15 = Label(self.frame_content2, text=': set Source MAC address', font=self.myfont, bg="midnightblue", fg="deepskyblue").grid(row=16, column=2, padx=5, pady=5) self.C16 = Checkbutton(self.frame_content2, text = "-e", fg="deepskyblue", \ onvalue = "-e", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var16) self.C16.grid(row=17, column=0, padx=5, pady=5) self.t16 = Text(self.frame_content2, height=1, width=20) self.t16.grid(row=17, column=1, padx=5, pady=5) l16 = Label(self.frame_content2, text=': For fakeauth attack or injection test,', font=self.myfont, bg="midnightblue", fg="deepskyblue").grid(row=17, column=2, padx=5, pady=5) self.C17 = Checkbutton(self.frame_content2, text = "-j", fg="deepskyblue", \ onvalue = "-j", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var17) self.C17.grid(row=18, column=0, padx=5, pady=5) self.t17 = Text(self.frame_content2, height=1, width=20) self.t17.grid(row=18, column=1, padx=5, pady=5) l17 = Label(self.frame_content2, text=': arpreplay attack : inject FromDS pkts', font=self.myfont, bg="midnightblue", fg="deepskyblue").grid(row=18, column=2, padx=5, pady=5) self.C18 = Checkbutton(self.frame_content2, text = "-g", fg="deepskyblue", \ onvalue = "-g", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var18) self.C18.grid(row=19, column=0, padx=5, pady=5) self.t18 = Text(self.frame_content2, height=1, width=20) self.t18.grid(row=19, column=1, padx=5, pady=5) l18 = Label(self.frame_content2, text=': change ring buffer size (default: 8)', font=self.myfont, bg="midnightblue", fg="deepskyblue").grid(row=19, column=2, padx=5, pady=5) self.C19 = Checkbutton(self.frame_content2, text = "-k", fg="deepskyblue", \ onvalue = "-k", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var19) self.C19.grid(row=20, column=0, padx=5, pady=5) self.t19 = Text(self.frame_content2, height=1, width=20) self.t19.grid(row=20, column=1, padx=5, pady=5) l19 = Label(self.frame_content2, text=': set destination IP in fragments', font=self.myfont, bg="midnightblue", fg="deepskyblue").grid(row=20, column=2, padx=5, pady=5) self.C20 = Checkbutton(self.frame_content2, text = "-I", fg="deepskyblue", \ onvalue = "-I", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var20) self.C20.grid(row=21, column=0, padx=5, pady=5) self.t20 = Text(self.frame_content2, height=1, width=20) self.t20.grid(row=21, column=1, padx=5, pady=5) l20 = Label(self.frame_content2, text=': set source IP in fragments', font=self.myfont, bg="midnightblue", fg="deepskyblue").grid(row=21, column=2, padx=5, pady=5) #frame content 3 Label(self.frame_content3, text='Aireplay-ng', font=self.headerfont, bg="midnightblue", fg="firebrick", padx=10, pady=10).grid(row=0, column=0) self.C21 = Checkbutton(self.frame_content3, text = "-o", fg="deepskyblue", \ onvalue = "-o", offvalue = "", height=1, \ width = 7, bg="midnightblue", font=self.customFont,variable=self.var21) self.C21.grid(row=22, column=0, padx=5, pady=5) self.t21 = Text(self.frame_content3, height=1, width=20) self.t21.grid(row=22, column=1, padx=5, pady=5) l21 = Label(self.frame_content3, text=': number of packets per burst (-1)', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=22, column=2, padx=5, pady=5) self.C22 = Checkbutton(self.frame_content3, text = "-q", fg="deepskyblue", \ onvalue = "-q", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var22) self.C22.grid(row=24, column=0, padx=5, pady=5) self.t22 = Text(self.frame_content3, height=1, width=20) self.t22.grid(row=24, column=1, padx=5, pady=5) l22 = Label(self.frame_content3, text=': seconds between keep-alives (-1)', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=24, column=2, padx=5, pady=5) self.C23 = Checkbutton(self.frame_content3, text = "-y", fg="deepskyblue", \ onvalue = "-y", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var23) self.C23.grid(row=25, column=0, padx=5, pady=5) self.t23 = Text(self.frame_content3, height=1, width=20) self.t23.grid(row=25, column=1, padx=5, pady=5) l23 = Label(self.frame_content3, text=': keystream for shared key auth', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=25, column=2, padx=5, pady=5) self.C24 = Checkbutton(self.frame_content3, text = "-B", fg="deepskyblue", \ onvalue = "-B", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var24) self.C24.grid(row=26, column=0, padx=5, pady=5) self.t24 = Text(self.frame_content3, height=1, width=20) self.t24.grid(row=26, column=1, padx=5, pady=5) l14 = Label(self.frame_content3, text=': bit rate test (Applies only to test mode)', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=26, column=2, padx=5, pady=5) self.C25 = Checkbutton(self.frame_content3, text = "-D", fg="deepskyblue", \ onvalue = "-D", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var25) self.C25.grid(row=27, column=0, padx=5, pady=5) self.t25 = Text(self.frame_content3, height=1, width=20) self.t25.grid(row=27, column=1, padx=5, pady=5) l25 = Label(self.frame_content3, text=': disables AP detection.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=27, column=2, padx=5, pady=5) self.C26 = Checkbutton(self.frame_content3, text = "-F", fg="deepskyblue", \ onvalue = "-F", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var26) self.C26.grid(row=28, column=0, padx=5, pady=5) self.t26 = Text(self.frame_content3, height=1, width=20) self.t26.grid(row=28, column=1, padx=5, pady=5) l26 = Label(self.frame_content3, text=': chooses first matching packet.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=28, column=2, padx=5, pady=5) self.C27 = Checkbutton(self.frame_content3, text = "-R", fg="deepskyblue", \ onvalue = "-R", offvalue = "", height=1, \ bg="midnightblue", font=self.customFont,variable=self.var27) self.C27.grid(row=29, column=0, padx=5, pady=5) self.t27 = Text(self.frame_content3, height=1, width=20) self.t27.grid(row=29, column=1, padx=5, pady=5) l27 = Label(self.frame_content3, text=': disables /dev/rtc usage.', font=self.myfont, bg="midnightblue", fg="deepskyblue", justify=LEFT).grid(row=29, column=2, padx=5, pady=5)
def __init__(self, master): self.fname="" #global variables self.t1=StringVar() self.t2=StringVar() self.t3=StringVar() self.t4=StringVar() self.t5=StringVar() self.t6=StringVar() self.t7=StringVar() self.t8=StringVar() self.t9=StringVar() self.t10=StringVar() self.t11=StringVar() self.t12=StringVar() self.var1=StringVar() self.var2=StringVar() self.var3=StringVar() self.var4=StringVar() self.var5=StringVar() self.var6=StringVar() self.var7=StringVar() self.var8=StringVar() self.var9=StringVar() self.var10=StringVar() self.var11=StringVar() self.var12=StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=800, height=600) #end #title of window master.title("Airtun-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont=tkFont.Font(family="Helvetica", size=15,underline = True) self.myfontnew=tkFont.Font(family="Helvetica", size=11,underline = True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb,name="frame_content", bg="white") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook # repeat for each tab self.frame_content7 = Frame(nb, name='frame_content7', bg="white") nb.add(self.frame_content7, text="Detect Devices") self.frame_content5 = Frame(nb, name='frame_content5', bg="white") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text = 'Aigraph-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) btndetect=Button(self.frame_content7, text = 'Detect', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 1, column = 0, padx = 5, pady = 5) btndbrowse=Button(self.frame_content7, text = 'Attach File', command =self.browse_file, height=2, width=15, font=self.customFont).grid(row = 3, column = 0, padx = 5, pady = 5) self.lilnew1=Listbox(self.frame_content7,bg="black", fg="white", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row = 1, column = 1, rowspan=3) #End Label(self.frame_content, text = 'Airtun-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) Label(self.frame_content, text = 'Options :',font=self.myfontnew, bg="white").grid(row = 1, column = 1) #Button(self.frame_content, text = 'ivs', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 0, padx = 5, pady = 5) #Button(self.frame_content, text = 'gpsd', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 1, padx = 5, pady = 5) #Button(self.frame_content, text = 'write', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 2, padx = 5, pady = 5) #command Listbox Label(self.frame_content5, text = 'Edit Command From Here',font=self.myfontnew, bg="white", justify=LEFT).grid(row = 0, column = 0) TextCommandBox=Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output=Text(self.frame_content5,bg="black", fg="white", font=self.myfont, height=20, width=42) self.output.grid(row = 0, column = 1, padx=50, pady=5, rowspan=3) btnsubmit=Button(self.frame_content5, width=15, height=2, text="Get Result", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear=Button(self.frame_content5, width=15, height=2, text="Clear Output", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "-x", \ onvalue = "-x", offvalue ="", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var1) self.C1.grid(row = 2, column = 0, padx = 5, pady = 5) self.t1=Text(self.frame_content,height=1,width = 20) self.t1.grid(row = 2, column = 1, padx = 5, pady = 5) l1=Label(self.frame_content, text = ': maximum number of packets per second (optional)',font=self.myfont, bg="white", justify=LEFT).grid(row = 2, column = 2, padx = 5, pady = 5) self.C2 = Checkbutton(self.frame_content, text = "-a", \ onvalue = "-a", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var2) self.C2.grid(row = 3, column = 0, padx = 5, pady = 5) self.t2=Text(self.frame_content,height=1,width = 20) self.t2.grid(row = 3, column = 1, padx = 5, pady = 5) l2=Label(self.frame_content, text = ': set Access Point MAC address (mandatory)',font=self.myfont, bg="white", justify=LEFT).grid(row = 3, column = 2, padx = 5, pady = 5) self.C3 = Checkbutton(self.frame_content, text = "-i", \ onvalue = "-i", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var3) self.C3.grid(row = 4, column = 0, padx = 5, pady = 5) self.t3=Text(self.frame_content,height=1,width = 20) self.t3.grid(row = 4, column = 1, padx = 5, pady = 5) l3=Label(self.frame_content, text = ': capture packets from this interface (optional)',font=self.myfont, bg="white", justify=LEFT).grid(row = 4, column = 2, padx = 5, pady = 5) self.C4 = Checkbutton(self.frame_content, text = "-y", \ onvalue = "-y", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var5) self.C4.grid(row = 5, column = 0, padx = 5, pady = 5) self.t4=Text(self.frame_content,height=1,width = 20) self.t4.grid(row = 5, column = 1, padx = 5, pady = 5) l4=Label(self.frame_content, text = ': read PRGA from this file (optional / one of -y or -w must be defined)',font=self.myfont, bg="white", justify=LEFT).grid(row = 5, column = 2, padx = 5, pady = 5) self.C5 = Checkbutton(self.frame_content, text = "-W", \ onvalue = "-W", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var6) self.C5.grid(row = 6, column = 0, padx = 5, pady = 5) self.t5=Text(self.frame_content,height=1,width = 20) self.t5.grid(row = 6, column = 1, padx = 5, pady = 5) l5=Label(self.frame_content, text = ': use this WEP-KEY to encrypt packets (optional / one of -y or -w must be defined)',font=self.myfont, bg="white", justify=LEFT).grid(row = 6, column = 2, padx = 5, pady = 5) self.C6 = Checkbutton(self.frame_content, text = "-t", \ onvalue = "-t", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var7) self.C6.grid(row = 8, column = 0, padx = 5, pady = 5) self.t6=Text(self.frame_content,height=1,width = 20) self.t6.grid(row = 8, column = 1, padx = 5, pady = 5) l6=Label(self.frame_content, text = ': send frames to AP (1) or to client (0) (optional / defaults to 0)',font=self.myfont, bg="white", justify=LEFT).grid(row = 8, column = 2, padx = 5, pady = 5) self.C7 = Checkbutton(self.frame_content, text = "-r", \ onvalue = "-r", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var8) self.C7.grid(row = 9, column = 0, padx = 5, pady = 5) self.t7=Text(self.frame_content,height=1,width = 20) self.t7.grid(row = 9, column = 1, padx = 5, pady = 5) l7=Label(self.frame_content, text = ': read frames out of pcap file (optional)',font=self.myfont, bg="white", justify=LEFT).grid(row = 9, column = 2, padx = 5, pady = 5) self.C8 = Checkbutton(self.frame_content, text = "-h", \ onvalue = "-h", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var9) self.C8.grid(row = 10, column = 0, padx = 5, pady = 5) self.t8=Text(self.frame_content,height=1,width = 20) self.t8.grid(row = 10, column = 1, padx = 5, pady = 5) l8=Label(self.frame_content, text = ': source MAC address',font=self.myfont, bg="white", justify=LEFT).grid(row = 10, column = 2, padx = 5, pady = 5) self.C9 = Checkbutton(self.frame_content, text = "-H", \ onvalue = "-H", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var10) self.C9.grid(row = 11, column = 0, padx = 5, pady = 5) self.t9=Text(self.frame_content,height=1,width = 20) self.t9.grid(row = 11, column = 1, padx = 5, pady = 5) l9=Label(self.frame_content, text = ': Display help. Long form help',font=self.myfont, bg="white", justify=LEFT).grid(row = 11, column = 2, padx = 5, pady = 5) Label(self.frame_content, text = 'Repeater Options :',font=self.myfontnew, bg="white").grid(row = 12, column = 1) self.C10 = Checkbutton(self.frame_content, text = "--repeat", \ onvalue = "--repeat", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var11) self.C10.grid(row = 13, column = 0, padx = 5, pady = 5) self.t10=Text(self.frame_content,height=1,width = 20) self.t10.grid(row = 13, column = 1, padx = 5, pady = 5) l10=Label(self.frame_content, text = ': activates repeat mode. Short form -f.',font=self.myfont, bg="white", justify=LEFT).grid(row = 13, column = 2, padx = 5, pady = 5) self.C11 = Checkbutton(self.frame_content, text = "--bssid", \ onvalue = "--bssid", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont, variable=self.var12) self.C11.grid(row = 14, column = 0, padx = 5, pady = 5) self.t11=Text(self.frame_content,height=1,width = 20) self.t11.grid(row = 14, column = 1, padx = 5, pady = 5) l11=Label(self.frame_content, text = ': BSSID to repeat. Short form -d.',font=self.myfont, bg="white", justify=LEFT).grid(row = 14, column = 2, padx = 5, pady = 5) self.C12 = Checkbutton(self.frame_content, text = "--netmask", \ onvalue = "--netmask", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont) self.C12.grid(row = 15, column = 0, padx = 5, pady = 5) self.t12=Text(self.frame_content,height=1,width = 20) self.t12.grid(row = 15, column = 1, padx = 5, pady = 5) l12=Label(self.frame_content, text = ': netmask for BSSID filter. Short form -m.',font=self.myfont, bg="white", justify=LEFT).grid(row = 15, column = 2, padx = 5, pady = 5)
def __init__(self, master): self.fname="" #global variables self.t1=StringVar() self.t2=StringVar() self.t3=StringVar() self.t4=StringVar() self.t5=StringVar() self.t6=StringVar() self.t7=StringVar() self.t8=StringVar() self.var1=StringVar() self.var2=StringVar() self.var3=StringVar() self.var4=StringVar() self.var5=StringVar() self.var6=StringVar() self.var7=StringVar() self.var8=StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=650, height=500) #end #title of window master.title("Airdecloak-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont=tkFont.Font(family="Helvetica", size=15,underline = True) self.myfontnew=tkFont.Font(family="Helvetica", size=11,underline = True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb,name="frame_content", bg="white") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Page1") # add tab to Notebook # repeat for each tab self.frame_content7 = Frame(nb, name='frame_content7', bg="white") nb.add(self.frame_content7, text="Detect Devices") self.frame_content5 = Frame(nb, name='frame_content5', bg="white") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text = 'Airdecloak-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) btndetect=Button(self.frame_content7, text = 'Detect', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 1, column = 0, padx = 5, pady = 5) btndbrowse=Button(self.frame_content7, text = 'Attach File', command =self.browse_file, height=2, width=15, font=self.customFont).grid(row = 3, column = 0, padx = 5, pady = 5) self.lilnew1=Listbox(self.frame_content7,bg="black", fg="white", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row = 1, column = 1, rowspan=3) #End Label(self.frame_content, text = 'Airdecloak-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) Label(self.frame_content, text = 'Options :',font=self.myfontnew, bg="white").grid(row = 1, column = 1) #Button(self.frame_content, text = 'ivs', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 0, padx = 5, pady = 5) #Button(self.frame_content, text = 'gpsd', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 1, padx = 5, pady = 5) #Button(self.frame_content, text = 'write', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 2, padx = 5, pady = 5) #command Listbox Label(self.frame_content5, text = 'Edit Command From Here',font=self.myfontnew, bg="white", justify=LEFT).grid(row = 0, column = 0) TextCommandBox=Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output=Text(self.frame_content5,bg="black", fg="white", font=self.myfont, height=20, width=42) self.output.grid(row = 0, column = 1, padx=50, pady=5, rowspan=3) btnsubmit=Button(self.frame_content5, width=15, height=2, text="Get Result", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear=Button(self.frame_content5, width=15, height=2, text="Clear Output", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "-i", \ onvalue = "-i", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var1) self.C1.grid(row = 2, column = 0, padx = 5, pady = 5) self.t1=Text(self.frame_content,height=1,width = 20) self.t1.grid(row = 2, column = 1, padx = 5, pady = 5) l1=Label(self.frame_content, text = ': Input capture file',font=self.myfont, bg="white", justify=LEFT).grid(row = 2, column = 2, padx = 5, pady = 5) self.C2 = Checkbutton(self.frame_content, text = "--ssid", \ onvalue = "--ssid", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var2) self.C2.grid(row = 3, column = 0, padx = 5, pady = 5) self.t2=Text(self.frame_content,height=1,width = 20) self.t2.grid(row = 3, column = 1, padx = 5, pady = 5) l2=Label(self.frame_content, text = ': ESSID of the network to filter',font=self.myfont, bg="white", justify=LEFT).grid(row = 3, column = 2, padx = 5, pady = 5) self.C3 = Checkbutton(self.frame_content, text = "--bssid", \ onvalue = "--bssid", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var3) self.C3.grid(row = 4, column = 0, padx = 5, pady = 5) self.t3=Text(self.frame_content,height=1,width = 20) self.t3.grid(row = 4, column = 1, padx = 5, pady = 5) l3=Label(self.frame_content, text = ': BSSID of the network to filter',font=self.myfont, bg="white", justify=LEFT).grid(row = 4, column = 2, padx = 5, pady = 5) self.C4 = Checkbutton(self.frame_content, text = "--filters", \ onvalue = "--filters", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var4) self.C4.grid(row = 5, column = 0, padx = 5, pady = 5) self.t4=Text(self.frame_content,height=1,width = 20) self.t4.grid(row = 5, column = 1, padx = 5, pady = 5) l4=Label(self.frame_content, text = ': Apply filters (separated by a comma)',font=self.myfont, bg="white", justify=LEFT).grid(row = 5, column = 2, padx = 5, pady = 5) self.C5 = Checkbutton(self.frame_content, text = "--null-packets", \ onvalue = "--null-packets", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var5) self.C5.grid(row = 6, column = 0, padx = 5, pady = 5) self.t5=Text(self.frame_content,height=1,width = 20) self.t5.grid(row = 6, column = 1, padx = 5, pady = 5) l5=Label(self.frame_content, text = ': Assume that null packets can be cloaked.',font=self.myfont, bg="white", justify=LEFT).grid(row = 6, column = 2, padx = 5, pady = 5) self.C6 = Checkbutton(self.frame_content, text = "--disable-base_filter", \ onvalue = "--disable-base_filter", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var6) self.C6.grid(row = 8, column = 0, padx = 5, pady = 5) self.t6=Text(self.frame_content,height=1,width = 20) self.t6.grid(row = 8, column = 1, padx = 5, pady = 5) l6=Label(self.frame_content, text = ': Do not apply base filter.',font=self.myfont, bg="white", justify=LEFT).grid(row = 8, column = 2, padx = 5, pady = 5) self.C7 = Checkbutton(self.frame_content, text = "--drop-frag", \ onvalue = "--drop-frag", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var7) self.C7.grid(row = 9, column = 0, padx = 5, pady = 5) self.t7=Text(self.frame_content,height=1,width = 20) self.t7.grid(row = 9, column = 1, padx = 5, pady = 5) l7=Label(self.frame_content, text = ': Drop fragmented packets',font=self.myfont, bg="white", justify=LEFT).grid(row = 9, column = 2, padx = 5, pady = 5) self.C8 = Checkbutton(self.frame_content, text = "--help", \ onvalue = "--help", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var8) self.C8.grid(row = 10, column = 0, padx = 5, pady = 5) self.t8=Text(self.frame_content,height=1,width = 20) self.t8.grid(row = 10, column = 1, padx = 5, pady = 5) l8=Label(self.frame_content, text = ': Displays this usage screen',font=self.myfont, bg="white", justify=LEFT).grid(row = 10, column = 2, padx = 5, pady = 5)
class GUI: ## GUI variables titleText = 'PyCX Simulator' # window title timeInterval = 0 # refresh time in milliseconds running = False modelFigure = None stepSize = 1 currentStep = 0 def __init__(self,title='PyCX Simulator',interval=0,stepSize=1,parameterSetters=[]): self.titleText = title self.timeInterval = interval self.stepSize = stepSize self.parameterSetters = parameterSetters self.varEntries = {} self.statusStr = "" self.initGUI() def initGUI(self): #create root window self.rootWindow = Tk() self.statusText = StringVar(value=self.statusStr) self.setStatusStr("Simulation not yet started") self.rootWindow.wm_title(self.titleText) self.rootWindow.protocol('WM_DELETE_WINDOW',self.quitGUI) self.rootWindow.geometry('550x400') self.rootWindow.columnconfigure(0, weight=1) self.rootWindow.rowconfigure(0, weight=1) self.notebook = Notebook(self.rootWindow) self.notebook.grid(row=0,column=0,padx=2,pady=2,sticky='nswe') self.frameRun = Frame() self.frameSettings = Frame() self.frameParameters = Frame() self.frameInformation = Frame() self.notebook.add(self.frameRun,text="Run") self.notebook.add(self.frameSettings,text="Settings") self.notebook.add(self.frameParameters,text="Parameters") self.notebook.add(self.frameInformation,text="Info") self.notebook.pack(expand=YES, fill=BOTH, padx=5, pady=5 ,side=TOP) self.status = Label(self.rootWindow, width=40,height=3, relief=SUNKEN, bd=1,textvariable=self.statusText) self.status.grid(row=1,column=0,padx=2,pady=2,sticky='nswe') self.status.pack(side=TOP, fill=X, padx=1, pady=1, expand=NO) self.runPauseString = StringVar() self.runPauseString.set("Run") self.buttonRun = Button(self.frameRun,width=30,height=2,textvariable=self.runPauseString,command=self.runEvent) self.buttonRun.pack(side=TOP, padx=5, pady=5) self.showHelp(self.buttonRun,"Runs the simulation (or pauses the running simulation)") self.buttonStep = Button(self.frameRun,width=30,height=2,text='Step Once',command=self.stepOnce) self.buttonStep.pack(side=TOP, padx=5, pady=5) self.showHelp(self.buttonStep,"Steps the simulation only once") self.buttonReset = Button(self.frameRun,width=30,height=2,text='Reset',command=self.resetModel) self.buttonReset.pack(side=TOP, padx=5, pady=5) self.showHelp(self.buttonReset,"Resets the simulation") can = Canvas(self.frameSettings) lab = Label(can, width=25,height=1,text="Step size ", justify=LEFT, anchor=W,takefocus=0) lab.pack(side='left') self.stepScale = Scale(can,from_=1, to=50, resolution=1,command=self.changeStepSize,orient=HORIZONTAL, width=25,length=150) self.stepScale.set(self.stepSize) self.showHelp(self.stepScale,"Skips model redraw during every [n] simulation steps\nResults in a faster model run.") self.stepScale.pack(side='left') can.pack(side='top') can = Canvas(self.frameSettings) lab = Label(can, width=25,height=1,text="Step visualization delay in ms ", justify=LEFT, anchor=W,takefocus=0) lab.pack(side='left') self.stepDelay = Scale(can,from_=0, to=max(2000,self.timeInterval), resolution=10,command=self.changeStepDelay,orient=HORIZONTAL, width=25,length=150) self.stepDelay.set(self.timeInterval) self.showHelp(self.stepDelay,"The visualization of each step is delays by the given number of milliseconds.") self.stepDelay.pack(side='left') can.pack(side='top') scrollInfo = Scrollbar(self.frameInformation) self.textInformation = Text(self.frameInformation, width=45,height=13,bg='lightgray',wrap=WORD,font=("Courier",10)) scrollInfo.pack(side=RIGHT, fill=Y) self.textInformation.pack(side=LEFT,fill=BOTH,expand=YES) scrollInfo.config(command=self.textInformation.yview) self.textInformation.config(yscrollcommand=scrollInfo.set) for variableSetter in self.parameterSetters: can = Canvas(self.frameParameters) lab = Label(can, width=25,height=1,text=variableSetter.__name__+" ",anchor=W,takefocus=0) lab.pack(side='left') ent = Entry(can, width=11) ent.insert(0, str(variableSetter())) if variableSetter.__doc__ != None and len(variableSetter.__doc__) > 0: self.showHelp(ent,variableSetter.__doc__.strip()) ent.pack(side='left') can.pack(side='top') self.varEntries[variableSetter]=ent if len(self.parameterSetters) > 0: self.buttonSaveParameters = Button(self.frameParameters,width=50,height=1,command=self.saveParametersCmd,text="Save parameters to the running model",state=DISABLED) self.showHelp(self.buttonSaveParameters,"Saves the parameter values.\nNot all values may take effect on a running model\nA model reset might be required.") self.buttonSaveParameters.pack(side='top',padx=5,pady=5) self.buttonSaveParametersAndReset = Button(self.frameParameters,width=50,height=1,command=self.saveParametersAndResetCmd,text="Save parameters to the model and reset the model") self.showHelp(self.buttonSaveParametersAndReset,"Saves the given parameter values and resets the model") self.buttonSaveParametersAndReset.pack(side='top',padx=5,pady=5) def setStatusStr(self,newStatus): self.statusStr = newStatus self.statusText.set(self.statusStr) #model control functions def changeStepSize(self,val): self.stepSize = int(val) def changeStepDelay(self,val): self.timeInterval= int(val) def saveParametersCmd(self): for variableSetter in self.parameterSetters: variableSetter(float(self.varEntries[variableSetter].get())) self.setStatusStr("New parameter values have been set") def saveParametersAndResetCmd(self): self.saveParametersCmd() self.resetModel() def runEvent(self): self.running = not self.running if self.running: self.rootWindow.after(self.timeInterval,self.stepModel) self.runPauseString.set("Pause") self.buttonStep.configure(state=DISABLED) self.buttonReset.configure(state=DISABLED) if len(self.parameterSetters) > 0: self.buttonSaveParameters.configure(state=NORMAL) self.buttonSaveParametersAndReset.configure(state=DISABLED) else: self.runPauseString.set("Continue Run") self.buttonStep.configure(state=NORMAL) self.buttonReset.configure(state=NORMAL) if len(self.parameterSetters) > 0: self.buttonSaveParameters.configure(state=NORMAL) self.buttonSaveParametersAndReset.configure(state=NORMAL) def stepModel(self): if self.running: self.modelStepFunc() self.currentStep += 1 self.setStatusStr("Step "+str(self.currentStep)) self.status.configure(foreground='black') if (self.currentStep) % self.stepSize == 0: self.drawModel() self.rootWindow.after(int(self.timeInterval*1.0/self.stepSize),self.stepModel) def stepOnce(self): self.running = False self.runPauseString.set("Continue Run") self.modelStepFunc() self.currentStep += 1 self.setStatusStr("Step "+str(self.currentStep)) self.drawModel() if len(self.parameterSetters) > 0: self.buttonSaveParameters.configure(state=NORMAL) def resetModel(self): self.running = False self.runPauseString.set("Run") self.modelInitFunc() self.currentStep = 0; self.setStatusStr("Model has been reset") self.drawModel() def drawModel(self): if self.modelFigure == None or self.modelFigure.canvas.manager.window == None: self.modelFigure = PL.figure() PL.ion() self.modelDrawFunc() self.modelFigure.canvas.manager.window.update() def start(self,func=[]): if len(func)==3: self.modelInitFunc = func[0] self.modelDrawFunc = func[1] self.modelStepFunc = func[2] if (self.modelStepFunc.__doc__ != None and len(self.modelStepFunc.__doc__)>0): self.showHelp(self.buttonStep,self.modelStepFunc.__doc__.strip()) if (self.modelInitFunc.__doc__ != None and len(self.modelInitFunc.__doc__)>0): self.textInformation.config(state=NORMAL) self.textInformation.delete(1.0, END) self.textInformation.insert(END, self.modelInitFunc.__doc__.strip()) self.textInformation.config(state=DISABLED) self.modelInitFunc() self.drawModel() self.rootWindow.mainloop() def quitGUI(self): PL.close('all') self.rootWindow.quit() self.rootWindow.destroy() def showHelp(self, widget,text): def setText(self): self.statusText.set(text) self.status.configure(foreground='blue') def showHelpLeave(self): self.statusText.set(self.statusStr) self.status.configure(foreground='black') widget.bind("<Enter>", lambda e : setText(self)) widget.bind("<Leave>", lambda e : showHelpLeave(self))
class Contratos(Frame): def __init__(self, parent, controller): Frame.__init__(self, parent) #VARIABLES GLOBALES global cod, cc, inquilino, codinm, inmueble, nit, owner, rel, vlrenta, duracion global contratos, tcontrato, incremento, gfacturaIni, facturaSgte, fecha, hoy global notas, anexos, destinacion, servicios, conexos, tercero, nombret, fecha global aplicado, cc_aplicado, n_aplicado, inm_aplicado, novedad, n_nombre, n_valor global h, busqueda, clean, update, add #INSTANCIEAS DE LOS WIDGETS global e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, Cbx1, chkb1, chkb2, lb, cedulaE, notas fecha = datetime.date.today() hoy = "%s" % fecha #ESTE NUESTRA LA FECHA EN FORMATO AÑO-MES-DIA (YYYY/MM/DD) #hoy = time.strftime("%d/%m/%y") #ESTO PARA VER FORMATO FECHA EN DIA/MES/AÑO #hoy = time.strftime("%y/%m/%d") h = hoy #VARIABLES lupa = PhotoImage(file='img/lupa.png') schedule = PhotoImage(file='img/calendar.gif') cod = IntVar() cc = StringVar() inquilino = StringVar() codinm = IntVar() inmueble = StringVar() nit = StringVar() owner = StringVar() rel = IntVar() vlrenta = DoubleVar() duracion = IntVar() contratos = ['Vivienda', 'Comercial', 'Mixta'] tcontrato = StringVar() incremento = DoubleVar() gfacturaIni = IntVar() facturaSgte = IntVar() fecha = StringVar() notas = StringVar() anexos = StringVar() destinacion = StringVar() servicios = StringVar() conexos = StringVar() tercero = StringVar() nombret = StringVar() aplicado = IntVar() cc_aplicado = StringVar() n_aplicado = StringVar() inm_aplicado = StringVar() novedad = StringVar() n_nombre = StringVar() n_valor = DoubleVar() #BUSQUEDA = ["Nombre","CC/Nit"] busqueda = StringVar() busqueda.trace("w", lambda name, index, mode: buscar()) dato = StringVar() #WIDGETS #========================= HEADER =========================== self.header = Label(self, text="CONTRATOS", font="bold") self.header.pack(pady=20, side=TOP) #========================== WRAPPER ========================== self.wrapper = Frame(self) self.wrapper.pack(side=LEFT, fill=Y) #================ NOTEBOOK =============> self.nb = Notebook(self.wrapper) #-----------------------> TAB 1 self.tab1 = Frame(self.nb) self.f0 = Frame(self.tab1) #------------------------------------- self.f0.pack(pady=5, fill=X) l1 = Label(self.f0, text='Código:') l1.pack(side=LEFT) e1 = Entry(self.f0, textvariable=cod, width=10) e1.pack(side=LEFT) self.f1 = Frame(self.tab1) #------------------------------------- self.f1.pack(pady=5, fill=X) l2 = Label(self.f1, text='Arrendatario:') l2.pack(side=LEFT, fill=X) e2 = Entry(self.f1, textvariable=cc, width=15) e2.pack(side=LEFT) e2.bind('<Return>', buscarA) b1 = Button(self.f1, image=lupa, command=topArrendatario) b1.image = lupa b1.pack(side=LEFT) e3 = Entry(self.f1, textvariable=inquilino, state=DISABLED) e3.pack(side=LEFT, fill=X, expand=1) self.f2 = Frame(self.tab1) self.f2.pack(pady=5, fill=X) #------------------------------------ l3 = Label(self.f2, text='Inmueble:') l3.pack(side=LEFT) e4 = Entry(self.f2, textvariable=codinm, width=10) e4.pack(side=LEFT) e4.bind('<Return>', buscarR) b2 = Button(self.f2, image=lupa, command=topRelacion) b2.pack(side=LEFT) e5 = Entry(self.f2, textvariable=inmueble, state=DISABLED) e5.pack(side=LEFT, fill=X, expand=1) self.f3 = Frame(self.tab1) self.f3.pack(pady=5, fill=X) #------------------------------------ l4 = Label(self.f3, text='Propietario:') l4.pack(side=LEFT) e6 = Entry(self.f3, width=15, textvariable=nit, state=DISABLED) e6.pack(side=LEFT) e7 = Entry(self.f3, width=5, textvariable=owner, state=DISABLED) e7.pack(side=LEFT, fill=X, expand=1) self.f4 = Frame(self.tab1) self.f4.pack(pady=5, fill=X) #------------------------------------ self.arriendo = Label(self.f4, text='Arriendo $:') self.arriendo.pack(side=LEFT) e8 = Entry(self.f4, textvariable=vlrenta, state=DISABLED, width=20) e8.pack(side=LEFT) self.duracion = Label(self.f4, text='Duración Contrato:') self.duracion.pack(side=LEFT) e9 = Entry(self.f4, textvariable=duracion, width=5) e9.pack(side=LEFT) self.meses = Label(self.f4, text='Meses') self.meses.pack(side=LEFT) self.f5 = Frame(self.tab1) self.f5.pack(pady=5, fill=X) #------------------------------------ self.tcontrato = Label(self.f5, text='Tipo Contrato:') self.tcontrato.pack(side=LEFT) Cbx1 = Combobox(self.f5, textvariable=tcontrato, values=contratos, width=10) Cbx1.set('') Cbx1.pack(side=LEFT) self.incremento = Label(self.f5, text='Incremento:') self.incremento.pack(side=LEFT) e10 = Entry(self.f5, textvariable=incremento, width=5) e10.pack(side=LEFT) chkb1 = Checkbutton(self.f5, text="General factura\n inicial", variable=gfacturaIni) chkb1.pack(side=LEFT) chkb2 = Checkbutton(self.f5, text="Facturar príodo\n siguiente", variable=facturaSgte) chkb2.pack(side=LEFT) self.f6 = Frame(self.tab1) self.f6.pack(pady=5, fill=X) #------------------------------------ btime = Button(self.f6, image=schedule, command=calendario) btime.image = schedule btime.pack(side=RIGHT) etime = Entry(self.f6, textvariable=fecha, width=10) fecha.set(hoy) etime.pack(side=RIGHT) #ltime = Label(self.f6, text=hoy, font="bold", foreground='red') #ltime.pack(side=RIGHT) self.fi = Label(self.f6, text='Fecha Inicio: ') self.fi.pack(side=RIGHT) self.tab1.pack() #-----------------------> TAB 2 self.tab2 = Frame(self.nb) self.tab2.pack() self.f7 = Frame(self.tab2) #------------------------------------- self.f7.pack(fill=X, pady=10) notas = Text(self.f7, height=5) notas.pack(side=LEFT, fill=X, expand=1) self.f8 = Frame(self.tab2) self.f8.pack(pady=5, fill=X) #------------------------------------------- self.destino = Label(self.f8, text='Destinación:') self.destino.pack(side=LEFT) self.destinoE = Entry(self.f8, textvariable=destinacion, width=5) self.destinoE.pack(side=LEFT, fill=X, expand=1) self.f9 = Frame(self.tab2) self.f9.pack(pady=5, fill=X) #------------------------------------------- self.servicios = Label(self.f9, text='Servicios adicionales:') self.servicios.pack(side=LEFT) self.serviciosE = Entry(self.f9, textvariable=servicios, width=5) self.serviciosE.pack(side=LEFT, fill=X, expand=1) self.f10 = Frame(self.tab2) self.f10.pack(pady=5, fill=X) #------------------------------------------- self.conexos = Label(self.f10, text='Conexos:') self.conexos.pack(side=LEFT) self.conexosE = Entry(self.f10, textvariable=conexos, width=5) self.conexosE.pack(side=LEFT, fill=X, expand=1) #-----------------------> TAB 3 self.tab3 = Frame(self.nb) self.tab3.pack() self.f11 = Frame(self.tab3) #------------------------------------- self.f11.pack(fill=X, pady=5) self.cedula = Label(self.f11, text='CC/Nit: ') self.cedula.pack(side=LEFT) cedulaE = Entry(self.f11, textvariable=tercero, width=15) cedulaE.pack(side=LEFT) cedulaE.bind('<Return>', buscarT) b4 = Button(self.f11, image=lupa, command=topTercero) b4.image = lupa b4.pack(side=LEFT) self.f12 = Frame(self.tab3) #------------------------------------- self.f12.pack(fill=X, pady=5) self.tercero = Label(self.f12, text='Nombre: ') self.tercero.pack(side=LEFT) self.terceroE = Entry(self.f12, textvariable=nombret, width=5, state=DISABLED) self.terceroE.pack(side=LEFT, fill=X, expand=1) #-----------------------> TAB 4 self.tab4 = Frame(self.nb) self.tab4.pack() self.f13 = Frame(self.tab4) #------------------------------------- self.f13.pack(fill=X, pady=5) l = Label(self.f13, text='Aplicar a: ') l.pack(side=LEFT) Ch = Checkbutton(self.f13, text="Propietario", variable=aplicado) Ch.pack(side=LEFT) self.f14 = Frame(self.tab4) #------------------------------------- self.f14.pack(fill=X, pady=5) l13 = Label(self.f14, text='CC/Nit: ') l13.pack(side=LEFT) e13 = Entry(self.f14, textvariable=cc_aplicado, width=15) e13.pack(side=LEFT) b13 = Button(self.f14, image=lupa, command=None) b13.image = lupa b13.pack(side=LEFT) e13 = Entry(self.f14, textvariable=n_aplicado, state=DISABLED) e13.pack(side=LEFT, fill=X, expand=1) self.f15 = Frame(self.tab4) self.f15.pack(fill=X, pady=5) #------------------------------------ l14 = Label(self.f15, text='Cod.Inmueble:') l14.pack(side=LEFT) e14 = Entry(self.f15, textvariable=inm_aplicado, width=5, state=DISABLED) e14.pack(side=LEFT, fill=X, expand=1) self.f16 = Frame(self.tab4) self.f16.pack(fill=X, pady=5) #------------------------------------ l16 = Label(self.f16, text='Novedad:') l16.pack(side=LEFT, fill=X) e16 = Entry(self.f16, textvariable=novedad, width=15) e16.pack(side=LEFT) b16 = Button(self.f16, image=lupa, command=None) b16.image = lupa b16.pack(side=LEFT) e16 = Entry(self.f16, textvariable=n_nombre, state=DISABLED) e16.pack(side=LEFT, fill=X, expand=1) self.f17 = Frame(self.tab4) self.f17.pack(fill=X, pady=5) #------------------------------------ l17 = Label(self.f17, text='Vlr Novedad:') l17.pack(side=LEFT, fill=X) e17 = Entry(self.f17, textvariable=n_valor, width=15) e17.pack(side=LEFT) #--------------------------------------------------------------- self.nb.add(self.tab1, text="General") self.nb.add(self.tab2, text="Anexos") self.nb.add(self.tab3, text="Tercero") self.nb.add(self.tab4, text="Gasto fijo") self.nb.pack() self.fBtn = Frame(self.wrapper) self.fBtn.pack() #------------------------------- clean = Button(self.fBtn, text='Limpiar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=limpiar) clean.pack(side=RIGHT) update = Button(self.fBtn, text='Actualizar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=actualizar, state=DISABLED) update.pack(side=RIGHT) add = Button(self.fBtn, text='Agregar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=agregar) add.pack(side=RIGHT) #========================= ASIDE =========================== self.aside = Frame(self) self.aside.pack(side=TOP, fill=BOTH) self.wrap1 = Frame(self.aside) self.wrap1.pack() self.viewer = Label(self.wrap1, text="LISTA DE CONTRATOS") self.viewer.pack() scroll = Scrollbar(self.wrap1, orient=VERTICAL) scroll.pack(side=RIGHT, fill=Y) lb = Listbox(self.wrap1, yscrollcommand=scroll.set, height=20, width=30) scroll.config(command=lb.yview) lb.pack(fill=BOTH) lb.bind("<Double-Button-1>", callback) self.wrap2 = Frame(self.aside) self.wrap2.pack() show = Button(self.wrap2, text='Cargar lista', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=cargar) show.pack(fill=X) delete = Button(self.wrap2, text='Borrar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=borrar) delete.pack(fill=X) edit = Button(self.wrap2, text='Modificar', bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=modificar) edit.pack(fill=X) buscador = Label(self.wrap2, text="Buscar por CC:") buscador.pack() E = Entry(self.wrap2, textvariable=busqueda, width=24) E.pack()
def __init__(self, master): self.fname="" #global variables self.t1=StringVar() self.t2=StringVar() self.t3=StringVar() self.t4=StringVar() self.t5=StringVar() self.t6=StringVar() self.t7=StringVar() self.t8=StringVar() self.t9=StringVar() self.t10=StringVar() self.var1=StringVar() self.var2=StringVar() self.var3=StringVar() self.var4=StringVar() self.var5=StringVar() self.var6=StringVar() self.var7=StringVar() self.var8=StringVar() self.var9=StringVar() self.var10=StringVar() #end mymaster = Frame(master, name='mymaster') # create Frame in "root" mymaster.pack(fill=BOTH) #min and max size of window #master.minsize(width=900, height=900) #master.maxsize(width=650, height=500) #end #title of window master.title("Airdrop-ng") #end #for the style of fonts self.customFont = tkFont.Font(family="Helvetica", size=12) self.myfont = tkFont.Font(family="Helvetica", size=10) self.myfont2 = tkFont.Font(family="Helvetica", size=8) self.headerfont=tkFont.Font(family="Helvetica", size=15,underline = True) self.myfontnew=tkFont.Font(family="Helvetica", size=11,underline = True) #end nb = Notebook(mymaster, name='nb') # create Notebook in "master" nb.pack(fill=BOTH, padx=2, pady=3) # fill "master" but pad sides #content frame self.frame_content = Frame(nb,name="frame_content", bg="white") self.frame_content.pack(fill=BOTH, side=TOP, expand=True) nb.add(self.frame_content, text="Filter-1") # add tab to Notebook self.frame_content7 = Frame(nb, name='frame_content7', bg="white") nb.add(self.frame_content7, text="Detect Devices") # repeat for each tab self.frame_content5 = Frame(nb, name='frame_content5', bg="white") nb.add(self.frame_content5, text="output") #End #frame content 7 Label(self.frame_content7, text = 'Airdrop-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) btndetect=Button(self.frame_content7, text = 'Detect', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 1, column = 0, padx = 5, pady = 5) btndbrowse=Button(self.frame_content7, text = 'Attach File', command =self.browse_file, height=2, width=15, font=self.customFont).grid(row = 3, column = 0, padx = 5, pady = 5) self.lilnew1=Listbox(self.frame_content7,bg="black", fg="white", font=self.myfont, selectmode=SINGLE, width=30, height=15) self.lilnew1.grid(row = 1, column = 1, rowspan=3) #End Label(self.frame_content, text = 'Airdrop-ng',font=self.headerfont, bg="white", padx=10, pady=10).grid(row = 0, column = 0) Label(self.frame_content, text = 'Options :',font=self.myfontnew, bg="white").grid(row = 1, column = 1) #Button(self.frame_content, text = 'ivs', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 0, padx = 5, pady = 5) #Button(self.frame_content, text = 'gpsd', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 1, padx = 5, pady = 5) #Button(self.frame_content, text = 'write', command =self.canvas_detect, height=2, width=15, font=self.customFont).grid(row = 2, column = 2, padx = 5, pady = 5) #command Listbox Label(self.frame_content5, text = 'Edit Command From Here',font=self.myfontnew, bg="white", justify=LEFT).grid(row = 0, column = 0) TextCommandBox=Text(self.frame_content5, height=5, width=30) TextCommandBox.grid(row=1, column=0, padx=5, pady=5) self.output=Text(self.frame_content5,bg="black", fg="white", font=self.myfont, height=20, width=42) self.output.grid(row = 0, column = 1, padx=50, pady=5, rowspan=3) btnsubmit=Button(self.frame_content5, width=15, height=2, text="Get Result", command=self.mycallback) btnsubmit.grid(row=2, column=0) btnclear=Button(self.frame_content5, width=15, height=2, text="Clear Output", command=self.clearoutput) btnclear.grid(row=3, column=0) #end self.C1 = Checkbutton(self.frame_content, text = "-i", \ onvalue = "-i", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var1) self.C1.grid(row = 2, column = 0, padx = 5, pady = 5) self.t1=Text(self.frame_content,height=1,width = 20) self.t1.grid(row = 2, column = 1, padx = 5, pady = 5) l1=Label(self.frame_content, text = ': Wireless card in monitor mode to inject from',font=self.myfont, bg="white", justify=LEFT).grid(row = 2, column = 2, padx = 5, pady = 5) self.C2 = Checkbutton(self.frame_content, text = "-t", \ onvalue = "-t", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var2) self.C2.grid(row = 3, column = 0, padx = 5, pady = 5) self.t2=Text(self.frame_content,height=1,width = 20) self.t2.grid(row = 3, column = 1, padx = 5, pady = 5) l2=Label(self.frame_content, text = ': Airodump txt file in CSV format NOT the pcap',font=self.myfont, bg="white", justify=LEFT).grid(row = 3, column = 2, padx = 5, pady = 5) self.C3 = Checkbutton(self.frame_content, text = "-p", \ onvalue = "-p", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var3) self.C3.grid(row = 4, column = 0, padx = 5, pady = 5) self.t3=Text(self.frame_content,height=1,width = 20) self.t3.grid(row = 4, column = 1, padx = 5, pady = 5) l3=Label(self.frame_content, text = ': Disable the use of Psyco JIT',font=self.myfont, bg="white", justify=LEFT).grid(row = 4, column = 2, padx = 5, pady = 5) self.C4 = Checkbutton(self.frame_content, text = "-r", \ onvalue = "-r", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var4) self.C4.grid(row = 5, column = 0, padx = 5, pady = 5) self.t4=Text(self.frame_content,height=1,width = 20) self.t4.grid(row = 5, column = 1, padx = 5, pady = 5) l4=Label(self.frame_content, text = ': Rule File for matched deauths)',font=self.myfont, bg="white", justify=LEFT).grid(row = 5, column = 2, padx = 5, pady = 5) self.C5 = Checkbutton(self.frame_content, text = "-u", \ onvalue = "-u", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var5) self.C5.grid(row = 6, column = 0, padx = 5, pady = 5) self.t5=Text(self.frame_content,height=1,width = 20) self.t5.grid(row = 6, column = 1, padx = 5, pady = 5) l5=Label(self.frame_content, text = ': Updates OUI list.',font=self.myfont, bg="white", justify=LEFT).grid(row = 6, column = 2, padx = 5, pady = 5) self.C6 = Checkbutton(self.frame_content, text = "-d", \ onvalue = "-d", offvalue = "", height=1, \ bg="white", font=self.customFont,variable=self.var6) self.C6.grid(row = 8, column = 0, padx = 5, pady = 5) self.t6=Text(self.frame_content,height=1,width = 20) self.t6.grid(row = 8, column = 1, padx = 5, pady = 5) l6=Label(self.frame_content, text = ': Injection driver. Default is mac80211.',font=self.myfont, bg="white", justify=LEFT).grid(row = 8, column = 2, padx = 5, pady = 5) self.C7 = Checkbutton(self.frame_content, text = "-s", \ onvalue = "-s", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var7) self.C7.grid(row = 9, column = 0, padx = 5, pady = 5) self.t7=Text(self.frame_content,height=1,width = 20) self.t7.grid(row = 9, column = 1, padx = 5, pady = 5) l7=Label(self.frame_content, text = ': Time to sleep between sending each packet',font=self.myfont, bg="white", justify=LEFT).grid(row = 9, column = 2, padx = 5, pady = 5) self.C8 = Checkbutton(self.frame_content, text = "-b", \ onvalue = "-b", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var8) self.C8.grid(row = 10, column = 0, padx = 5, pady = 5) self.t8=Text(self.frame_content,height=1,width = 20) self.t8.grid(row = 10, column = 1, padx = 5, pady = 5) l8=Label(self.frame_content, text = ': Turn on Rule Debugging',font=self.myfont, bg="white", justify=LEFT).grid(row = 10, column = 2, padx = 5, pady = 5) self.C9 = Checkbutton(self.frame_content, text = "-l", \ onvalue = "-l", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var9) self.C9.grid(row = 11, column = 0, padx = 5, pady = 5) self.t9=Text(self.frame_content,height=1,width = 20) self.t9.grid(row = 11, column = 1, padx = 5, pady = 5) l9=Label(self.frame_content, text = ': Enable Logging to a file',font=self.myfont, bg="white", justify=LEFT).grid(row = 11, column = 2, padx = 5, pady = 5) self.C10 = Checkbutton(self.frame_content, text = "-n", \ onvalue = "-n", offvalue = "", height=1, \ width = 7, bg="white", font=self.customFont,variable=self.var10) self.C10.grid(row = 12, column = 0, padx = 5, pady = 5) self.t10=Text(self.frame_content,height=1,width = 20) self.t10.grid(row = 12, column = 1, padx = 5, pady = 5) l10=Label(self.frame_content, text = ': Time to sleep between loops',font=self.myfont, bg="white", justify=LEFT).grid(row = 12, column = 2, padx = 5, pady = 5)
def __init__(self, root): # 数据载入和分类器训练 bc_dataset = BreastCancerDataSet() bc_x_train = bc_dataset.x_train bc_y_train = bc_dataset.y_train bc_x_test = bc_dataset.x_test bc_y_test = bc_dataset.y_test ctg_dataset = CardiotocographyDataSet() ctg_x_train = ctg_dataset.x_train ctg_y_train = ctg_dataset.y_train ctg_x_test = ctg_dataset.x_test ctg_y_test = ctg_dataset.y_test # 初始化UI menubar = Tk.Menu(root) # 添加菜单 root.config(menu=menubar) filemenu = Tk.Menu(menubar) filemenu.add_command(label="Exit", command=sys.exit) menubar.add_cascade(label="File", menu=filemenu) notebook = Notebook(root) # 添加标签页 notebook.pack(fill=Tk.BOTH) page_0 = Tk.Frame(notebook) notebook.add(page_0, text="Main ") notebook_0 = Notebook(page_0) # 添加子标签页 notebook_0.pack(fill=Tk.BOTH) page_01 = Tk.Frame(notebook_0) notebook_0.add(page_01, text="Breast Cancer") page_02 = Tk.Frame(notebook_0) notebook_0.add(page_02, text="Cardiotocography") page_05 = Tk.Frame(notebook_0) notebook_0.add(page_05, text="Cardiotocography Features Rank") page_04 = Tk.Frame(notebook_0) notebook_0.add(page_04, text="Cardiotocography Features Corr") page_03 = Tk.Frame(notebook_0) notebook_0.add(page_03, text="Cardiotocography Features Pair") page_06 = Tk.Frame(notebook_0) notebook_0.add(page_06, text="Console Output") page_1 = Tk.Frame(notebook) notebook.add(page_1, text="Training ") notebook_1 = Notebook(page_1) # 添加子标签页 notebook_1.pack(fill=Tk.BOTH) page_11 = Tk.Frame(notebook_1) notebook_1.add(page_11, text="LR") page_12 = Tk.Frame(notebook_1) notebook_1.add(page_12, text="SVM") page_13 = Tk.Frame(notebook_1) notebook_1.add(page_13, text="RF") page_2 = Tk.Frame(notebook) notebook.add(page_2, text="Testing ") subnotebook_2 = Notebook(page_2) # 添加子标签页 subnotebook_2.pack(fill=Tk.BOTH) page_21 = Tk.Frame(subnotebook_2) subnotebook_2.add(page_21, text="LR") page_22 = Tk.Frame(subnotebook_2) subnotebook_2.add(page_22, text="SVM") page_23 = Tk.Frame(subnotebook_2) subnotebook_2.add(page_23, text="RF") page_3 = Tk.Frame(notebook) notebook.add(page_3, text="Learning Curve") page_4 = Tk.Frame(notebook) notebook.add(page_4, text="Validation Curve") page_5 = Tk.Frame(notebook) notebook.add(page_5, text="ROC & AUC") page_6 = Tk.Frame(notebook) notebook.add(page_6, text="GridSearchCV") page_7 = Tk.Frame(notebook) notebook.add(page_7, text="t-SNE") # 第0页 主页 console = ConsoleFrame(page_06) console.pack(fill=Tk.BOTH) bc_eva = Evaluator(scaler=StandardScaler(), pca=PCA(n_components=2), clf=SVC(probability=True, random_state=1)) BreastCancerMainFrame(page_01, bc_x_train, bc_y_train, bc_x_test, bc_y_test, bc_eva, console).pack(fill=Tk.BOTH) ctg_eva = Evaluator(scaler=StandardScaler(), pca=PCA(n_components=2), clf=SVC(probability=True, random_state=1)) CardiotocographyMainFrame(page_02, ctg_x_train, ctg_y_train, ctg_x_test, ctg_y_test, ctg_eva, console).pack(fill=Tk.BOTH) FeaturesPairFrame(page_03, ctg_x_train, ctg_y_train, ctg_x_test, ctg_y_test, ctg_eva, ctg_dataset.df, console).pack( fill=Tk.BOTH) FeaturesCorrFrame(page_04, ctg_x_train, ctg_y_train, ctg_x_test, ctg_y_test, ctg_eva, ctg_dataset.df, console).pack( fill=Tk.BOTH) FeaturesRankFrame(page_05, ctg_x_train, ctg_y_train, ctg_x_test, ctg_y_test, ctg_eva, ctg_dataset.df, console).pack( fill=Tk.BOTH)