def initView(self): self.topFrame = Tk.Frame(self.master) self.topFrame.pack(side=Tk.TOP, fill='x') self.searchStringVar = Tk.StringVar() self.searchBar = Tk.Entry(self.topFrame, textvariable=self.searchStringVar) self.searchStringVar.set(self.searchTerm) self.searchBar.pack(side=Tk.LEFT, fill='both', expand='yes') self.searchStringVar.trace("w", self.onSearchBarChange) self.searchButton = Tk.Button(self.topFrame, text="Search", command=self.updateView) self.searchButton.pack(side=Tk.RIGHT) self.selected = -1 self.middleFrame = Tk.Frame(self.master) self.middleFrame.pack(fill='both', expand=1) self.listbox = treectrl.ScrolledMultiListbox(self.middleFrame) self.listbox.config(height="20", scrollmode='auto') self.listbox.listbox.config(columns=('Name', 'Serving Size', 'Calories', 'Protein', 'Carbs', 'Fat')) self.listbox.listbox.column_configure(0, width=160) self.listbox.listbox.config(selectcmd=self.selectCmd, selectmode='single') self.listbox.pack(side='top', fill='both', expand=1) self.servingFrame = Tk.Frame(self.master) self.servingFrame.pack(fill='both') Tk.Label(self.servingFrame, text="Servings").pack(side=Tk.LEFT) self.servingStringVar = Tk.StringVar() self.servingBar = Tk.Entry(self.servingFrame, textvariable=self.servingStringVar) self.servingBar.pack(side=Tk.LEFT) self.servingUnitStringVar = Tk.StringVar() self.servingUnitCombo = ttk.Combobox( self.servingFrame, state='readonly', textvariable=self.servingUnitStringVar) self.servingUnitCombo["values"] = ("Serving(s)") self.servingUnitCombo.current(0) self.servingUnitCombo.bind("<<ComboboxSelected>>", self.clearComboSelection) self.servingUnitCombo.pack(side=Tk.LEFT) self.bottomFrame = Tk.Frame(self.master) self.bottomFrame.pack(side=Tk.BOTTOM, fill='x', pady='5', padx='5') self.addButton = Tk.Button(self.bottomFrame, text="Add", command=self.addToParent) self.addButton.pack(fill='x', expand=1)
def audit_record(table_name,field_id_var,field_names,field_labels): if field_id_var.get() == "": return find_window = Toplevel(mw) find_window.geometry('700x300+400+200') find_window.title('Select Record') mlb = treectrl.ScrolledMultiListbox(find_window) mlb.pack(side='top', fill='both', expand=1) mlb.focus_set() mlb.listbox.config(columns=['Identifier','Modified by','Modified on','Removed'] + field_labels,selectmode='extended') sql_cmd = "select identifier,modified_by,modified_on,removed" for x in field_names: sql_cmd += ","+x sql_cmd += " from "+table_name+"_aud where identifier = "+field_id_var.get() mydb = mysql.connector.connect( host=hostname, user=username, passwd=passwd, database=database_name ) mycursor = mydb.cursor() print(sql_cmd) mycursor.execute(sql_cmd) for row in mycursor: mlb.listbox.insert('end',*map(str,row)) number_of_fields = len(field_names)+4 # We have to add 4 extra column for the identifier, mod bu, mod on, removed fields sortorder_flags = {} for i in range(number_of_fields): sortorder_flags[str(i)] = "increasing" mlb.listbox.notify_install('<Header-invoke>') mlb.listbox.notify_bind('<Header-invoke>', lambda event: sort_list(event,mlb,sort_order_flags))
def _makeclustliglibrary(self): """ """ self.resetFrame() f = self.frame ### LOCAL library panel XXX #group = Pmw.Group(f, tag_text = 'Local libraries', tag_font = self.FONTbold) #tk.Label(group.interior(), text='NOTHING YET', bg='white').pack(expand=0, fill='x',padx=3) #group.pack(expand=0, fill='x',anchor='w', side='top',padx=5, pady=3) group = Pmw.Group(f, tag_text = 'Remote libraries', tag_font = self.FONTbold) group.pack(expand=1, fill='both',anchor='w', side='top',padx=5, pady=3) g = group.interior() tbar = tk.Frame(g) b1 = tk.Button(tbar, text = 'New', image=self._ICON_add, command = self._call_lib_manager, compound='left', font=self.FONTbold, **self.BORDER) b1.pack(anchor='w', side='left',padx=1) b2 = tk.Button(tbar, text = 'Remove', image=self._ICON_remove, command = self._call_lib_manager_del, compound='left', font=self.FONTbold, **self.BORDER) b2.pack(anchor='w', side='left',padx=0) # check for services upload/download # then disable the buttons tbar.pack(side='top', anchor='w',padx=2, pady=0) #g.pack(expand=1,fill='both',anchor='n', side='top') f = tk.Frame(g) tk.Label(f, text="Selected library :", font=self.FONT).pack(expand=0,anchor='w',side='left', padx=3,pady=1) self._selectedLib = tk.Label(f, text = '(none)', bg='white', anchor='w', font=self.FONTbold, **self.BORDER) self._selectedLib.pack(anchor='w',side = 'top', expand=1, fill='x', padx=3,pady=1) f.pack(expand=0,fill='both',anchor='n', side='top', padx=5, pady =3) self.ligLibPanel = TkTreectrl.ScrolledMultiListbox(g, bd=2) self.ligLibPanel.listbox.config(bg='white', fg='black', font=self.FONT, columns = ('name', 'items', 'updated', 'format', 'heavy min.', 'heavy max.', 'hba min.', 'hba max.', 'hbd min.', 'hbd max', 'mw min', 'mw max', 'tors min', 'tors max', 'atypes') ) self.ligLibPanel.pack(expand=1, fill='both') #self.ligLibPanel.listbox.bind('<ButtonRelease-1>', self._lib_callback) self.ligLibPanel.listbox.bind('<Button-3>', self.libselect) #_cb_ssh) if not self.app.server == None: self.dprint("UPDATE THE LIST OF LIBRARIES")
def __init__(self,parent, app, problematic): rb.RaccoonDefaultWidget.__init__(self, parent) Pmw.Dialog.__init__(self, parent, title = 'Problematic results', buttons=('Export', 'Close'), defaultbutton='Close', command=self.click) self.app = app self.problematic = problematic cols = ('Ligand file', 'error') self.panel = TkTreectrl.ScrolledMultiListbox(self.interior(), bd=2) self.panel.listbox.config(bg='white', fg='black', font=self.FONT, columns = cols) self.panel.pack(expand=1, fill='both', anchor='n', padx='4') for f,e in self.problematic: self.panel.listbox.insert('END', f, e) self.activate()
def initView(self): self.topFrame = Tk.Frame(self.master) self.topFrame.pack(side=Tk.TOP, fill='x') self.searchStringVar = Tk.StringVar() self.searchBar = Tk.Entry(self.topFrame, textvariable=self.searchStringVar) self.searchStringVar.set(self.searchTerm) self.searchBar.pack(side=Tk.LEFT, fill='both', expand='yes') self.searchButton = Tk.Button(self.topFrame, text="Filter", command=self.updateView) self.searchButton.pack(side=Tk.RIGHT) self.selected = -1 self.listbox = treectrl.ScrolledMultiListbox(self.master) self.listbox.pack(side='top', fill='both', expand=1) self.listbox.config(height="20", scrollmode='auto') self.listbox.listbox.config(columns=('Name', 'Serving Size', 'Calories', 'Protein', 'Carbs', 'Fat')) self.listbox.listbox.column_configure(0, width=160) self.listbox.listbox.config(selectcmd=self.selectCmd, selectmode='single') self.pageFrame = Tk.Frame(self.master) self.pageFrame.pack(side="top", fill="x") self.addButton = Tk.Button(self.master, text="Add", command=self.addToParent) self.addButton.pack(side='left') self.deleteButton = Tk.Button(self.master, text="Delete", command=self.deleteItem) self.deleteButton.pack(side='right') self.newButton = Tk.Button(self.master, text="New", command=self.viewForm) self.newButton.pack(side='right') self.editButton = Tk.Button(self.master, text="Edit", command=self.editCmd) self.editButton.pack(side='right') self.searchStringVar.trace("w", self.onSearchBarChange)
def main_program(): table_name = e1.get() template_name = e2.get() parent_table = "" save_defaults(table_name,template_name) record_id = 0 parent_record = 0 mlb = treectrl.ScrolledMultiListbox(mw) # Create null mlb and sql_cmd for first call to modify_records sql_cmd = "SELECT NULL LIMIT 0" identifiers = [] if template_name == "": template_id = [-1] else: template_id = [template_ids[template_name]] modify_records(table_name,template_id,parent_table,record_id,parent_record,mlb,sql_cmd,identifiers)
def main(): connection = sqlite3.connect(':memory:') setup_table(connection) cursor = connection.cursor() root = tk.Tk() root.title('Simple MultiListbox demo') mlb = treectrl.MultiListbox(root) mlb.pack(side='top', fill='both', expand=1) tk.Button(root, text='Close', command=root.quit).pack(side='top', pady=5) mlb.focus_set() mlb.configure(selectcmd=select_cmd, selectmode='extended') mlb.config(columns=('Column 1', 'Column 2')) cursor.execute('SELECT * from foo') for row in cursor.fetchall(): mlb.insert('end', *map(unicode, row)) root.mainloop()
def select_record(table_name,field_id_var,field_names,field_labels,field_entries,label_widgets): find_window = Toplevel(mw) find_window.geometry('700x300+400+200') find_window.title("Select "+table_name+" Record") mlb = treectrl.ScrolledMultiListbox(find_window) mlb.pack(side='top', fill='both', expand=1) mlb.focus_set() mlb.listbox.config(columns=['identifier'] + field_labels,selectmode='extended') sql_cmd = "SELECT identifier" num_columns = 1 for x in field_names: sql_cmd += ","+x num_columns += 1 sql_cmd += " FROM "+table_name+" WHERE (removed = '0')" for i in range(num_columns-1): if (field_entries[i].entry_type == "TEXTBOX"): field_value = field_entries[i].get(1.0,"end").strip() if (field_value != ""): sql_cmd += " AND ("+field_names[i]+" LIKE '"+field_value+"%')" elif (field_entries[i].get() != "") and (field_entries[i].entry_type == "TEXT"): sql_cmd += " AND ("+field_names[i]+" LIKE '"+field_entries[i].get()+"%')" elif (field_entries[i].get() != "") and (field_entries[i].entry_type == "DATE"): sql_cmd += " AND ("+field_names[i]+" LIKE '"+field_entries[i].get()+"%')" elif (field_entries[i].get() != "") and (field_entries[i].entry_type == "INT"): sql_cmd += " AND ("+field_names[i]+" = "+field_entries[i].get()+")" elif (field_entries[i].get() != "") and (field_entries[i].entry_type == "FLOAT"): sql_cmd += " AND ("+field_names[i]+" = "+field_entries[i].get()+")" elif (field_entries[i].get() != ""): sql_cmd += " AND ("+field_names[i]+" = '"+field_entries[i].get()+"')" identifiers = [] load_list_box(mlb,sql_cmd,identifiers,num_columns) sortorder_flags = {} for i in range(num_columns): sortorder_flags[str(i)] = "increasing" mlb.listbox.bind('<1>',lambda event: select_cmd(event,find_window,mlb,identifiers,field_id_var)) mlb.listbox.notify_install('<Header-invoke>') mlb.listbox.notify_bind('<Header-invoke>', lambda event: sort_list(event,mlb,sortorder_flags))
def select_record(): global find_window find_window = Toplevel(mw) find_window.geometry('700x300+400+200') find_window.title('Select Record') global mlb mlb = treectrl.ScrolledMultiListbox(find_window) mlb.pack(side='top', fill='both', expand=1) mlb.focus_set() mlb.listbox.config(columns=['identifier'] + field_labels, selectmode='extended') sql_cmd = "SELECT identifier" for x in field_names: sql_cmd += "," + x sql_cmd += " from " + e2.get() + " where removed = '1'" print("SQL cmd: " + sql_cmd) mydb = mysql.connector.connect(host=hostname, user=username, passwd=passwd, database=database_name) mycursor = mydb.cursor() mycursor.execute(sql_cmd) global identifiers identifiers = [] global last_names last_names = [] for row in mycursor: identifiers.append(row[0]) last_names.append(row[1]) mlb.listbox.insert('end', *map(str, row)) mlb.listbox.bind('<1>', select_cmd) mlb.listbox.notify_install('<Header-invoke>') mlb.listbox.notify_bind('<Header-invoke>', sort_list) global sortorder_flags sortorder_flags = {} for i in range(number_of_fields): sortorder_flags[str(i)] = "increasing"
def __init__(self, master=None): super().__init__(master) self.master = master self.pack() self.start_pressing = False self.keys = [] self.switch_key = None self.var = tk.IntVar() self.key_table = treectrl.MultiListbox(self) self.key_table.pack(side="bottom") self.key_table.config(columns=("Button Name", "Interval")) self.title = tk.Label(self, text="Pycro.") self.title.pack() self.add_key_button = tk.Button(self, text="Add Button", bg="white", command=self.open_key_window) self.add_key_button.pack() self.main_key_label = tk.Label(self, text="Switch hotkey is not set yet.") self.main_key_label.pack() self.main_key_button = tk.Button(self, text="Set Switch Hotkey", command=self.set_switch_key) self.main_key_button.pack() Thread(target=self.scan_switch).start()
def main(): global dirpath global searchf global listPlist global listSongs global plistselect2 global aaa global mlist global column footer = 10 #rightedge=4 global dirs root = Tk() root.bg = 'black' root.title('BPM') global bpmsort configfound = False try: zz = open('config.json', 'r') configfound = True except: getdir() if configfound: for line in zz.readlines(): line = ast.literal_eval(line) dirpath = line['dir'] if len(dirpath) < 3: getdir() print dirpath, 'dirpath@!!!!!' fcol = 10 menubar = Menu(root) filemenu = Menu(menubar, tearoff=12) filemenu.add_command(label="Open", command=add) filemenu.add_command(label="Save", command=save) filemenu.add_command(label="About", command=about) filemenu.add_separator() filemenu.add_command(label="Exit", command=root.quit) menubar.add_cascade(label="File", menu=filemenu) filemenu = Menu(menubar, tearoff=0) filemenu.add_command(label="Local Songs", command=init(mlist)) filemenu.add_command(label="Extra_Data", command=export_extra_data) filemenu.add_command(label="BeatSaberDB", command=save) filemenu.add_command(label="BsaberDB", command=save) menubar.add_cascade(label="Update", menu=filemenu) filemenu = Menu(menubar, tearoff=0) filemenu.add_command(label="Local Songs DB", command=savesongs) filemenu.add_command(label="Current Playlist", command=save) filemenu.add_command(label="Favorites", command=save) menubar.add_cascade(label="Export", menu=filemenu) filemenu = Menu(menubar, tearoff=0) filemenu.add_command(label="Local Songs DB", command=opensongs) filemenu.add_command(label="Current Playlist", command=save) filemenu.add_command(label="Favorites", command=save) menubar.add_cascade(label="Import", menu=filemenu) filemenu = Menu(menubar, tearoff=0) bpmsort = filemenu.add_command(label="NEW", command=lambda: sortS(10, 16)) filemenu.add_command(label="Song", command=lambda: sortS(1, 1)) filemenu.add_command(label="Artist", command=lambda: sortS(2, 2)) filemenu.add_command(label="Mapper", command=lambda: sortS(3, 3)) filemenu.add_command(label="Starred", command=lambda: sortS(4, 4)) filemenu.add_command(label="Rating", command=lambda: sortS(10, 10)) filemenu.add_command(label="Score", command=lambda: sortS(6, 6)) bpmsort = filemenu.add_command(label="BPM", command=lambda: sortS(9, 9)) filemenu.add_separator() filemenu.add_command(label="Easy", command=lambda: sortS(4, 4)) filemenu.add_command(label="Normal", command=lambda: sortS(5, 5)) filemenu.add_command(label="Hard", command=lambda: sortS(6, 6)) filemenu.add_command(label="Expert", command=lambda: sortS(7, 7)) filemenu.add_command(label="Expert+", command=lambda: sortS(8, 8)) menubar.add_cascade(label="Sort", menu=filemenu) if debug > 0: filemenu = Menu(menubar, tearoff=0) filemenu.add_command(label="clear", command=lambda: clear_data()) filemenu.add_command(label="firstload", command=lambda: firstload()) filemenu.add_command(label="init", command=lambda: init(mlist)) filemenu.add_command(label="4", command=lambda: sortS(7)) filemenu.add_command(label="5+", command=lambda: sortS(8)) menubar.add_cascade(label="Debug", menu=filemenu) root.config(menu=menubar) #Label(text="All Songs "+str(len(mlist)),font=(20)).grid(row=0,column=0,columnspan=7) Label(text="Playlist", font=(20)).grid(row=0, column=8, columnspan=4) listPlist = Listbox(root, width=30, height=20, font=("Helvetica", 12)) listPlist.grid(row=1, column=fcol + 8, columnspan=4) listPlist.bind("<Double-Button-1>", OnDouble) #listSongs = Listbox(root, width=30, height=20, font=("Helvetica", 12)) listSongs = Tktree.MultiListbox(root, width=1200, height=400, font=("Helvetica", 12), backgroundmode="row", selectmode=1, selectcmd=nice) listSongs.grid(row=1, column=0, rowspan=1, columnspan=fcol + 8) #listSongs.config(columns=('Directory', 'Song Name','songSubname','authorName','difficlty','bpm','rating','highscore','date')) print emoji.emojize('Python is :thumbs_up:') listSongs.config(columns=(emoji.emojize(':star:', use_aliases=True), 'Song Name', 'Artist Name', 'Mapper?!', 'E', 'N', 'H', 'X', 'P', 'BPM', 'Rating', 'bsid', 'yes')) listSongs.column_configure(1, arrow='down') listSongs.bind("<Double-Button-1>", OnDouble) #listSongs.bind("<Double-Button-1>", add) listSongs.column_configure(0, button=True) woop = Image.open('shit.png') woop = woop.resize((10, 40)) woop = ImageTk.PhotoImage(woop) woop listSongs.configure(backgroundimage=woop) ##############songdetails=[value,songName,songsubname,authorName,diff,bpm,thumb,environmentName] addsongbutton = Button(root, justify='left', anchor='w', text="Filter", command=filter2).grid(row=2, column=0) addsongbutton = Button(root, text="Add to Playlist", command=add).grid(row=2, column=2, columnspan=3) addallsongbutton = Button(root, text="Add All to Playlist", command=addall).grid(row=8, column=1) removesongbutton = Button( root, text="RemoveSelected", command=lambda listPlist=listPlist: listPlist.delete(ANCHOR)).grid( row=2, column=fcol + 8, ) moveup = Button(root, text="Move up", command=move_up).grid( row=2, column=fcol + 9, ) movedown = Button(root, text="Move down", command=move_down).grid( row=2, column=fcol + 10, ) removesongbutton2 = Button(root, text="Remove All", command=remove).grid(row=2, column=fcol + 11) #b = Button(master, text="Delete",command=lambda lb=lb: lb.delete(ANCHOR)) plistselect2 = listPlist.get(ANCHOR) Label(text="Rating:", anchor="e").grid(row=2, column=fcol + 1, sticky='W' + 'E' + 'S' + 'N') fcol = 10 #ratebutton = Button(root, text="0", command=remove).grid(row=2,column=1,sticky='W'+'E'+'S'+'N') ratebutton = Button(root, text="1", command=lambda: rate(1)).grid( row=2, column=fcol + 2, sticky='W' + 'E' + 'S' + 'N') ratebutton = Button(root, text="2", command=lambda: rate(2)).grid( row=2, column=fcol + 3, sticky='W' + 'E' + 'S' + 'N') ratebutton = Button(root, text="3", command=lambda: rate(3)).grid( row=2, column=fcol + 4, sticky='W' + 'E' + 'S' + 'N') ratebutton = Button(root, text="4", command=lambda: rate(4)).grid( row=2, column=fcol + 5, sticky='W' + 'E' + 'S' + 'N') ratebutton = Button(root, text="5", command=lambda: rate(5)).grid( row=2, column=fcol + 6, sticky='W' + 'E' + 'S' + 'N') ratebutton = Button(root, text=emoji.emojize(':star:', use_aliases=True), command=lambda: rate(6)).grid(row=2, column=fcol + 7, sticky='W' + 'E' + 'S' + 'N') #Label(text="Search",font=(20)).grid(row=0,column=5,columnspan=1) #Label(text="BLALB",font=(20)).grid(row=0,column=7,columnspan=1,sticky='W'+'S'+'N') searchf = Entry(root, font=(20), width=5) searchf.grid(row=0, column=fcol + 6, sticky='E' + 'S' + 'N' + 'W') print searchf sf = searchf.get() searchbutton = Button(root, text="search", command=lambda: search(sf, searchf)).grid( row=0, column=fcol + 5, sticky='E' + 'S' + 'N') searchbutton = Button(root, text="reset", command=lambda: resettext()).grid(row=0, column=fcol + 7, sticky='W' + 'S' + 'N') try: opensongs() except: print 'error loading db. scanning dirs...' firstload() print 'wtf' init(mlist) #sortS(1) mainloop()
def __init__(self): # windows self.window = tk.Tk() self.window.title("Openload") self.window.geometry("700x500") #window.grid_columnconfigure(0, weight=1) self.window.grid_columnconfigure(1, weight=1) #window.grid_rowconfigure(0, weight=1) self.window.grid_rowconfigure(1, weight=1) # init entries self.lb_frame_init = tk.LabelFrame(self.window, text='Init info', takefocus=1, width=700) #lb_frame_init.pack(expand=1, fill='x', pady=10) self.lb_frame_init.grid_rowconfigure(0, weight=1) self.lb_frame_init.grid(row=0, sticky='ew') # init entries var_login_id = tk.StringVar() var_login_key = tk.StringVar() if os.path.exists(self.config_name): cf = configparser.ConfigParser() cf.read(self.config_name) kvs = cf.items(self.section_name) for key, value in kvs: if key == 'login_id': var_login_id.set(value) if key == 'login_key': var_login_key.set(value) self.lable_login_id = tk.Label(self.lb_frame_init, text='Login Id: ') self.lable_login_id.grid(row=0, column=0, sticky='nsew') self.entry_login_id = tk.Entry(self.lb_frame_init, textvariable=var_login_id, width=30) self.entry_login_id.grid(row=0, column=1, sticky='nsew') self.lable_login_key = tk.Label(self.lb_frame_init, text='Login Key: ') self.lable_login_key.grid(row=0, column=2) self.entry_login_key = tk.Entry(self.lb_frame_init, textvariable=var_login_key, width=30) self.entry_login_key.grid(row=0, column=3, sticky='nsew') # add tabs self.tab_control = ttk.Notebook(self.window) #tab_control.grid_columnconfigure(0, weight=1) self.tab_upload = ttk.Frame(self.tab_control) self.tab_upload.grid_rowconfigure(0, weight=1) self.tab_upload.grid_columnconfigure(0, weight=1) self.tab_upload.grid(sticky='nsew') self.tab_control.add(self.tab_upload, text='upload') self.tab_control.grid(row=1, sticky='nsew') self.tab_download = ttk.Frame(self.tab_control) self.tab_control.add(self.tab_download, text='download') #upload list self.ul_tree_ctrl = TkTreectrl.MultiListbox(self.tab_upload) vsb = ttk.Scrollbar(orient="vertical", command=self.ul_tree_ctrl.yview) hsb = ttk.Scrollbar(orient="horizontal", command=self.ul_tree_ctrl.xview) self.ul_tree_ctrl.configure(selectmode='multiple', yscrollcommand=vsb.set, xscrollcommand=hsb.set) self.ul_tree_ctrl.config(columns=('file', 'progress')) self.ul_tree_ctrl.grid(row=0, column=0, columnspan=2, sticky='nsew') vsb.grid(column=2, row=0, sticky='ns', in_=self.tab_upload) hsb.grid(column=0, row=1, columnspan=2, sticky='ew', in_=self.tab_upload) self.file_sel_button = tk.Button(self.tab_upload, text='select files', command=self.select_files) self.file_sel_button.grid(row=2, column=0, sticky='w') self.upload_button = tk.Button(self.tab_upload, text='upload', width=10, command=self.upload_file) self.upload_button.grid(row=2, column=1, sticky='w') # data self.upload_file_dict = {} self.lock = threading.Lock() self.cv = threading.Condition(self.lock) self.task_queue = task_queue.TaskQueue(2) self.task_queue.start()
def initUI(self): #Frame to display the name and icon of the software self.frame = Frame(self.plugin) self.frame.pack(fill=BOTH) try: photo = PhotoImage(master=self, file=os.path.join(iconFolder, "lisica_icon.gif")) self.display = Label(self.frame, image=photo, background="#BFBFBF") self.display.image = photo self.display.pack(side=RIGHT) except: pass self.heading = Label(self.frame, text="LiSiCA", font=("Times", 30, "bold"), foreground="brown", background="#BFBFBF", anchor=CENTER) self.heading.pack(ipady=10, fill=BOTH, expand=1) #Notebook with 3 tabs self.note = Notebook(self.plugin) self.input_Tab = Frame(self.note) self.load_Project_Tab = Frame(self.note) self.output_Tab = Frame(self.note) self.about_Tab = Frame(self.note) self.note.add(self.input_Tab, text=" Inputs ") self.note.add(self.load_Project_Tab, text=" Load Project ") self.note.add(self.output_Tab, text=" Outputs ") self.note.add(self.about_Tab, text=" About ") self.note.pack(padx=10, pady=10, ipadx=10, ipady=10, anchor=CENTER, fill=BOTH, expand=1, after=self.frame) #Button to close LiSiCA plugin #self.closeButton=Button(self.plugin, text='Close', command=self.close) #self.closeButton.pack(pady=10,after=self.note,ipady=2) #Load Project Tab Design Label(self.load_Project_Tab, text="Choose the results directory :").grid(row=1, sticky=W, padx=20, pady=(40)) self.loadResultsEntry = Entry(self.load_Project_Tab, width=50) self.loadResultsEntry.grid(row=1, column=2) self.loadResultsEntry.insert(0, resultsFolder) Button(self.load_Project_Tab, text="Browse", command=lambda: self.getResultsDir(1)).grid(row=1, column=4) Button(self.load_Project_Tab, text="Load", command=self.loadResults).grid(row=2, column=4) #About Tab Design #label_About_style=ttk.Style() #label_About_style.configure('AboutTabLabel.TLabel', font=('Helvetica', 12, 'Bold'),foreground="black", background="white") self.version_Frame = tk.LabelFrame(self.about_Tab, text="Product Version Information", labelanchor="nw", font=("Times", 12), relief="ridge", borderwidth=4) self.version_Frame.pack(fill=X, padx=(10, 10), pady=(20, 20)) from lisica import UpgraderGitlab upgraderObj = UpgraderGitlab() upgraderObj.findCurrentVersion() upgraderObj.findLatestVersionGUI() self.currentVersionGUI = StringVar(master=self) self.currentVersionGUI.set(upgraderObj.currentVersionGUI) #~ upgraderObj.latestVersion = upgraderObj.latestVersion[1:] #~ print "lversion = ", upgraderObj.latestVersion Label(self.version_Frame, text="LiSiCA GUI Version :", font=("Times", 11)).grid(row=7, columnspan=2, padx=(10, 10), pady=(10, 10), sticky=W) Label(self.version_Frame, textvariable=self.currentVersionGUI, font=("Times", 11)).grid(row=7, column=2, columnspan=2, padx=(10, 10), pady=(10, 10), sticky=W) #Checking for latest upgrades from distutils.version import StrictVersion if StrictVersion(upgraderObj.currentVersionGUI) < StrictVersion( upgraderObj.latestVersionGUI): Label(self.version_Frame, text="Upgrade of LiSiCA GUI is available!", font=("Times", 11, 'bold')).grid(row=8, column=0, columnspan=2, padx=(10, 10), pady=(10, 10), sticky=W) def doUpgrade(): upgraderObj.upgrade() self.close() self.upgrade_Button = Button(self.version_Frame, text="Upgrade to version " + upgraderObj.latestVersionGUI, command=lambda: doUpgrade()) self.upgrade_Button.grid(row=9, column=3, sticky=E, pady=(5, 5), padx=(5, 5)) self.contact_Frame = tk.LabelFrame(self.about_Tab, text="Contact Us", labelanchor="nw", font=("Times", 12), relief="ridge", borderwidth=4) self.contact_Frame.pack(fill=X, padx=(10, 10), pady=(20, 20)) Label(self.contact_Frame, text="Contact Us at [email protected]", font=("Times", 11)).grid(columnspan=2, padx=(10, 10), pady=(10, 10), sticky=W) Label(self.contact_Frame, text="Please feel free to visit our website : ", font=("Times", 11)).grid(row=2, columnspan=2, padx=(10, 5), pady=(10, 10), sticky=W) self.website = Label(self.contact_Frame, text=r"http://www.insilab.com", font=("Times", 11), foreground="blue", underline=True) import tkFont hyperlink_font = tkFont.Font(self.website, self.website.cget("font")) hyperlink_font.configure(underline=True) self.website.configure(font=hyperlink_font) self.website.grid(row=2, column=2, columnspan=2, padx=(0, 10), pady=(10, 10), sticky=W) self.website.bind("<Button-1>", self.openWebsite) #Input Tab Design #Choose Mol2 file for Reference Ligand Label(self.input_Tab, text="Reference Ligand: ").grid(row=1, sticky=W, pady=(20, 10), padx=20) self.ref_Entry = Entry(self.input_Tab, width=50) self.ref_Entry.grid(row=1, column=2, pady=(20, 10)) self.button_BrowseRef = Button(self.input_Tab, text="Browse", command=self.getRefFileName) self.button_BrowseRef.grid(row=1, column=4, pady=(20, 10)) #Choose Mol2 file for Target Ligand(s) Label(self.input_Tab, text="Target Ligand(s):").grid(row=2, sticky=W, padx=20) self.tar_Entry = Entry(self.input_Tab, width=50) self.tar_Entry.grid(row=2, column=2) Button(self.input_Tab, text="Browse", command=self.getTarFileName).grid(row=2, column=4) #set variables for dimension parameters self.parameter = StringVar(master=self) self.units = StringVar(master=self) #set default for parameters self.parameter.set("Maximum allowed Shortest Path difference: ") self.units.set("bonds") global Conf_Label, conformations #declaring these widget variables outside the function dim() #prevents repeated creation of widgets. self.conf_Label = Label(self.input_Tab, text="No of conformations: ") self.conformations = Entry(self.input_Tab, width=10) self.conformations.insert(0, "1") #2D or 3D Screening? Default is 2D- RadioButtons self.dimension = IntVar(master=self) self.dimension.set(2) self.d2 = Radiobutton(self.input_Tab, text="2 Dimensional Screening", variable=self.dimension, value=2, command=self.dim) self.d3 = Radiobutton(self.input_Tab, text="3 Dimensional Screening", variable=self.dimension, value=3, command=self.dim) Label(self.input_Tab, text="Product Graph Dimension:").grid(row=5, columnspan=2, sticky=W, pady=10, padx=20) self.d2.grid(row=5, column=2, columnspan=2, sticky=W + E) self.d3.grid(row=6, column=2, columnspan=2, sticky=W + E) #Depending on the dimension chosen self.maxLabel = Label(self.input_Tab, textvariable=self.parameter) self.maxLabel.grid(row=7, sticky=W, pady=10, padx=20) self.maxLabel.update() self.max_Entry = Entry(self.input_Tab, width=10) self.max_Entry.grid(row=7, column=2, sticky=W) self.max_Entry.insert(0, "1") #Value to be acquired and passed #To display the unit, uncomment the following line #Label(self.input_Tab, textvariable=self.units).grid(row=7,column=2) self.w_Label = Label( self.input_Tab, text="No of highest ranked molecules to write to the output: ") self.w_Entry = Entry(self.input_Tab, width=10) self.w_Label.grid(row=9, sticky=W, pady=10, padx=20) self.w_Entry.grid(row=9, column=2, sticky=W) self.w_Entry.insert(0, "100") self.hydrogen = IntVar(master=self) Label(self.input_Tab, text="Consider Hydrogens :").grid(row=11, sticky=W, pady=10, padx=20) self.checkBox = Checkbutton(self.input_Tab, variable=self.hydrogen, command=self.updateCommand) self.checkBox.grid(row=11, column=2, sticky=W) #Get the no of CPU cores available in the system self.CPU_Cores = IntVar(master=self) self.CPU_Cores.set(multiprocessing.cpu_count()) #Deafult=all CPU cores #Widget to set the CPU count manually- Slider Label(self.input_Tab, text="Number of CPU cores to be used: ").grid(row=12, sticky=W, pady=10, padx=20) #Defualt = All available CPU cores self.slider = tk.Scale(self.input_Tab, variable=self.CPU_Cores, from_=1, to=multiprocessing.cpu_count(), length=100, resolution=1, orient=HORIZONTAL, command=self.onEvent) self.slider.grid(row=12, column=2, pady=10, sticky=W) #Option to choose the directory for Results of LiSiCA Label(self.input_Tab, text="Save results in:").grid(row=13, sticky=W, padx=20) self.saveResultsEntry = Entry(self.input_Tab, width=50) self.saveResultsEntry.grid(row=13, column=2, pady=10) self.saveResultsEntry.insert(0, resultsFolder) Button(self.input_Tab, text="Browse", command=lambda: self.getResultsDir(0)).grid(row=13, column=4) self.display_Command = Text(self.input_Tab, height=3) self.display_Command.grid(row=14, columnspan=6, sticky=W + E) self.retag("Parameters", self.ref_Entry, self.tar_Entry, self.conformations, self.w_Entry, self.max_Entry, self.saveResultsEntry, self.input_Tab) self.bind_class("Parameters", "<Button-1>", self.onEvent) self.bind_class("Parameters", "<KeyPress>", self.onEvent) self.go_Button = Button(self.note, text="GO", command=self.submitted) self.go_Button.grid(row=17, column=4, pady=(5, 5), in_=self.input_Tab) # Output Tab Design #Frame on the left half of Output Tab for displaying the Results self.frame_Result = Frame(self.output_Tab) self.frame_Result.pack(side=LEFT, fill=BOTH, expand=1) #Frame on the right half Output Tab for displaying the Atom correspondence self.frame_Corr = Frame(self.output_Tab) self.frame_Corr.pack(side=RIGHT, fill=BOTH, expand=1) #Design of the Result frame self.ref = () self.tar = () #Add a scroll bar named scrollbar1 self.scrollbar1 = Scrollbar(self.frame_Result) self.scrollbar1.pack(side=RIGHT, fill=Y) #Add a multi-column list box to the frame #The MultiListBox class belongs to TkTreectrl module #TkTreectrl package is an external package and is to be downloaded and installed self.multiListBox1 = TkTreectrl.MultiListbox( self.frame_Result, yscrollcommand=self.scrollbar1.set, expandcolumns=(1, 2), selectcmd=self.showCorr) self.multiListBox1.pack(side=LEFT, fill=BOTH, expand=1) self.multiListBox1.config(columns=('Rank', 'ZINC ID', "Tanimoto score")) #The scrollbar2 is linked to the multiListBox2 self.scrollbar1.config(command=self.multiListBox1.yview) #Design of the Atoms' Correspondence displaying frame #Add a scroll bar named scrollbar2 self.scrollbar2 = Scrollbar(self.frame_Corr) self.scrollbar2.pack(side=RIGHT, fill=Y) #Add a multi-column list box to the frame #The MultiListBox class belongs to TkTreectrl module #TkTreectrl package is an external package and is to be downloaded and installed self.multiListBox2 = TkTreectrl.MultiListbox( self.frame_Corr, yscrollcommand=self.scrollbar2.set, expandcolumns=(0, 1, 2, 3, 4), selectcmd=self.showCorrAtoms) self.multiListBox2.pack(side=LEFT, fill=BOTH, expand=1) self.multiListBox2.config(columns=('Ref. Num', 'Ref. Atom', 'Tar. Num', 'Tar. Atom', 'Atom Type')) #The scrollbar2 is linked to the multiListBox2 self.scrollbar2.config(command=self.multiListBox2.yview) self.pack()
def initView(self): self.selected = -1 self.master.geometry("580x400") self.topFrame = Tk.Frame(self.master) self.topFrame.pack(side=Tk.TOP, fill='x') self.searchBar = Tk.Entry(self.topFrame) self.searchBar.pack(side=Tk.LEFT, fill='both', expand='yes') self.inventoryButton = Tk.Button(self.topFrame, text="Inventory", command=self.viewInventory) self.inventoryButton.pack(side=Tk.RIGHT) self.searchButton = Tk.Button(self.topFrame, text="Search", command=self.viewSearch) self.searchButton.pack(side=Tk.RIGHT) self.middleFrame = Tk.Frame(self.master) self.middleFrame.pack(fill='x', pady=2, padx=1) today = date.today() self.monthStringVar = Tk.StringVar() self.monthCombo = ttk.Combobox(self.middleFrame, state='readonly', textvariable=self.monthStringVar, width=10) self.monthCombo.bind("<<ComboboxSelected>>", self.clearComboSelection) months = ("January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December") self.monthCombo["values"] = months self.monthCombo.current(today.month - 1) self.monthCombo.pack(side=Tk.LEFT) self.dayStringVar = Tk.StringVar() self.dayCombo = ttk.Combobox(self.middleFrame, state='readonly', textvariable=self.dayStringVar, width=10) today = date.today() daysInMonth = monthrange(today.year, today.month) days = [] for i in range(daysInMonth[1]): days.append(str(i + 1)) self.dayCombo["values"] = days self.dayCombo.current(today.day - 1) self.dayCombo.pack(side=Tk.LEFT) self.dayCombo.bind("<<ComboboxSelected>>", self.clearComboSelection) self.yearStringVar = Tk.StringVar() self.yearCombo = ttk.Combobox(self.middleFrame, state='readonly', textvariable=self.yearStringVar, width=10) thisYear = today.year years = [str(thisYear)] for i in range(4): years.append(str(thisYear - i - 1)) years = tuple(years) self.yearCombo["values"] = years self.yearCombo.current(0) self.yearCombo.pack(side=Tk.LEFT) self.yearCombo.bind("<<ComboboxSelected>>", self.clearComboSelection) self.bottomFrame = Tk.Frame(self.master) self.bottomFrame.pack(fill="both", expand=1) self.listbox = treectrl.ScrolledMultiListbox(self.bottomFrame) self.listbox.config(height="20", scrollmode='auto') self.listbox.listbox.config(columns=('Name', 'Servings', 'Calories', 'Protein', 'Carbs', 'Fat')) self.listbox.listbox.config(selectcmd=self.selectCmd, selectmode='single') #self.listbox.listbox.column_configure(0, width=260) self.listbox.pack(side='top', fill='both', expand=1) self.editButton = Tk.Button(self.bottomFrame, text="Edit", command=self.editCmd) self.editButton.pack(side='right') self.deleteButton = Tk.Button(self.bottomFrame, text="Delete", command=self.deleteCmd) self.deleteButton.pack(side='right') Tk.Frame(self.bottomFrame).pack(side='right', padx=12) self.downImage = Tk.BitmapImage(file="down.xbm") self.downButton = Tk.Button(self.bottomFrame, image=self.downImage, text="Down", command=self.downCmd) self.downButton.pack(side='right', fill='y') self.upImage = Tk.BitmapImage(file="up.xbm") self.upButton = Tk.Button(self.bottomFrame, image=self.upImage, text="Up", command=self.upCmd) self.upButton.pack(side='right', fill='y') self.exportButton = Tk.Button(self.bottomFrame, text="Export CSV", command=self.exportCmd) self.exportButton.pack(side='left') self.statsFrame = Tk.Frame(self.master) self.statsFrame.pack(side='top', pady=2, fill='x') self.footerFont = tkFont.Font(size=10) self.footerBoldFont = tkFont.Font(size=10, weight='bold') self.footerPad = 4 self.caloriesFrame = Tk.Frame(self.statsFrame) self.caloriesFrame.pack(side='left', padx=self.footerPad) self.caloriesTopFrame = Tk.Frame(self.caloriesFrame) self.caloriesTopFrame.pack(side='top', fill='x') self.caloriesBottomFrame = Tk.Frame(self.caloriesFrame) self.caloriesBottomFrame.pack(side='bottom', fill='x') self.caloriesStringVar = Tk.StringVar() Tk.Label(self.caloriesTopFrame, text="Calories", font=self.footerFont).pack(side='left') self.caloriesLabel = Tk.Label(self.caloriesBottomFrame, textvariable=self.caloriesStringVar, font=self.footerBoldFont) self.caloriesLabel.pack(side='left') self.proteinFrame = Tk.Frame(self.statsFrame) self.proteinFrame.pack(side='left', padx=self.footerPad) self.proteinTopFrame = Tk.Frame(self.proteinFrame) self.proteinTopFrame.pack(side='top', fill='x') self.proteinBottomFrame = Tk.Frame(self.proteinFrame) self.proteinBottomFrame.pack(side='bottom', fill='x') self.proteinStringVar = Tk.StringVar() Tk.Label(self.proteinTopFrame, text=" Protein", font=self.footerFont).pack(side='left') self.proteinLabel = Tk.Label(self.proteinBottomFrame, textvariable=self.proteinStringVar, font=self.footerBoldFont) self.proteinLabel.pack(side='left') self.carbFrame = Tk.Frame(self.statsFrame) self.carbFrame.pack(side='left', padx=self.footerPad) self.carbTopFrame = Tk.Frame(self.carbFrame) self.carbTopFrame.pack(side='top', fill='x') self.carbBottomFrame = Tk.Frame(self.carbFrame) self.carbBottomFrame.pack(side='bottom', fill='x') self.carbStringVar = Tk.StringVar() Tk.Label(self.carbTopFrame, text=" Carb", font=self.footerFont).pack(side='left') self.carbLabel = Tk.Label(self.carbBottomFrame, textvariable=self.carbStringVar, font=self.footerBoldFont) self.carbLabel.pack(side='left') self.fatFrame = Tk.Frame(self.statsFrame) self.fatFrame.pack(side='left', padx=self.footerPad) self.fatTopFrame = Tk.Frame(self.fatFrame) self.fatTopFrame.pack(side='top', fill='x') self.fatBottomFrame = Tk.Frame(self.fatFrame) self.fatBottomFrame.pack(side='bottom', fill='x') self.fatStringVar = Tk.StringVar() Tk.Label(self.fatTopFrame, text=" Fat", font=self.footerFont).pack(side='left') self.fatLabel = Tk.Label(self.fatBottomFrame, textvariable=self.fatStringVar, font=self.footerBoldFont) self.fatLabel.pack(side='left')
def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller # 该 list 内部存放多个子 list,每个子 list 为 [标注点的坐标, 标注] self.data_notes = [] topFrame = tk.Frame(self) # 创建一个空的 DataFrame self.df_data = pd.DataFrame(columns=['date', 'balance', 'memo']) self.btnMainPage = tk.Button(topFrame, text="主页面", command=self.on_btn_main_page).pack( side=tk.LEFT, padx=4) # 日期选择 # Calendar((x, y), 'ur').selection() 获取日期,x,y为点坐标 date_start_gain = lambda: [ self.date_start.set(date) for date in [CalendarCustom(None, 'ur').selection()] if date ] tk.Button(topFrame, text='日期:', command=date_start_gain).pack(side=tk.LEFT, padx=4) self.date_start = tk.StringVar() ttk.Entry(topFrame, textvariable=self.date_start).pack(side=tk.LEFT) today = datetime.date.today() self.date_start.set(today) tk.Label(topFrame, text="账户余额:").pack(side=tk.LEFT) self.strBalance = tk.StringVar(value='') ttk.Entry(topFrame, width=15, textvariable=self.strBalance).pack(side=tk.LEFT, padx=4) tk.Label(topFrame, text="备注:").pack(side=tk.LEFT) self.strMemo = tk.StringVar(value='') ttk.Entry(topFrame, width=25, textvariable=self.strMemo).pack(side=tk.LEFT, padx=4) tk.Button(topFrame, text="添加", width=10, command=self.on_btn_add).pack(side=tk.LEFT, padx=4) topFrame.pack(side=tk.TOP, fill=tk.BOTH) # 列表框 frameReport = tk.Frame(self) mlbDatasFrame = tk.Frame(frameReport) scrollbarBalance = tk.Scrollbar(mlbDatasFrame, orient=tk.HORIZONTAL) scrollbarBalanceV = tk.Scrollbar(mlbDatasFrame, orient=tk.VERTICAL) self.mlbBalance = treectrl.MultiListbox( mlbDatasFrame, xscrollcommand=scrollbarBalance.set, yscrollcommand=scrollbarBalanceV.set) scrollbarBalance.config(command=self.mlbBalance.xview) scrollbarBalance.pack(side=tk.BOTTOM, fill=tk.X) scrollbarBalanceV.config(command=self.mlbBalance.yview) scrollbarBalanceV.pack(side=tk.RIGHT, fill=tk.Y) self.mlbBalance.pack(side=tk.TOP, fill=tk.BOTH, expand=1) self.mlbBalance.focus_set() self.mlbBalance.configure(selectcmd=self.tree_solution_selected, selectmode='single') self.mlbBalance.config(columns=('日期', '余额', '备注')) mlbDatasFrame.pack(side=tk.TOP, fill=tk.BOTH, expand=1) frameReport.pack(side=tk.LEFT, fill=tk.BOTH, expand=0, pady=4) # 显示中文标签 plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示负号 plt.rcParams['axes.unicode_minus'] = False # 有中文使用 u'中文内容' self.draw() self.load_data()
def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller self.flag = 0 # 补充数据线程,已运行 self.FLAG_THRD_FETCH_DATA = 1 topFrame = tk.Frame(self) self.btnDiary = tk.Button(topFrame, text="股市日志", command=self.on_btn_diary).pack(side=tk.LEFT, padx=4) tk.Button(topFrame, text="资金日志", command=self.on_btn_capital_diary).pack(side=tk.LEFT, padx=4) self.btnFetchData = tk.Button(topFrame, text="补充数据", command=self.on_btn_fetch_data).pack( side=tk.LEFT, padx=4) self.chkPowerOffWhenDone = tk.IntVar() tk.Checkbutton(topFrame, text="完成后关机", variable=self.chkPowerOffWhenDone).pack(side=tk.LEFT, padx=4) self.btnScreen = tk.Button(topFrame, text="选股操作", command=self.on_btn_screen).pack( side=tk.LEFT, padx=4) self.btnTester = tk.Button(topFrame, text="策略测试", command=self.on_btn_tester).pack( side=tk.LEFT, padx=4) self.btnRiseSort = tk.Button(topFrame, text="阶段涨幅排行", command=self.on_btn_rise_sort).pack( side=tk.LEFT, padx=4) # 日期选择 # Calendar((x, y), 'ur').selection() 获取日期,x,y为点坐标 date_start_gain = lambda: [ self.date_start.set(date) for date in [CalendarCustom(None, 'ur').selection()] if date ] tk.Button(topFrame, text='开始日期:', command=date_start_gain).pack(side=tk.LEFT, padx=4) self.date_start = tk.StringVar() ttk.Entry(topFrame, textvariable=self.date_start).pack(side=tk.LEFT) today = datetime.date.today() self.date_start.set(today) # 结束日期 date_end_gain = lambda: [ self.date_end.set(date) for date in [CalendarCustom(None, 'ur').selection()] if date ] tk.Button(topFrame, text='结束日期:', command=date_end_gain).pack(side=tk.LEFT, padx=4) self.date_end = tk.StringVar() ttk.Entry(topFrame, textvariable=self.date_end).pack(side=tk.LEFT) today = datetime.date.today() self.date_end.set(today) topFrame.pack(side=tk.TOP, fill=tk.BOTH) # 列表框 self.frameReport = tk.Frame(self) mlbDatasFrame = tk.Frame(self.frameReport) scrollbarSolution = tk.Scrollbar(mlbDatasFrame, orient=tk.HORIZONTAL) scrollbarSolutionV = tk.Scrollbar(mlbDatasFrame, orient=tk.VERTICAL) self.mlbSolution = treectrl.MultiListbox( mlbDatasFrame, xscrollcommand=scrollbarSolution.set, yscrollcommand=scrollbarSolutionV.set) scrollbarSolution.config(command=self.mlbSolution.xview) scrollbarSolution.pack(side=tk.BOTTOM, fill=tk.X) scrollbarSolutionV.config(command=self.mlbSolution.yview) scrollbarSolutionV.pack(side=tk.RIGHT, fill=tk.Y) self.mlbSolution.pack(side=tk.TOP, fill=tk.BOTH, expand=1) self.mlbSolution.focus_set() self.mlbSolution.configure(selectcmd=self.tree_solution_selected, selectmode='single') self.mlbSolution.config(columns=('编码', '名称', '涨幅')) mlbDatasFrame.pack(side=tk.TOP, fill=tk.BOTH, expand=1) self.frameReport.pack(side=tk.TOP, fill=tk.BOTH, expand=1, pady=4) self.frameReport.pack_forget() # 补充数据输出记录 self.frameOutput = tk.Frame(self) self.textOutput = tk.Text(self.frameOutput) self.textOutput.pack(side=tk.LEFT, fill=tk.BOTH, expand=1) scrollbarOutputV = tk.Scrollbar(self.frameOutput, orient=tk.VERTICAL) scrollbarOutputV.config(command=self.textOutput.yview) scrollbarOutputV.pack(side=tk.RIGHT, fill=tk.Y) self.textOutput.config(yscrollcommand=scrollbarOutputV.set) self.frameOutput.pack(side=tk.TOP, fill=tk.BOTH, expand=1, pady=4) frameStatus = tk.Frame(self) self.statusStr = tk.StringVar() self.status = tk.Label(frameStatus, textvariable=self.statusStr, height=1, anchor='w', fg="black", font=("simsun", 12)) self.status.pack(side=tk.BOTTOM, fill=tk.X, expand=1) frameStatus.pack(side=tk.BOTTOM, fill=tk.X, expand=0) self.statusStr.set('状态:准备...')
def modify_records(table_name,template_id,parent_table,record_id,parent_record,mlb,parent_sql_cmd,identifiers): new_window = Toplevel(mw) new_window.wm_title("Modify "+table_name+" Record") new_window.geometry('920x550+250+150') new_window.protocol("WM_DELETE_WINDOW",lambda: reload_multi_list_box(mlb,new_window,parent_sql_cmd,identifiers)) TAB_CONTROL = ttk.Notebook(new_window) #Tab1 TAB1 = ttk.Frame(TAB_CONTROL) TAB_CONTROL.add(TAB1, text=table_name) TAB_CONTROL.pack(expand=1, fill="both") new_frame1 = Frame(TAB1) new_frame2 = Frame(TAB1,highlightthickness=1,highlightcolor="gray",highlightbackground="gray") new_frame3 = Frame(TAB1) new_frame1.pack(side=TOP,fill=X) new_frame2.pack(side=TOP,fill=X) new_frame3.pack(side=BOTTOM,fill=X) label1 = Label(new_frame1, text="Identifier",font=("Times",16)) label1.grid(row=0,column=0) field_id_var = StringVar() field_id = Entry(new_frame1,width=40,font=("Times",16),textvariable = field_id_var,validate="focusout",validatecommand=lambda: get_record(scroll_frame,table_name,template_id,field_id_var,field_mb_var,field_mo_var,field_names,field_labels,field_entries,label_widgets,orig_mod,child_tables,child_tabs,child_mlbs,child_field_names)) field_id.grid(row=0,column=1) find_button = Button(new_frame1,text='Find',font=("Times",16),command=lambda: select_record(table_name,field_id_var,field_names,field_labels,field_entries,label_widgets)) find_button.grid(row=0,column=2) label1 = Label(new_frame1, text="Modified By",font=("Times",16)) label1.grid(row=1,column=0) field_mb_var = StringVar() field_mb = Entry(new_frame1,width=40,font=("Times",16),state="readonly",textvariable=field_mb_var) field_mb.grid(row=1,column=1) label1 = Label(new_frame1, text="Modified On",font=("Times",16)) label1.grid(row=2,column=0) field_mo_var = StringVar() field_mo = Entry(new_frame1,width=40,font=("Times",16),state="readonly",textvariable=field_mo_var) field_mo.grid(row=2,column=1) # The following code will create a canvas and scrollbar for the fields in new_frame2 canvas=Canvas(new_frame2) scroll_frame=Frame(canvas) myscrollbar=Scrollbar(new_frame2,orient="vertical",command=canvas.yview) canvas.configure(yscrollcommand=myscrollbar.set) myscrollbar.pack(side="right",fill="y") canvas.pack(side="left") canvas.create_window((0,0),window=scroll_frame,anchor='nw') scroll_frame.bind("<Configure>",lambda event: myfunction(event,canvas)) # Get table fields mydb = mysql.connector.connect( host=hostname, user=username, passwd=passwd, database=database_name ) mycursor = mydb.cursor(buffered=True) # check if there are child tables sql_cmd = "SELECT table_name FROM table_header WHERE (parent_table = '"+table_name+"') ORDER BY identifier" mycursor.execute(sql_cmd) child_tables = [] child_field_names = [] child_tabs = [] child_mlbs = [] i = 0 for row in mycursor: # Check if the list is not empty child_tables.append(row[0]) child_tabs.append(ttk.Frame(TAB_CONTROL)) TAB_CONTROL.add(child_tabs[i], text=row[0]) child_field_names.append([]) mycursor2 = mydb.cursor() sql_cmd = "select field_name,field_label,data_type,field_len,link_table,sort_order,parent_table from table_details where (table_name = '"+row[0]+"') and (removed='0') order by sort_order" mycursor2.execute(sql_cmd) child_field_labels = [] for x in mycursor2: child_field_names[i].append(x[0]) child_field_labels.append(x[1]) child_mlbs.append(treectrl.ScrolledMultiListbox(child_tabs[i])) child_mlbs[i].pack(side='top', fill='both', expand=1) child_mlbs[i].listbox.config(columns=['Identifier','Modified by','Modified on','Removed'] + child_field_labels,selectmode='extended') i += 1 field_labels = [] field_names = [] field_entries = [] label_widgets = [] load_field_details(scroll_frame,table_name,template_id,mycursor,field_labels,field_names,field_entries,label_widgets) call_pre_entry_action(table_name,field_entries,field_names,template_id) orig_mod = ["",""] create_button = Button(new_frame3,text='Create Record',font=("Times",16),command=lambda: create_record(table_name,template_id,parent_table,field_id_var,field_mb_var,field_mo_var,field_names,field_entries,label_widgets,new_window,orig_mod)).pack(side="left") update_button = Button(new_frame3,text='Update Record',font=("Times",16),command=lambda: update_record(table_name,field_id_var,field_mb_var,field_mo_var,field_names,field_entries,label_widgets,new_window,orig_mod)).pack(side="left") remove_button = Button(new_frame3,text='Remove Record',font=("Times",16),command=lambda: remove_record(table_name,field_id_var,field_mb_var,field_mo_var,field_names,field_entries,label_widgets,new_window,orig_mod)).pack(side="left") audit_button = Button(new_frame3,text='Audit History',font=("Times",16),command=lambda: audit_record(table_name,field_id_var,field_names,field_labels)).pack(side="left") clear_button = Button(new_frame3,text='Clear',font=("Times",16),command=lambda: clear_record(table_name,parent_table,field_id_var,field_mb_var,field_mo_var,field_names,field_entries,label_widgets)).pack(side="left") template_button = Button(new_frame3,text='Template',font=("Times",16),command=lambda: prompt_for_template(scroll_frame,table_name,field_labels,field_names,field_entries,label_widgets,template_id,field_id_var,field_mb_var,field_mo_var,parent_record)).pack(side="left") exit_button = Button(new_frame3,text='Exit',font=("Times",16),command=lambda: reload_multi_list_box(mlb,new_window,parent_sql_cmd,identifiers)).pack(side="right") if record_id > 0: field_id_var.set(record_id) if int(parent_record) > 0: # If child table, set parent table field field_entries[0].configure(state="normal") field_entries[0].delete(0,END) field_entries[0].insert(0,parent_record) field_entries[0].configure(state="readonly")
pLabel.image = photo pLabel.pack(side=LEFT, expand=1) profile_label = Label( frame4, text="Welcome to KindleQuotes!\n Create or Select a profile.", bg="#333333", fg="#fff", font=("Helvetica", 18), wraplength=600) profile_label.pack(fill=X, expand=1, ipady=10) scroll_msg = Scrollbar(frame2, orient=VERTICAL) msg_box = treectrl.MultiListbox(frame2, yscrollcommand=scroll_msg.set, font=( "Helvetica", 11, )) scroll_msg.config(command=msg_box.yview, highlightbackground="#fff") scroll_msg.pack(side=RIGHT, fill=Y) msg_box.pack(fill=BOTH, expand=1) msg_box.config(selectcmd=get_book, selectmode='extended', columns=('Author', 'Title', 'ID'), expandcolumns=[0, 1], width=750) [[ msg_box.column_configure(msg_box.column(x), arrow='down', arrowgravity='right')
def get_book(sel): '''Open selected book.''' global quote_box global search_entry global search_box profile.search_terms = [] book_string = msg_box.get(sel[0])[0] profile.book_id = book_string[2] profile.book_title = " - ".join([book_string[1], book_string[0]]) quote_win = Toplevel(root) quote_win.title(profile.book_title) quote_win.config(bg="#333333") qs = Frame(quote_win) qs.config(pady=2, bg="#333333") qs.pack(side=TOP, fill=BOTH, expand=0) qf = Frame(quote_win) qf.config(pady=10) qf.pack(side=BOTTOM, fill=BOTH, expand=1) search_entry = StringVar() search_box = Entry(qs, textvariable=search_entry, font=("Helvetica", 11, "bold")) search_box.bind('<Return>', do_search) search_box.pack(side=LEFT, fill=BOTH, expand=1, ipadx=60) Button(qs, command=lambda: retrieveData(t="quotes", book=profile.book_id), text="Reset").pack(side=RIGHT) Button(qs, command=do_search, text="Search Quotes").pack(side=RIGHT) scroll_quote = Scrollbar(qf, orient=VERTICAL) quote_box = treectrl.MultiListbox(qf, yscrollcommand=scroll_quote.set, font=( "Helvetica", 11, )) scroll_quote.config(command=quote_box.yview, highlightbackground="#fff") scroll_quote.pack(side=RIGHT, fill=Y) quote_box.pack(fill=BOTH, expand=1) quote_box.config(selectcmd=show_quote, selectmode='extended', columns=('Location', 'Quote'), expandcolumns=[1], width=900, height=500) [[ quote_box.column_configure(quote_box.column(x), arrow='down', arrowgravity='right') ] for x in range(2)] quote_box.notify_install('<Header-invoke>') #quote_box.notify_bind('<Header-invoke>', lambda event: quote_box.sort(column=event.column, mode='increasing')) quote_box.notify_bind('<Header-invoke>', lambda event, t=quote_box: sort_column(event, t)) quote_box.colors = ('white', '#ffdddd', 'white', '#ddeeff') [[ quote_box.column_configure(quote_box.column(x), itembackground=quote_box.colors) ] for x in range(2)] quote_box.sorting_order = {0: 'increasing', 1: 'increasing'} retrieveData(t="quotes", book=profile.book_id)
def createTree(self): self.win = Pmw.Dialog(self.master, title='Select downloaded results', buttons=('OK', 'Cancel'), command=self.close) #pathlabel = Tkinter.StringVar(value=hf.truncateName(self.RESULTS_LOCATION, 55)) self.treeObj = TkTreectrl.ScrolledTreectrl(self.win.interior()) self.treeObj.pack(expand=1, fill='both', padx=5, pady=3) self.tree = self.treeObj.treectrl #self.itemToName = { TkTreectrl.ROOT : self.history } #self.nameToItem = { self.history : TkTreectrl.ROOT } self._treeStyles = {} # checkbox self.tree.state_define('Checked') self._checkedIcon = check = \ Tkinter.PhotoImage(master=self.master, data=('R0lGODlhDQANABEAACwAAAAADQANAIEAAAB/f3/f39', '////8CJ4yPNgHtLxYYtNbIbJ146jZ0gzeCIuhQ53N', 'JVNpmryZqsYDnemT3BQA7')) self._unCheckedIcon = uncheck = \ Tkinter.PhotoImage(master=self.master, data=('R0lGODlhDQANABEAACwAAAAADQANAI', 'EAAAB/f3/f39////8CIYyPNgHtLxYYtNbIrMZTX+l9WThwZAmSppqGmADHcnRaBQA7')) el_image = self.tree.element_create(type='image', image=(check, 'Checked', uncheck, ())) self.checkboxStyle = styleCheckbox = self.tree.style_create() self.tree.style_elements(styleCheckbox, el_image) self.tree.style_layout(styleCheckbox, el_image, padx=9, pady=2) self.treecol = self.tree.column_create(text='Results') self.tree.configure(treecolumn=self.treecol, showbuttons=1) #, expand=1) self.checkcol = self.tree.column_create(text='Select', expand=0) self._prjIcon = prjIcon = self._ICON_prj self._expIcon = expIcon = self._ICON_exp #self.tree.column_create(text='results URL', expand=0) # style for project styleProject = self.tree.style_create() pel_image = self.tree.element_create(type=TkTreectrl.IMAGE, image=(prjIcon, TkTreectrl.OPEN, prjIcon, '')) pel_text = self.tree.element_create(type=TkTreectrl.TEXT, fill=('white', TkTreectrl.SELECTED)) pel_select = self.tree.element_create(type=TkTreectrl.RECT, showfocus=1, fill=('blue4', TkTreectrl.SELECTED)) self.tree.style_elements(styleProject, pel_image, pel_select, pel_text) self.tree.style_layout(styleProject, pel_image, pady=1) self.tree.style_layout(styleProject, pel_select, union=(pel_text, ), padx=1, pady=1, squeeze='') self.tree.style_layout(styleProject, pel_text, padx=1, pady=1, ipadx=2, ipady=2) #, squeeze='y') self._treeStyles['prj'] = { 'img': pel_image, 'txt': pel_text, 'style': styleProject } # style for jobs styleJob = self.tree.style_create() job_image = self.tree.element_create(type=TkTreectrl.IMAGE, image=(expIcon, TkTreectrl.OPEN, expIcon, '')) self.tree.style_elements(styleJob, job_image, pel_select, pel_text) self.tree.style_layout(styleJob, pel_select, union=(pel_text, ), padx=1, pady=1, ipadx=1, ipady=1) #, squeeze='y') self.tree.style_layout(styleJob, job_image, pady=2) self._treeStyles['job'] = { 'img': job_image, 'txt': pel_text, 'style': styleJob } # style for string cell styleString = self.tree.style_create() cel_text = self.tree.element_create(type=TkTreectrl.TEXT, fill=('white', TkTreectrl.SELECTED)) self.tree.style_elements(styleString, pel_select, cel_text) self.tree.style_layout(styleString, cel_text, padx=1, pady=1, squeeze='y') self.tree.style_layout(styleString, pel_select, union=(cel_text, ), padx=1, pady=1, ipadx=1, ipady=1) self._treeStyles['cell'] = {'txt': cel_text, 'style': styleString} # bindings self.tree.notify_bind('<Expand-before>', self.expand) self.tree.notify_generate('<Expand-before>', item=TkTreectrl.ROOT) self.tree.bind('<ButtonRelease-1>', self.on_button1) self.win.activate()
def makeInterfaceSsh(self): """ """ bset = { 'bg': '#969b9d' } # 'width' : 22, 'height': 22, 'relief' : 'raised'} bset = {} bset.update(self.BORDER) self.resetFrame() self.recGroup = Pmw.Group(self.frame, tag_text='Accepted structures [ 0 ]', tag_font=self.FONTbold) # toolbar toolb = tk.Frame(self.recGroup.interior()) if self.sysarch == 'Windows': bwidth = 54 else: bwidth = 32 ###### add button # make button b = tk.Button(toolb, text='Add...', compound='top', image=self._ICON_add, width=bwidth, font=self.FONTbold, **bset) b.pack(anchor='n', side='top') # make menu items addrec_items = [ ['Add receptors'], ['Import files...', 'normal', self.openfiles], [], ['Scan directory...', 'normal', self.opendir], [ 'Scan directory (recursively)...', 'normal', self.opendir_recursive ], # [], # ['Select structure from history...', 'normal', self.opendir], ] # make menu menu = rb.RacMenu(b, addrec_items, toolbar=toolb) ###### add button # make button b = tk.Button(toolb, text='Remove...', compound='top', image=self._ICON_rem, width=bwidth, font=self.FONTbold, **bset) b.pack(anchor='n', side='top', pady=1) # make menu items addrec_items = [ ['Remove receptors'], ['Remove selected', 'normal', self.deletefiles], ['Remove all', 'normal', self.deleteallfiles], ] # make menu menu = rb.RacMenu(b, addrec_items, toolbar=toolb) # #tk.Button(toolb, text='Settings\n&\nAlignment...', compound='top', image = self._ICON_sys, width=32, # font=self.FONTbold, **bset ).pack(anchor='n', side='top',pady=1) toolb.pack(side='left', anchor='w', expand=0, fill='y', pady=0) # files manager self.recFileManager = TkTreectrl.ScrolledMultiListbox( self.recGroup.interior(), bd=2) self.recFileManager.listbox.config( bg='white', fg='black', font=self.FONT, columns=('name', 'chains', 'res.', 'flex_res', 'atom types', 'unk.types', 'filename'), selectmode='extended', ) delkey = CallbackFunction(self.deletefiles, {'nuke': False}) self.recFileManager.listbox.bind('<Delete>', delkey) self.recFileManager.pack(anchor='w', side='left', expand=1, fill='both') self.recGroup.pack(anchor='n', side='top', expand=1, fill='both') self.frame.pack(expand=1, fill='both', anchor='n', side='top')
def program_entry(self): """This is the entry point of the librairy. We aim here to handle everything relative to interfaces""" # Organizing menu part # MenuBar menubar = tkinter.Menu(self.wind) # Entries menu1 = tkinter.Menu(menubar, tearoff=0) menu2 = tkinter.Menu(menubar, tearoff=0) menu3 = tkinter.Menu(menubar, tearoff=0) # menu4 = tkinter.Menu() # Preparing image files about_us_img_path = path.join(path_to_bundle, 'about_us_r.png') delete_img_path = path.join(path_to_bundle, 'delete_r.png') create_new_img_path = path.join(path_to_bundle, 'create_new_r.png') save_img_path = path.join(path_to_bundle, 'save_r.png') cancel_img_path = path.join(path_to_bundle, 'cancel_r.png') quit_img_path = path.join(path_to_bundle, 'exit_r.png') # img = Image.open("new_file1.png") about_us_img = ImageTk.PhotoImage(file=about_us_img_path) delete_img = ImageTk.PhotoImage(file=delete_img_path) create_new_img = ImageTk.PhotoImage(file=create_new_img_path) save_img = ImageTk.PhotoImage(file=save_img_path) cancel_img = ImageTk.PhotoImage(file=cancel_img_path) quit_img = ImageTk.PhotoImage(file=quit_img_path) ## im = gtk.Image() # adding entries to Menus menu1.add_command(label=" creer", image=create_new_img, compound="left", command=self.create_book) menu1.add_command(label=" enregistrer", image=save_img, compound="left", command=self.confirm_save) menu1.add_command(label=" annuler", image=cancel_img, compound="left", command=self.cancel_without_saving) menu1.add_separator() menu1.add_command(label=" quitter", image=quit_img, compound="left", command=self.confirm_exit) menu2.add_command(label=" supprimer", image=delete_img, compound="left", command=self.confirm_delete) menu3.add_command(label=" A propos", image=about_us_img, compound="left", command=self.who_are_we) # adding menus to menubar menubar.add_cascade(label="fichier", menu=menu1) menubar.add_cascade(label="edition", menu=menu2) menubar.add_cascade(label="aide", menu=menu3) self.wind.config(menu=menubar) # Body part l_frame = tkinter.LabelFrame( self.wind, text="Renseignements du livre") # , bg="blue") l_frame.grid(row=1, column=1, pady=10, padx=20, sticky="NEWS") l_frame.grid_rowconfigure(1, weight=1) l_frame.grid_columnconfigure(1, weight=1) tkinter.Label(l_frame, text="Numero d'enregistrement:").grid(row=1, column=1, sticky="E", padx=5, pady=5) tkinter.Label(l_frame, text="Nom : ").grid(row=2, column=1, sticky="E", padx=5, pady=5) tkinter.Label(l_frame, text="Auteur : ").grid(row=3, column=1, sticky="E", padx=5, pady=5) tkinter.Label(l_frame, text="Prix : ").grid(row=4, column=1, sticky="E", padx=5, pady=5) tkinter.Label(l_frame, text="ISBN : ").grid(row=5, column=1, sticky="E", padx=5, pady=5) tkinter.Label(l_frame, text="Classe : ").grid(row=6, column=1, sticky="E", padx=5, pady=5) # frame for the 2 button radios l_frame_2 = tkinter.LabelFrame(l_frame, borderwidth=0) l_frame_2.grid(row=7, column=1, sticky="E", padx=5, pady=5) self.status = tkinter.StringVar() pret_rbtn = tkinter.Radiobutton(l_frame_2, text="En Pret", variable=self.status, value=self.BOOK_LEND) pret_rbtn.grid(row=0, column=0, sticky="W", padx=5, pady=5) dispo_rbtn = tkinter.Radiobutton(l_frame_2, text="Disponible", variable=self.status, value=self.BOOK_AVAILABLE) dispo_rbtn.grid(row=1, column=0, sticky="W", padx=5, pady=5) dispo_rbtn.select() tkinter.Label(l_frame, text="Mle du Preteur : ").grid(row=8, column=1, sticky="E", padx=5, pady=5) # global status self.book_reg_num = tkinter.Entry(l_frame, width=30) self.book_reg_num.grid(row=1, column=2, sticky="W", padx=25, pady=5) self.book_name = tkinter.Entry(l_frame, width=30) self.book_name.grid(row=2, column=2, sticky="W", padx=25, pady=5) self.book_author = tkinter.Entry(l_frame, width=30) self.book_author.grid(row=3, column=2, sticky="W", padx=25, pady=5) self.book_price = tkinter.Entry(l_frame, width=30) self.book_price.grid(row=4, column=2, sticky="W", padx=25, pady=5) self.book_isbn = tkinter.Entry(l_frame, width=30) self.book_isbn.grid(row=5, column=2, sticky="W", padx=25, pady=5) r_classes = classes[::-1] # Reverse the list values for display self.book_classe_spbox = tkinter.Spinbox(l_frame, width=28, values=r_classes, textvariable=self.classes_t_v) self.book_classe_spbox.grid(row=6, column=2, sticky="W", padx=25, pady=5) self.user_number = tkinter.Entry(l_frame, width=30) self.user_number.grid(row=8, column=2, sticky="W", padx=25, pady=10) l_frame_right = tkinter.LabelFrame( self.wind, text="Prytanee Militaire de Bembereke") # , bg="red") l_frame_right.grid(row=1, column=2, sticky="W", padx=(55, 15), pady=10) logo_image_path = path.join(path_to_bundle, 'logo_pmb_1.jpg') logo_image = ImageTk.PhotoImage(file=logo_image_path) canevas = tkinter.Canvas(l_frame_right, bg="red", width=200, height=263) canevas.create_image(102, 133, image=logo_image) canevas.grid(row=1, column=1, sticky="W", padx=20) save_btn = tkinter.Button(l_frame_right, text="Enregistrer", command=self.confirm_save) save_btn.grid(row=3, column=1, padx=20, pady=20) # drawing the canvas # logo's gray : #FC902E # logo's blue : #BBE7EA bottom_full_canvas = tkinter.Canvas(self.wind, height=25) bottom_full_canvas.grid(row=3, columnspan=2, column=1, sticky="W", padx=20, pady=20) # bottom_canvas.create_line(0, 2, 780, 2) bottom_canvas = tkinter.Canvas(bottom_full_canvas, bg="#BBE7EA") bottom_canvas.pack(side=tkinter.LEFT, fill=tkinter.Y) # drawing canvas containing search bar search_canvas = tkinter.Canvas(bottom_canvas, bg="#FC902E") search_canvas.pack(fill="x", padx=10, pady=5) self.auth_chbtn = tkinter.Checkbutton(search_canvas, text="Auteur", bg="#FC902E", variable=self.is_author_checked) self.auth_chbtn.grid(row=1, column=1, padx=5, pady=5) self.auth_spbox = tkinter.Spinbox(search_canvas, values=authors) self.auth_spbox.grid(row=1, column=2, padx=5, pady=5) self.price_chbtn = tkinter.Checkbutton(search_canvas, text="Prix", bg="#FC902E", variable=self.is_price_checked) self.price_chbtn.grid(row=1, column=3, padx=5, pady=5) self.price_spbox = tkinter.Spinbox(search_canvas, values=prices, width=10) self.price_spbox.grid(row=1, column=4, padx=5, pady=5) self.user_chbtn = tkinter.Checkbutton(search_canvas, text="Preteur", bg="#FC902E", variable=self.is_user_checked) self.user_chbtn.grid(row=1, column=5, padx=5, pady=5) self.pret_spbox = tkinter.Spinbox(search_canvas, values=users, width=10) self.pret_spbox.grid(row=1, column=6, padx=5, pady=5) self.classe_chbtn = tkinter.Checkbutton( search_canvas, text="Classe", bg="#FC902E", variable=self.is_classe_checked) self.classe_chbtn.grid(row=1, column=7, padx=5, pady=5) self.classe_spbox = tkinter.Spinbox(search_canvas, values=classes, width=10) self.classe_spbox.grid(row=1, column=8, padx=5, pady=5) self.dispo_chbtn = tkinter.Checkbutton(search_canvas, text="Dispo", bg="#FC902E", variable=self.is_dispo_checked) self.dispo_chbtn.grid(row=1, column=9, padx=5, pady=5) search_image_path = path.join(path_to_bundle, 'search_r.png') search_img = ImageTk.PhotoImage(file=search_image_path) self.search_label = tkinter.Label(search_canvas, image=search_img, bg="#FC902E") self.search_label.grid(row=1, column=10, padx=5, pady=5, sticky="news") self.search_label.bind("<Button-1>", func=self.search_books) # drawing canvas for result columns names columns_names_canvas = tkinter.Canvas(bottom_canvas, bg="#FC902E") columns_names_canvas.pack(fill="x", padx=10, pady=5) # Handling it with multiListbox columns_tuple = ('N°', 'NOM', 'AUTEUR', 'PRIX', 'CLASSE', 'DISPO', 'DATE DE PRET', 'UTILISATEUR') self.mlb = TkTreectrl.MultiListbox(columns_names_canvas, columns=columns_tuple, selectcmd=self.on_item_selected) ## self.mlb.grid(column=1, row=1, columnspan=100) self.mlb.pack(fill=tkinter.BOTH, expand=1) self.mlb.focus_set() # adding scrollbar to the canvas containing results and linking it to every listbox scroll_canvas = tkinter.Canvas(bottom_full_canvas, bg="#bbaaaa") scroll_canvas.pack(side=tkinter.RIGHT, fill=tkinter.Y) self.scrollbar = tkinter.Scrollbar(scroll_canvas) self.scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) self.scrollbar.config(command=self.vscrolling) self.mlb.config(yscrollcommand=self.scrollbar.set) self.wind.mainloop()