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 __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 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)
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 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 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, 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 __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): # 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 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()