class Example(Frame): #listBox1 = Listbox() def __init__(self, parent): Frame.__init__(self, parent, background="white") self.parent = parent self.initUI() def initUI(self): self.parent.title("Gurbani Brain Training") self.pack(fill=BOTH, expand=1) QuitButton = Button(self, text ="Quit", command=self.quit) QuitButton.place(x=200, y=200) QuitButton.pack() RandButton = Button(self, text ="Random", command=self.reloadData) RandButton.place(x=200, y=200) self.listBox1 = Listbox() self.listBox1.pack() RandButton.pack() def reloadData(self): (wordlens, words, myline) = dalfunc() for i in range(wordlens): i = Button(self, text = words[i]) i.pack(side=LEFT)
def __init__(self, parent): """Construct a DualBox. :param parent """ Frame.__init__(self) self._select_callback = parent.select_cart # make scroll bar scroll_bar = Scrollbar(self, orient=Tkinter.VERTICAL, command=self._scroll_bar) label1 = Label(self, text=TEXT_LABEL1) label2 = Label(self, text=TEXT_LABEL2) # make two scroll boxes self._list_box1 = Listbox(self, yscrollcommand=scroll_bar.set, exportselection=0, width=40) self._list_box2 = Listbox(self, yscrollcommand=scroll_bar.set, exportselection=0, width=40) # fill the whole screen - pack! scroll_bar.pack(side=Tkinter.RIGHT, fill=Tkinter.Y) label1.pack(side=Tkinter.LEFT, fill=Tkinter.X, expand=True) self._list_box1.pack(side=Tkinter.LEFT, fill=Tkinter.X, expand=True, padx=5, pady=5) self._list_box2.pack(side=Tkinter.LEFT, fill=Tkinter.X, expand=True, padx=5, pady=5) label2.pack(side=Tkinter.LEFT, fill=Tkinter.X, expand=True) # mouse wheel binding self._list_box1.bind("<MouseWheel>", self._scroll_wheel) self._list_box2.bind("<MouseWheel>", self._scroll_wheel) # onclick binding? self._list_box1.bind("<<ListboxSelect>>", self.select) self._list_box2.bind("<<ListboxSelect>>", self.select)
def initUI(self): ''' Create the UI ''' # Name the window self.parent.title("oZip") self.pack(fill=BOTH, expand=1) # 'Add File' button addFileButton = Button(self, text="Add File", command=self.onOpen) addFileButton.place(x=225, y=30) # 'Go' button goButton = Button(self, text="Go", command=self.onClick) goButton.place(x=225, y=100) # 'Quit' button quitButton = Button(self, text="Quit", command=self.quit) quitButton.place(x=225, y=160) # Decompression checkbox self.cb = Checkbutton(self, text="Should decompress", command=self.checkboxClick) self.cb.place(x=20, y=195) # Selected files list lb = Listbox(self) self.lb = lb lb.place(x=20, y=20)
def initUI(self): self.parent.title("Personal Helper") self.pack(fill=BOTH, expand=True) self.columnconfigure(1, weight=1) self.columnconfigure(3, pad=7) self.rowconfigure(3, weight=1) self.rowconfigure(5, pad=7) lbl = Label(self, text="Windows") lbl.grid(sticky=W, pady=4, padx=5) area = Listbox(self) area.grid(row=1, column=0, columnspan=2, rowspan=4, padx=5, sticky=E+W+S+N) abtn = Button(self, text="Activate") abtn.grid(row=1, column=3) cbtn = Button(self, text="Close") cbtn.grid(row=2, column=3, pady=4) hbtn = Button(self, text="Help") hbtn.grid(row=5, column=0, padx=5) obtn = Button(self, text="OK") obtn.grid(row=5, column=3)
def __init__(self, area, *args, **kwargs): Listbox.__init__(self, area, *args, **kwargs) self.area = area self.bind("<Return>", lambda event: self.insert_word()) self.bind("<Escape>", lambda event: self.restore_focus_scheme()) self.do_completion() self.focus_set()
class Writer(Toplevel): def __init__(self, parent): Toplevel.__init__(self) self.parent = parent self.row = 0 self.maxsize(650, 850) self.resizable(0,0) self.scroll = Scrollbar(self) self.scroll.pack(side="right", fill="y", expand=True) self.frame = Listbox(self, yscrollcommand=self.scroll.set) self.scroll.config(command=self.frame.yview) self.frame.pack() self.init_ui() def init_ui(self): name = self.insert_entry_field("Name") events = self.insert_entry_field("Events") location = self.insert_entry_field("Location") statement = self.insert_text_field("Statement") reply1 = self.insert_text_field("Reply1") reply2 = self.insert_text_field("Reply2") reply3 = self.insert_text_field("Reply3") reply4 = self.insert_text_field("Reply4") buttonframe = Frame(self) button1 = Button(buttonframe, text="Ok") button2 = Button(buttonframe, text="Cancel") button2.pack(side="right", anchor="s", padx=5, pady=5) button1.pack(side="right", anchor="s", pady=5) buttonframe.pack(side="bottom", anchor="e") def insert_entry_field(self, txt): frame = Frame(self.frame) frame.grid(row=self.row, column=0) frame.pack(fill="x") label = Label(frame, text=txt, width=6) label.pack(side="left", anchor="n", padx=5, pady=5) entry = Entry(frame) entry.pack(fill="x", padx=5, pady=5, expand=True) entryfield = [frame, label, entry] return entryfield def insert_text_field(self, txt): frame = Frame(self.frame) frame.grid(row=self.row, column=0) frame.pack(fill="x") label = Label(frame, text=txt, width=6) label.pack(side="left", anchor="n", padx=5, pady=5) entry = Text(frame) entry.pack(fill="both", pady=5, padx=5, expand=True) textfield = [frame, label, entry] return textfield
def createWidgets(self): # Create Widgets in order of appearance # This is not necessary, but makes code easier to read # Start with text telling user what to do self.varlabel = Text(self,height=1, width=20) self.varlabel.insert(END,"Which Variable?") # Place widget on the Frame according to a grid self.varlabel.grid(row=0,column=0,sticky=W) # Second text label asking user which units are being used self.unitlabel = Text(self,height=2,width=20) self.unitlabel.insert(END,"Which Units are you \nworking in?") self.unitlabel.grid(row=0,column=1,sticky=W) # Third text label asking user for numerical value self.numlabel = Text(self,height=1, width=20) self.numlabel.insert(END,"Enter Variable Value") self.numlabel.grid(row=0,column=2,sticky=W) # This creates a list of options for the user to select self.inputlist = Listbox(self, height=3, selectmode=SINGLE) # Tuple of choices we're going to put in this list paramlist = ('Distance', 'Time', 'Mass') # Add each item separately for item in paramlist: self.inputlist.insert(END,item) # Add it to the grid self.inputlist.grid(row=1, sticky=W) # Add a unit list which produces a set of unit choices dependent on inputlist self.unitlist = Listbox(self, height=10,selectmode=SINGLE) self.unitlist.grid(row=1,column=1, sticky=W) # Number Entry Box self.inputfield = Entry(self) self.inputfield.insert(END, "0") self.inputfield.grid(row =1, column=2,sticky=W) # Text Output Box self.outputtext = Text(self, height=10) self.outputtext.grid(row=2,column=0,columnspan=3,sticky=W) self.outputtext.insert(END, "WAITING: ") # Create the Quit Button self.quitButton=Button(self,text='Quit',command=self.quit) self.quitButton.grid(row =3, column=0, sticky=W)
def __init_grid(self): # Road list self.__roads_list_box = Listbox(self.__root, selectmode=MULTIPLE, height=27, exportselection=0) for road in self.__roads: self.__roads_list_box.insert('end', road) # Nature list self.__natures_list_box = Listbox(self.__root, selectmode=MULTIPLE, height=6, width=22, exportselection=0) for nature in self.__natures: self.__natures_list_box.insert('end', nature) # Start with all natures selected self.__natures_list_box.select_set(0, END)\ # Days list self.__days_list_box = Listbox(self.__root, selectmode=MULTIPLE, height=8, width=22, exportselection=0) for day in ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']: self.__days_list_box.insert('end', day) # Hours list self.__hours_list_box = Listbox(self.__root, selectmode=MULTIPLE, height=24, width=7, exportselection=0) for hour in range(24): self.__hours_list_box.insert('end', hour) # Check button draw overall self.__draw_overall_var = IntVar() self.__draw_overall_check_box = \ Checkbutton(self.__root, text = "Draw Overall Curve?", variable = self.__draw_overall_var, onvalue = 1, offvalue = 0, height=2, width = 20) # Check button draw nature self.__draw_nature_var = IntVar() self.__draw_nature_check_box = \ Checkbutton(self.__root, text = "Draw Curve Per Nature?", variable = self.__draw_nature_var, onvalue = 1, offvalue = 0, height=2, width = 20) # Check button show data self.__show_data_var = IntVar() self.__show_data_var.set(1) self.__show_data_check_box = \ Checkbutton(self.__root, text = "Show data?", variable = self.__show_data_var, onvalue = 1, offvalue = 0, height=2, width = 20) # Go button self.__go_button = Button(self.__root, text='GO', command = lambda: self.__generate_graph()) # Errors text box self.__error_text_box = Text(self.__root, height=28, width=18, fg="red") self.__error_text_box.tag_config('justified', justify=CENTER)
def set_listTop(Listbox,sMap): try: index=Listbox.curselection()[0] #Check if there is an existing entry in the listbox except IndexError: index=END for i,listbox_entry in enumerate(Listbox.get(0, END)): if listbox_entry == sMap: tkMessageBox.showinfo("Entry", "There is already an entry for this transition.") return Listbox.insert(index, sMap)
def __init__(self, parent, apex=None, **kw): if apex is None: apex = [] kw.setdefault('selectmode', 'extended') Listbox.__init__(self, parent, **kw) self.set_apex(apex) self.bind("<Return>", lambda event: self.expand_selected()) self._init_menu() self._right_click = None
def __init__(self): """Construct an Automation window.""" Frame.__init__(self) # initialize title title = Label(self.master, font=FONT_TITLE, text=TEXT_TITLE) title.grid(row=0, column=0, columnspan=3) # initialize button and state self._state = STATE_STOPPED self._button_text = StringVar() self._button = Button(self.master, textvariable=self._button_text, command=self._update_state, width=16, height=2) self._button.config(bd=2) self._button.grid(row=0, column=3) # initialize the meter self._meter = Meter(self.master, METER_WIDTH, self._get_meter_data) self._meter.grid(row=1, column=0, columnspan=4) # initialize playlist view playlist = Frame(self.master, bd=2, relief=Tkinter.SUNKEN) Label(playlist, font=FONT, anchor=Tkinter.CENTER, width=16, text=TEXT_PLAYLIST_TIME).grid(row=0, column=0) Label(playlist, font=FONT, anchor=Tkinter.CENTER, width=32, text=TEXT_PLAYLIST_TRACK).grid(row=0, column=1) Label(playlist, font=FONT, anchor=Tkinter.CENTER, width=32, text=TEXT_PLAYLIST_ARTIST).grid(row=0, column=2) inner_playlist = Frame(playlist) scroll = Scrollbar(inner_playlist, orient=Tkinter.VERTICAL, command=self._scroll_playlist) self._list_time = Listbox(inner_playlist, selectmode=Tkinter.SINGLE, yscrollcommand=scroll.set, exportselection=0, width=16, height=20) self._list_track = Listbox(inner_playlist, selectmode=Tkinter.SINGLE, yscrollcommand=scroll.set, exportselection=0, width=32, height=20) self._list_artist = Listbox(inner_playlist, selectmode=Tkinter.SINGLE, yscrollcommand=scroll.set, exportselection=0, width=32, height=20) scroll.pack(side=Tkinter.RIGHT, fill=Tkinter.Y) self._list_time.pack(side=Tkinter.LEFT, fill=Tkinter.X, expand=True, padx=2, pady=2) self._list_track.pack(side=Tkinter.LEFT, fill=Tkinter.X, expand=True, padx=2, pady=2) self._list_artist.pack(side=Tkinter.LEFT, fill=Tkinter.X, expand=True, padx=2, pady=2) inner_playlist.grid(row=1, column=0, columnspan=3) playlist.grid(row=4, column=0, columnspan=4) # initialize cart queue self._cart_queue = CartQueue(self._cart_start, self._cart_stop) self._cart_queue.add_tracks() self._update_ui() # begin the event loop self.master.protocol("WM_DELETE_WINDOW", self.master.destroy) self.master.title(TEXT_TITLE) self.master.mainloop()
def addPortfolioList(self, companies): portfolioFrame = Frame(self.stocksFrame) scrollbar = Scrollbar(portfolioFrame, orient="vertical") companyList = Listbox(portfolioFrame, yscrollcommand=scrollbar.set) scrollbar.config(command=companyList.yview) scrollbar.pack(side="right", fill="y") #lb = Listbox(root, width=50, height=20, yscrollcommand=scrollbar.set) companyList.pack(fill=X, expand=0, side=TOP, padx=PAD, pady=PAD) for company in companies: companyList.insert(END,company) portfolioFrame.pack(fill=BOTH, expand=1, side=TOP)
def __init__(self, master=None, MyNotebook=None): Listbox.__init__(self, master) self.MyNotebook = MyNotebook self.current = None self.scrollbar = Scrollbar(master, orient=VERTICAL) self.config(yscrollcommand=self.scrollbar.set) self.scrollbar.config(command=self.yview) #self.scrollbar.pack(side=RIGHT, fill=Y) #self.pack(side=LEFT, fill=BOTH, expand=1) self.bind("<<ListboxSelect>> ", self.list_clicked) self.LayerContents = []
def _init_exampleListbox(self, parent): self._exampleFrame = listframe = Frame(parent) self._exampleFrame.pack(fill='both', side='left', padx=2) self._exampleList_label = Label(self._exampleFrame, font=self._boldfont, text='Examples') self._exampleList_label.pack() self._exampleList = Listbox(self._exampleFrame, selectmode='single', relief='groove', background='white', foreground='#909090', font=self._font, selectforeground='#004040', selectbackground='#c0f0c0') self._exampleList.pack(side='right', fill='both', expand=1) for example in self._examples: self._exampleList.insert('end', (' %s' % example)) self._exampleList.config(height=min(len(self._examples), 25), width=40) # Add a scrollbar if there are more than 25 examples. if len(self._examples) > 25: listscroll = Scrollbar(self._exampleFrame, orient='vertical') self._exampleList.config(yscrollcommand = listscroll.set) listscroll.config(command=self._exampleList.yview) listscroll.pack(side='left', fill='y') # If they select a example, apply it. self._exampleList.bind('<<ListboxSelect>>', self._exampleList_select)
def get_box(self): if not self.dialog: from Tkinter import Tk,Listbox,Button,Scrollbar,X,Y,BOTTOM,RIGHT,HORIZONTAL,VERTICAL,OptionMenu,StringVar self.dialog = Tk() self.dialog.title("TODO") scrollbar = Scrollbar(self.dialog,orient=HORIZONTAL) yscrollbar = Scrollbar(self.dialog,orient=VERTICAL) self.todolist = Listbox(self.dialog,width=50,xscrollcommand=scrollbar.set,yscrollcommand=yscrollbar.set) scrollbar.config(command=self.todolist.xview) scrollbar.pack(side=BOTTOM,fill=X) yscrollbar.config(command=self.todolist.yview) yscrollbar.pack(side=RIGHT,fill=Y) self.todolist.pack(side="left",fill="both",expand=True) cat_list_name = StringVar() cat_list_name.set("Category") btn = Button(self.dialog,text="Refresh",command=self.refresh_list) btn.pack() self.refresh_list() if self.categories: self.cat_list = OptionMenu(self.dialog,cat_list_name,*(self.categories+["ALL","NONE"]),command=self.filter_list) self.cat_list.pack() return (self.dialog,self.todolist)
def _init_grammar(self, parent): # Grammar view. self._prodframe = listframe = Frame(parent) self._prodframe.pack(fill='both', side='left', padx=2) self._prodlist_label = Label(self._prodframe, font=self._boldfont, text='Available Expansions') self._prodlist_label.pack() self._prodlist = Listbox(self._prodframe, selectmode='single', relief='groove', background='white', foreground='#909090', font=self._font, selectforeground='#004040', selectbackground='#c0f0c0') self._prodlist.pack(side='right', fill='both', expand=1) self._productions = list(self._parser.grammar().productions()) for production in self._productions: self._prodlist.insert('end', (' %s' % production)) self._prodlist.config(height=min(len(self._productions), 25)) # Add a scrollbar if there are more than 25 productions. if len(self._productions) > 25: listscroll = Scrollbar(self._prodframe, orient='vertical') self._prodlist.config(yscrollcommand = listscroll.set) listscroll.config(command=self._prodlist.yview) listscroll.pack(side='left', fill='y') # If they select a production, apply it. self._prodlist.bind('<<ListboxSelect>>', self._prodlist_select)
def __init__(self, master): self.master = master self.master.wm_title('PEP8 checker') self.master.resizable(False, True) self.frame = Frame(master) self.frame.pack(fill=BOTH, expand=1) home_dir = expanduser("~") self.directory = StringVar(value=home_dir) directory_frame = Frame(self.frame) directory_frame.grid() self.frame.grid_rowconfigure(2, weight=1) self.entry_directory = Entry(directory_frame, textvariable=self.directory) self.entry_directory.pack(anchor=W, side=LEFT) self.select_directory = Button(directory_frame, text="Select directory to scan", command=self.select_directory) self.select_directory.pack(anchor=E, side=RIGHT) self.run_button = Button(self.frame, text='Run PEP8!', command=self.run_pep) self.run_button.grid(sticky=W + E) self.errors_list = Listbox(self.frame) self.errors_list.grid(sticky=W + E) self.status_label = Label(self.frame)
def _init_exampleListbox(self, parent): self._exampleFrame = listframe = Frame(parent) self._exampleFrame.pack(fill="both", side="left", padx=2) self._exampleList_label = Label(self._exampleFrame, font=self._boldfont, text="Examples") self._exampleList_label.pack() self._exampleList = Listbox( self._exampleFrame, selectmode="single", relief="groove", background="white", foreground="#909090", font=self._font, selectforeground="#004040", selectbackground="#c0f0c0", ) self._exampleList.pack(side="right", fill="both", expand=1) for example in self._examples: self._exampleList.insert("end", (" %s" % example)) self._exampleList.config(height=min(len(self._examples), 25), width=40) # Add a scrollbar if there are more than 25 examples. if len(self._examples) > 25: listscroll = Scrollbar(self._exampleFrame, orient="vertical") self._exampleList.config(yscrollcommand=listscroll.set) listscroll.config(command=self._exampleList.yview) listscroll.pack(side="left", fill="y") # If they select a example, apply it. self._exampleList.bind("<<ListboxSelect>>", self._exampleList_select)
def _init_readingListbox(self, parent): self._readingFrame = listframe = Frame(parent) self._readingFrame.pack(fill="both", side="left", padx=2) self._readingList_label = Label(self._readingFrame, font=self._boldfont, text="Readings") self._readingList_label.pack() self._readingList = Listbox( self._readingFrame, selectmode="single", relief="groove", background="white", foreground="#909090", font=self._font, selectforeground="#004040", selectbackground="#c0f0c0", ) self._readingList.pack(side="right", fill="both", expand=1) # Add a scrollbar if there are more than 25 examples. listscroll = Scrollbar(self._readingFrame, orient="vertical") self._readingList.config(yscrollcommand=listscroll.set) listscroll.config(command=self._readingList.yview) listscroll.pack(side="right", fill="y") self._populate_readingListbox()
class SelectionDialog(_TkDialog): def __init__(self, message, values): _TkDialog.__init__(self, message, values) def _create_selector(self, parent, values): self._listbox = Listbox(parent) for item in values: self._listbox.insert(END, item) return self._listbox def _validate_value(self): return bool(self._listbox.curselection()) def _get_value(self): return self._listbox.get(self._listbox.curselection())
def _init_grammar(self, parent): # Grammar view. self._prodframe = listframe = Frame(parent) self._prodframe.pack(fill="both", side="left", padx=2) self._prodlist_label = Label(self._prodframe, font=self._boldfont, text="Available Expansions") self._prodlist_label.pack() self._prodlist = Listbox( self._prodframe, selectmode="single", relief="groove", background="white", foreground="#909090", font=self._font, selectforeground="#004040", selectbackground="#c0f0c0", ) self._prodlist.pack(side="right", fill="both", expand=1) self._productions = list(self._parser.grammar().productions()) for production in self._productions: self._prodlist.insert("end", (" %s" % production)) self._prodlist.config(height=min(len(self._productions), 25)) # Add a scrollbar if there are more than 25 productions. if len(self._productions) > 25: listscroll = Scrollbar(self._prodframe, orient="vertical") self._prodlist.config(yscrollcommand=listscroll.set) listscroll.config(command=self._prodlist.yview) listscroll.pack(side="left", fill="y") # If they select a production, apply it. self._prodlist.bind("<<ListboxSelect>>", self._prodlist_select)
def __init__(self, parent, controller): Frame.__init__(self, parent) self.selected = ""; self.controller = controller label = Label(self, text="Select server", font=TITLE_FONT, justify=CENTER, anchor=CENTER) label.pack(side="top", fill="x", pady=10) self.button1 = Button(self, text="Next",state="disabled", command=self.callback_choose) button2 = Button(self, text="Refresh", command=self.callback_refresh) button3 = Button(self, text="Back", command=self.callback_start) scrollbar = Scrollbar(self) self.mylist = Listbox(self, width=100, yscrollcommand = scrollbar.set ) self.mylist.bind("<Double-Button-1>", self.twoClick) self.button1.pack() button2.pack() button3.pack() # create list with a scroolbar scrollbar.pack( side = "right", fill="y" ) self.mylist.pack( side = "top", fill = "x", ipadx=20, ipady=20, padx=20, pady=20 ) scrollbar.config( command = self.mylist.yview ) # create a progress bar label2 = Label(self, text="Refresh progress bar", justify='center', anchor='center') label2.pack(side="top", fill="x") self.bar_lenght = 200 self.pb = Progressbar(self, length=self.bar_lenght, mode='determinate') self.pb.pack(side="top", anchor='center', ipadx=20, ipady=20, padx=10, pady=10) self.pb.config(value=0)
def data(self): self.message = Label(self.frame, text="Recapitulatif du sismogramme").grid(row=0) global X X=read(textPath.get()) self.recap = Listbox(self.frame, height = 15, width = 50) self.recap.insert(1, "network: {}\n".format(X[0].stats.network)) self.recap.insert(2, "station: {}\n".format(X[0].stats.station)) self.recap.insert(3, "location: {}\n".format(X[0].stats.location)) self.recap.insert(4, "channel: {}\n".format(X[0].stats.channel)) self.recap.insert(5, "start time: {}\n".format(X[0].stats.starttime)) self.recap.insert(6, "end time: {}\n".format(X[0].stats.endtime)) self.recap.insert(7, "sampling rate: {}\n".format(X[0].stats.sampling_rate)) self.recap.insert(8, "delta: {}\n".format(X[0].stats.delta)) self.recap.insert(9, "number points: {}\n".format(X[0].stats.npts)) self.recap.insert(10, "calibration: {}\n".format(X[0].stats.calib)) self.recap.insert(11, "event latitude: {}\n".format(X[0].stats.sac.evla)) self.recap.insert(12, "event longitude: {}\n".format(X[0].stats.sac.evlo)) self.recap.insert(13, "event depth: {}\n".format(X[0].stats.sac.evdp)) self.recap.insert(14, "station latitude: {}\n".format(X[0].stats.sac.stla)) self.recap.insert(15, "station longitude: {}\n".format(X[0].stats.sac.stlo)) self.recap.grid(row=0)
def setVersionList(self, list=[]): self.versionLabel = Label(self, text="Select Version", font=TITLE_FONT) self.versionLabel.grid(row=1, column=1) self.versionList = Listbox(self, exportselection=0) for l in list: self.versionList.insert(END, l) self.versionList.grid(row=2, column=1)
def __init__(self, root=None): self.root = root or Tk() self.root.title('Pylint') top_frame = Frame(self.root) res_frame = Frame(self.root) btn_frame = Frame(self.root) top_frame.pack(side=TOP, fill=X) res_frame.pack(side=TOP, fill=BOTH, expand=True) btn_frame.pack(side=TOP, fill=X) Label(top_frame, text='Module or package').pack(side=LEFT) self.txtModule = Entry(top_frame, background='white') self.txtModule.bind('<Return>', self.run_lint) self.txtModule.pack(side=LEFT, expand=True, fill=X) Button(top_frame, text='Run', command=self.run_lint).pack(side=LEFT) scrl = Scrollbar(res_frame) self.results = Listbox(res_frame, background='white', font='fixedsys', selectmode='browse', yscrollcommand=scrl.set) scrl.configure(command=self.results.yview) self.results.pack(side=LEFT, expand=True, fill=BOTH) scrl.pack(side=RIGHT, fill=Y) Button(btn_frame, text='Quit', command=self.quit).pack(side=BOTTOM) #self.root.bind('<ctrl-q>', self.quit) self.txtModule.focus_set()
def setEngList(self, list=[]): self.engLabel = Label(self, text="Build Type", font=TITLE_FONT) self.engLabel.grid(row=1, column=3) self.engList = Listbox(self, exportselection=0) for l in list: self.engList.insert(END, l) self.engList.grid(row=2, column=3)
def create_components(self, parent): Label(parent, text=self._message).pack(fill=BOTH) self._listbox = Listbox(parent) self._listbox.pack(fill=BOTH) for item in self._values: self._listbox.insert(END, item) return self._listbox
def __init__(self, list_=None, master=None, title=None): '''Must have master, title is optional, li is too.''' self.master = master if self.master is not None: self.top = Toplevel(self.master) else: return self.v = None if list_ is None or not isinstance(list_, list): self.list = [] else: self.list = list_[:] self.top.transient(self.master) self.top.grab_set() self.top.bind("<Return>", self._choose) self.top.bind("<Escape>", self._cancel) if title: self.top.title(title) lf = Frame(self.top) #Sets up the list. lf.pack(side=TOP) scroll_bar = Scrollbar(lf) scroll_bar.pack(side=RIGHT, fill=Y) self.lb = Listbox(lf, selectmode=SINGLE) self.lb.pack(side=LEFT, fill=Y) scroll_bar.config(command=self.lb.yview) self.lb.config(yscrollcommand=scroll_bar.set) self.list.sort() for item in self.list: self.lb.insert(END, item) #Inserts items into the list. bf = Frame(self.top) bf.pack(side=BOTTOM) Button(bf, text="Select", command=self._choose).pack(side=LEFT) Button(bf, text="New", command=self._new).pack(side=LEFT) Button(bf, text="Cancel", command=self._cancel).pack(side=LEFT)
def setDeviceList(self, list=[]): self.deviceLabel = Label(self, text="Select Device", font=TITLE_FONT) self.deviceLabel.grid(row=1, column=0) self.deviceList = Listbox(self, exportselection=0) for l in list: self.deviceList.insert(END, l) self.deviceList.grid(row=2, column=0)
class ShiftReduceApp(object): """ A graphical tool for exploring the shift-reduce parser. The tool displays the parser's stack and the remaining text, and allows the user to control the parser's operation. In particular, the user can shift tokens onto the stack, and can perform reductions on the top elements of the stack. A "step" button simply steps through the parsing process, performing the operations that ``nltk.parse.ShiftReduceParser`` would use. """ def __init__(self, grammar, sent, trace=0): self._sent = sent self._parser = SteppingShiftReduceParser(grammar, trace) # Set up the main window. self._top = Tk() self._top.title('Shift Reduce Parser Application') # Animations. animating_lock is a lock to prevent the demo # from performing new operations while it's animating. self._animating_lock = 0 self._animate = IntVar(self._top) self._animate.set(10) # = medium # The user can hide the grammar. self._show_grammar = IntVar(self._top) self._show_grammar.set(1) # Initialize fonts. self._init_fonts(self._top) # Set up key bindings. self._init_bindings() # Create the basic frames. self._init_menubar(self._top) self._init_buttons(self._top) self._init_feedback(self._top) self._init_grammar(self._top) self._init_canvas(self._top) # A popup menu for reducing. self._reduce_menu = Menu(self._canvas, tearoff=0) # Reset the demo, and set the feedback frame to empty. self.reset() self._lastoper1['text'] = '' ######################################### ## Initialization Helpers ######################################### def _init_fonts(self, root): # See: <http://www.astro.washington.edu/owen/ROTKFolklore.html> self._sysfont = tkFont.Font(font=Button()["font"]) root.option_add("*Font", self._sysfont) # TWhat's our font size (default=same as sysfont) self._size = IntVar(root) self._size.set(self._sysfont.cget('size')) self._boldfont = tkFont.Font(family='helvetica', weight='bold', size=self._size.get()) self._font = tkFont.Font(family='helvetica', size=self._size.get()) def _init_grammar(self, parent): # Grammar view. self._prodframe = listframe = Frame(parent) self._prodframe.pack(fill='both', side='left', padx=2) self._prodlist_label = Label(self._prodframe, font=self._boldfont, text='Available Reductions') self._prodlist_label.pack() self._prodlist = Listbox(self._prodframe, selectmode='single', relief='groove', background='white', foreground='#909090', font=self._font, selectforeground='#004040', selectbackground='#c0f0c0') self._prodlist.pack(side='right', fill='both', expand=1) self._productions = list(self._parser.grammar().productions()) for production in self._productions: self._prodlist.insert('end', (' %s' % production)) self._prodlist.config(height=min(len(self._productions), 25)) # Add a scrollbar if there are more than 25 productions. if 1: #len(self._productions) > 25: listscroll = Scrollbar(self._prodframe, orient='vertical') self._prodlist.config(yscrollcommand=listscroll.set) listscroll.config(command=self._prodlist.yview) listscroll.pack(side='left', fill='y') # If they select a production, apply it. self._prodlist.bind('<<ListboxSelect>>', self._prodlist_select) # When they hover over a production, highlight it. self._hover = -1 self._prodlist.bind('<Motion>', self._highlight_hover) self._prodlist.bind('<Leave>', self._clear_hover) def _init_bindings(self): # Quit self._top.bind('<Control-q>', self.destroy) self._top.bind('<Control-x>', self.destroy) self._top.bind('<Alt-q>', self.destroy) self._top.bind('<Alt-x>', self.destroy) # Ops (step, shift, reduce, undo) self._top.bind('<space>', self.step) self._top.bind('<s>', self.shift) self._top.bind('<Alt-s>', self.shift) self._top.bind('<Control-s>', self.shift) self._top.bind('<r>', self.reduce) self._top.bind('<Alt-r>', self.reduce) self._top.bind('<Control-r>', self.reduce) self._top.bind('<Delete>', self.reset) self._top.bind('<u>', self.undo) self._top.bind('<Alt-u>', self.undo) self._top.bind('<Control-u>', self.undo) self._top.bind('<Control-z>', self.undo) self._top.bind('<BackSpace>', self.undo) # Misc self._top.bind('<Control-p>', self.postscript) self._top.bind('<Control-h>', self.help) self._top.bind('<F1>', self.help) self._top.bind('<Control-g>', self.edit_grammar) self._top.bind('<Control-t>', self.edit_sentence) # Animation speed control self._top.bind('-', lambda e, a=self._animate: a.set(20)) self._top.bind('=', lambda e, a=self._animate: a.set(10)) self._top.bind('+', lambda e, a=self._animate: a.set(4)) def _init_buttons(self, parent): # Set up the frames. self._buttonframe = buttonframe = Frame(parent) buttonframe.pack(fill='none', side='bottom') Button( buttonframe, text='Step', background='#90c0d0', foreground='black', command=self.step, ).pack(side='left') Button(buttonframe, text='Shift', underline=0, background='#90f090', foreground='black', command=self.shift).pack(side='left') Button(buttonframe, text='Reduce', underline=0, background='#90f090', foreground='black', command=self.reduce).pack(side='left') Button(buttonframe, text='Undo', underline=0, background='#f0a0a0', foreground='black', command=self.undo).pack(side='left') def _init_menubar(self, parent): menubar = Menu(parent) filemenu = Menu(menubar, tearoff=0) filemenu.add_command(label='Reset Parser', underline=0, command=self.reset, accelerator='Del') filemenu.add_command(label='Print to Postscript', underline=0, command=self.postscript, accelerator='Ctrl-p') filemenu.add_command(label='Exit', underline=1, command=self.destroy, accelerator='Ctrl-x') menubar.add_cascade(label='File', underline=0, menu=filemenu) editmenu = Menu(menubar, tearoff=0) editmenu.add_command(label='Edit Grammar', underline=5, command=self.edit_grammar, accelerator='Ctrl-g') editmenu.add_command(label='Edit Text', underline=5, command=self.edit_sentence, accelerator='Ctrl-t') menubar.add_cascade(label='Edit', underline=0, menu=editmenu) rulemenu = Menu(menubar, tearoff=0) rulemenu.add_command(label='Step', underline=1, command=self.step, accelerator='Space') rulemenu.add_separator() rulemenu.add_command(label='Shift', underline=0, command=self.shift, accelerator='Ctrl-s') rulemenu.add_command(label='Reduce', underline=0, command=self.reduce, accelerator='Ctrl-r') rulemenu.add_separator() rulemenu.add_command(label='Undo', underline=0, command=self.undo, accelerator='Ctrl-u') menubar.add_cascade(label='Apply', underline=0, menu=rulemenu) viewmenu = Menu(menubar, tearoff=0) viewmenu.add_checkbutton(label="Show Grammar", underline=0, variable=self._show_grammar, command=self._toggle_grammar) viewmenu.add_separator() viewmenu.add_radiobutton(label='Tiny', variable=self._size, underline=0, value=10, command=self.resize) viewmenu.add_radiobutton(label='Small', variable=self._size, underline=0, value=12, command=self.resize) viewmenu.add_radiobutton(label='Medium', variable=self._size, underline=0, value=14, command=self.resize) viewmenu.add_radiobutton(label='Large', variable=self._size, underline=0, value=18, command=self.resize) viewmenu.add_radiobutton(label='Huge', variable=self._size, underline=0, value=24, command=self.resize) menubar.add_cascade(label='View', underline=0, menu=viewmenu) animatemenu = Menu(menubar, tearoff=0) animatemenu.add_radiobutton(label="No Animation", underline=0, variable=self._animate, value=0) animatemenu.add_radiobutton(label="Slow Animation", underline=0, variable=self._animate, value=20, accelerator='-') animatemenu.add_radiobutton(label="Normal Animation", underline=0, variable=self._animate, value=10, accelerator='=') animatemenu.add_radiobutton(label="Fast Animation", underline=0, variable=self._animate, value=4, accelerator='+') menubar.add_cascade(label="Animate", underline=1, menu=animatemenu) helpmenu = Menu(menubar, tearoff=0) helpmenu.add_command(label='About', underline=0, command=self.about) helpmenu.add_command(label='Instructions', underline=0, command=self.help, accelerator='F1') menubar.add_cascade(label='Help', underline=0, menu=helpmenu) parent.config(menu=menubar) def _init_feedback(self, parent): self._feedbackframe = feedbackframe = Frame(parent) feedbackframe.pack(fill='x', side='bottom', padx=3, pady=3) self._lastoper_label = Label(feedbackframe, text='Last Operation:', font=self._font) self._lastoper_label.pack(side='left') lastoperframe = Frame(feedbackframe, relief='sunken', border=1) lastoperframe.pack(fill='x', side='right', expand=1, padx=5) self._lastoper1 = Label(lastoperframe, foreground='#007070', background='#f0f0f0', font=self._font) self._lastoper2 = Label(lastoperframe, anchor='w', width=30, foreground='#004040', background='#f0f0f0', font=self._font) self._lastoper1.pack(side='left') self._lastoper2.pack(side='left', fill='x', expand=1) def _init_canvas(self, parent): self._cframe = CanvasFrame(parent, background='white', width=525, closeenough=10, border=2, relief='sunken') self._cframe.pack(expand=1, fill='both', side='top', pady=2) canvas = self._canvas = self._cframe.canvas() self._stackwidgets = [] self._rtextwidgets = [] self._titlebar = canvas.create_rectangle(0, 0, 0, 0, fill='#c0f0f0', outline='black') self._exprline = canvas.create_line(0, 0, 0, 0, dash='.') self._stacktop = canvas.create_line(0, 0, 0, 0, fill='#408080') size = self._size.get() + 4 self._stacklabel = TextWidget(canvas, 'Stack', color='#004040', font=self._boldfont) self._rtextlabel = TextWidget(canvas, 'Remaining Text', color='#004040', font=self._boldfont) self._cframe.add_widget(self._stacklabel) self._cframe.add_widget(self._rtextlabel) ######################################### ## Main draw procedure ######################################### def _redraw(self): scrollregion = self._canvas['scrollregion'].split() (cx1, cy1, cx2, cy2) = [int(c) for c in scrollregion] # Delete the old stack & rtext widgets. for stackwidget in self._stackwidgets: self._cframe.destroy_widget(stackwidget) self._stackwidgets = [] for rtextwidget in self._rtextwidgets: self._cframe.destroy_widget(rtextwidget) self._rtextwidgets = [] # Position the titlebar & exprline (x1, y1, x2, y2) = self._stacklabel.bbox() y = y2 - y1 + 10 self._canvas.coords(self._titlebar, -5000, 0, 5000, y - 4) self._canvas.coords(self._exprline, 0, y * 2 - 10, 5000, y * 2 - 10) # Position the titlebar labels.. (x1, y1, x2, y2) = self._stacklabel.bbox() self._stacklabel.move(5 - x1, 3 - y1) (x1, y1, x2, y2) = self._rtextlabel.bbox() self._rtextlabel.move(cx2 - x2 - 5, 3 - y1) # Draw the stack. stackx = 5 for tok in self._parser.stack(): if isinstance(tok, Tree): attribs = { 'tree_color': '#4080a0', 'tree_width': 2, 'node_font': self._boldfont, 'node_color': '#006060', 'leaf_color': '#006060', 'leaf_font': self._font } widget = tree_to_treesegment(self._canvas, tok, **attribs) widget.node()['color'] = '#000000' else: widget = TextWidget(self._canvas, tok, color='#000000', font=self._font) widget.bind_click(self._popup_reduce) self._stackwidgets.append(widget) self._cframe.add_widget(widget, stackx, y) stackx = widget.bbox()[2] + 10 # Draw the remaining text. rtextwidth = 0 for tok in self._parser.remaining_text(): widget = TextWidget(self._canvas, tok, color='#000000', font=self._font) self._rtextwidgets.append(widget) self._cframe.add_widget(widget, rtextwidth, y) rtextwidth = widget.bbox()[2] + 4 # Allow enough room to shift the next token (for animations) if len(self._rtextwidgets) > 0: stackx += self._rtextwidgets[0].width() # Move the remaining text to the correct location (keep it # right-justified, when possible); and move the remaining text # label, if necessary. stackx = max(stackx, self._stacklabel.width() + 25) rlabelwidth = self._rtextlabel.width() + 10 if stackx >= cx2 - max(rtextwidth, rlabelwidth): cx2 = stackx + max(rtextwidth, rlabelwidth) for rtextwidget in self._rtextwidgets: rtextwidget.move(4 + cx2 - rtextwidth, 0) self._rtextlabel.move(cx2 - self._rtextlabel.bbox()[2] - 5, 0) midx = (stackx + cx2 - max(rtextwidth, rlabelwidth)) / 2 self._canvas.coords(self._stacktop, midx, 0, midx, 5000) (x1, y1, x2, y2) = self._stacklabel.bbox() # Set up binding to allow them to shift a token by dragging it. if len(self._rtextwidgets) > 0: def drag_shift(widget, midx=midx, self=self): if widget.bbox()[0] < midx: self.shift() else: self._redraw() self._rtextwidgets[0].bind_drag(drag_shift) self._rtextwidgets[0].bind_click(self.shift) # Draw the stack top. self._highlight_productions() def _draw_stack_top(self, widget): # hack.. midx = widget.bbox()[2] + 50 self._canvas.coords(self._stacktop, midx, 0, midx, 5000) def _highlight_productions(self): # Highlight the productions that can be reduced. self._prodlist.selection_clear(0, 'end') for prod in self._parser.reducible_productions(): index = self._productions.index(prod) self._prodlist.selection_set(index) ######################################### ## Button Callbacks ######################################### def destroy(self, *e): if self._top is None: return self._top.destroy() self._top = None def reset(self, *e): self._parser.initialize(self._sent) self._lastoper1['text'] = 'Reset App' self._lastoper2['text'] = '' self._redraw() def step(self, *e): if self.reduce(): return 1 elif self.shift(): return 1 else: if len(self._parser.parses()) > 0: self._lastoper1['text'] = 'Finished:' self._lastoper2['text'] = 'Success' else: self._lastoper1['text'] = 'Finished:' self._lastoper2['text'] = 'Failure' def shift(self, *e): if self._animating_lock: return if self._parser.shift(): tok = self._parser.stack()[-1] self._lastoper1['text'] = 'Shift:' self._lastoper2['text'] = '%r' % tok if self._animate.get(): self._animate_shift() else: self._redraw() return 1 return 0 def reduce(self, *e): if self._animating_lock: return production = self._parser.reduce() if production: self._lastoper1['text'] = 'Reduce:' self._lastoper2['text'] = '%s' % production if self._animate.get(): self._animate_reduce() else: self._redraw() return production def undo(self, *e): if self._animating_lock: return if self._parser.undo(): self._redraw() def postscript(self, *e): self._cframe.print_to_file() def mainloop(self, *args, **kwargs): """ Enter the Tkinter mainloop. This function must be called if this demo is created from a non-interactive program (e.g. from a secript); otherwise, the demo will close as soon as the script completes. """ if in_idle(): return self._top.mainloop(*args, **kwargs) ######################################### ## Menubar callbacks ######################################### def resize(self, size=None): if size is not None: self._size.set(size) size = self._size.get() self._font.configure(size=-(abs(size))) self._boldfont.configure(size=-(abs(size))) self._sysfont.configure(size=-(abs(size))) #self._stacklabel['font'] = ('helvetica', -size-4, 'bold') #self._rtextlabel['font'] = ('helvetica', -size-4, 'bold') #self._lastoper_label['font'] = ('helvetica', -size) #self._lastoper1['font'] = ('helvetica', -size) #self._lastoper2['font'] = ('helvetica', -size) #self._prodlist['font'] = ('helvetica', -size) #self._prodlist_label['font'] = ('helvetica', -size-2, 'bold') self._redraw() def help(self, *e): # The default font's not very legible; try using 'fixed' instead. try: ShowText(self._top, 'Help: Shift-Reduce Parser Application', (__doc__ or '').strip(), width=75, font='fixed') except: ShowText(self._top, 'Help: Shift-Reduce Parser Application', (__doc__ or '').strip(), width=75) def about(self, *e): ABOUT = ("NLTK Shift-Reduce Parser Application\n" + "Written by Edward Loper") TITLE = 'About: Shift-Reduce Parser Application' try: from tkMessageBox import Message Message(message=ABOUT, title=TITLE).show() except: ShowText(self._top, TITLE, ABOUT) def edit_grammar(self, *e): CFGEditor(self._top, self._parser.grammar(), self.set_grammar) def set_grammar(self, grammar): self._parser.set_grammar(grammar) self._productions = list(grammar.productions()) self._prodlist.delete(0, 'end') for production in self._productions: self._prodlist.insert('end', (' %s' % production)) def edit_sentence(self, *e): sentence = string.join(self._sent) title = 'Edit Text' instr = 'Enter a new sentence to parse.' EntryDialog(self._top, sentence, instr, self.set_sentence, title) def set_sentence(self, sent): self._sent = sent.split() #[XX] use tagged? self.reset() ######################################### ## Reduce Production Selection ######################################### def _toggle_grammar(self, *e): if self._show_grammar.get(): self._prodframe.pack(fill='both', side='left', padx=2, after=self._feedbackframe) self._lastoper1['text'] = 'Show Grammar' else: self._prodframe.pack_forget() self._lastoper1['text'] = 'Hide Grammar' self._lastoper2['text'] = '' def _prodlist_select(self, event): selection = self._prodlist.curselection() if len(selection) != 1: return index = int(selection[0]) production = self._parser.reduce(self._productions[index]) if production: self._lastoper1['text'] = 'Reduce:' self._lastoper2['text'] = '%s' % production if self._animate.get(): self._animate_reduce() else: self._redraw() else: # Reset the production selections. self._prodlist.selection_clear(0, 'end') for prod in self._parser.reducible_productions(): index = self._productions.index(prod) self._prodlist.selection_set(index) def _popup_reduce(self, widget): # Remove old commands. productions = self._parser.reducible_productions() if len(productions) == 0: return self._reduce_menu.delete(0, 'end') for production in productions: self._reduce_menu.add_command(label=str(production), command=self.reduce) self._reduce_menu.post(self._canvas.winfo_pointerx(), self._canvas.winfo_pointery()) ######################################### ## Animations ######################################### def _animate_shift(self): # What widget are we shifting? widget = self._rtextwidgets[0] # Where are we shifting from & to? right = widget.bbox()[0] if len(self._stackwidgets) == 0: left = 5 else: left = self._stackwidgets[-1].bbox()[2] + 10 # Start animating. dt = self._animate.get() dx = (left - right) * 1.0 / dt self._animate_shift_frame(dt, widget, dx) def _animate_shift_frame(self, frame, widget, dx): if frame > 0: self._animating_lock = 1 widget.move(dx, 0) self._top.after(10, self._animate_shift_frame, frame - 1, widget, dx) else: # but: stacktop?? # Shift the widget to the stack. del self._rtextwidgets[0] self._stackwidgets.append(widget) self._animating_lock = 0 # Display the available productions. self._draw_stack_top(widget) self._highlight_productions() def _animate_reduce(self): # What widgets are we shifting? numwidgets = len(self._parser.stack()[-1]) # number of children widgets = self._stackwidgets[-numwidgets:] # How far are we moving? if isinstance(widgets[0], TreeSegmentWidget): ydist = 15 + widgets[0].node().height() else: ydist = 15 + widgets[0].height() # Start animating. dt = self._animate.get() dy = ydist * 2.0 / dt self._animate_reduce_frame(dt / 2, widgets, dy) def _animate_reduce_frame(self, frame, widgets, dy): if frame > 0: self._animating_lock = 1 for widget in widgets: widget.move(0, dy) self._top.after(10, self._animate_reduce_frame, frame - 1, widgets, dy) else: del self._stackwidgets[-len(widgets):] for widget in widgets: self._cframe.remove_widget(widget) tok = self._parser.stack()[-1] if not isinstance(tok, Tree): raise ValueError() label = TextWidget(self._canvas, str(tok.node), color='#006060', font=self._boldfont) widget = TreeSegmentWidget(self._canvas, label, widgets, width=2) (x1, y1, x2, y2) = self._stacklabel.bbox() y = y2 - y1 + 10 if not self._stackwidgets: x = 5 else: x = self._stackwidgets[-1].bbox()[2] + 10 self._cframe.add_widget(widget, x, y) self._stackwidgets.append(widget) # Display the available productions. self._draw_stack_top(widget) self._highlight_productions() # # Delete the old widgets.. # del self._stackwidgets[-len(widgets):] # for widget in widgets: # self._cframe.destroy_widget(widget) # # # Make a new one. # tok = self._parser.stack()[-1] # if isinstance(tok, Tree): # attribs = {'tree_color': '#4080a0', 'tree_width': 2, # 'node_font': bold, 'node_color': '#006060', # 'leaf_color': '#006060', 'leaf_font':self._font} # widget = tree_to_treesegment(self._canvas, tok.type(), # **attribs) # widget.node()['color'] = '#000000' # else: # widget = TextWidget(self._canvas, tok.type(), # color='#000000', font=self._font) # widget.bind_click(self._popup_reduce) # (x1, y1, x2, y2) = self._stacklabel.bbox() # y = y2-y1+10 # if not self._stackwidgets: x = 5 # else: x = self._stackwidgets[-1].bbox()[2] + 10 # self._cframe.add_widget(widget, x, y) # self._stackwidgets.append(widget) #self._redraw() self._animating_lock = 0 ######################################### ## Hovering. ######################################### def _highlight_hover(self, event): # What production are we hovering over? index = self._prodlist.nearest(event.y) if self._hover == index: return # Clear any previous hover highlighting. self._clear_hover() # If the production corresponds to an available reduction, # highlight the stack. selection = [int(s) for s in self._prodlist.curselection()] if index in selection: rhslen = len(self._productions[index].rhs()) for stackwidget in self._stackwidgets[-rhslen:]: if isinstance(stackwidget, TreeSegmentWidget): stackwidget.node()['color'] = '#00a000' else: stackwidget['color'] = '#00a000' # Remember what production we're hovering over. self._hover = index def _clear_hover(self, *event): # Clear any previous hover highlighting. if self._hover == -1: return self._hover = -1 for stackwidget in self._stackwidgets: if isinstance(stackwidget, TreeSegmentWidget): stackwidget.node()['color'] = 'black' else: stackwidget['color'] = 'black'
def create_widgets(self, *args): # Calculate button self.imgtitle = ImageTk.PhotoImage( Image.open( 'C:\\Users\\Chris\\PycharmProjects\\untitled\\snapsrebuild.png' )) self.lab = tk.Label(image=self.imgtitle) self.lab.grid(row=0, column=3, padx=20, pady=20) # Heading Labels # Consumable Label self.consume_label = tk.Label(self.root, text='Items:', font=('Arial', 12, 'bold')) self.consume_label.grid(row=1, column=0, columnspan=3, padx=50) # Rebuild List Center Text self.consume_label = tk.Label(self.root, text='Rebuild List', font=('Arial', 12, 'bold')) self.consume_label.grid(row=1, column=3, padx=50) # Armour Text self.consume_label = tk.Label(self.root, text='items:', font=('Arial', 12, 'bold')) self.consume_label.grid(row=1, column=5, columnspan=3, padx=50) ####################################################################################################################### # Left Side buttons and input ####################################################################################################################### # 111111 # Check Button Number One self.is_checked = IntVar() self.option_yes = tk.Checkbutton(self.root, text="", onvalue=1, offvalue=0, variable=self.is_checked, command=self.callback) self.option_yes.grid(row=2, column=0, padx=15) # Entry Label To the right of the checkbox self.entry_0 = tk.StringVar() self.combobox_autocomplete = Combobox_Autocomplete( self.root, list_of_items, textvariable=self.entry_0, highlightthickness=1) self.combobox_autocomplete.grid(row=2, column=1) # Insert button self.insert_butt = tk.Button(self.root, text='Insert', command=lambda: self.commando()) self.insert_butt.grid(row=2, column=2, padx=10) ######################################################################################################################## # Check Button Number Two 22222 self.is_checked1 = IntVar() self.option_yes1 = tk.Checkbutton(self.root, text="", onvalue=1, offvalue=0, variable=self.is_checked1, command=self.callback1) self.option_yes1.grid(row=3, column=0, padx=15) # Entry Label To the right of the checkbox self.entry_1 = tk.StringVar() self.combobox_autocomplete1 = Combobox_Autocomplete( self.root, list_of_items, textvariable=self.entry_1, highlightthickness=1) self.combobox_autocomplete1.grid(row=3, column=1) # Insert button self.insert_butt1 = tk.Button(self.root, text='Insert', command=lambda: self.commando1()) self.insert_butt1.grid(row=3, column=2, padx=10) ######################################################################################################################## # Check Button Number Three 3333333 self.is_checked2 = IntVar() self.option_yes2 = tk.Checkbutton(self.root, text="", onvalue=1, offvalue=0, variable=self.is_checked2, command=self.callback2) self.option_yes2.grid(row=4, column=0, padx=15) # Entry Label To the right of the checkbox self.entry_2 = tk.StringVar() self.combobox_autocomplete2 = Combobox_Autocomplete( self.root, list_of_items, textvariable=self.entry_2, highlightthickness=1) self.combobox_autocomplete2.grid(row=4, column=1) # Insert button self.insert_butt2 = tk.Button(self.root, text='Insert', command=lambda: self.commando2()) self.insert_butt2.grid(row=4, column=2, padx=10) ######################################################################################################################## # Check Button Number Four 4444444 self.is_checked3 = IntVar() self.option_yes3 = tk.Checkbutton(self.root, text="", onvalue=1, offvalue=0, variable=self.is_checked3, command=self.callback3) self.option_yes3.grid(row=5, column=0, padx=15) # Entry Label To the right of the checkbox self.entry_3 = tk.StringVar() self.combobox_autocomplete3 = Combobox_Autocomplete( self.root, list_of_items, textvariable=self.entry_3, highlightthickness=1) self.combobox_autocomplete3.grid(row=5, column=1) # Insert button self.insert_butt3 = tk.Button(self.root, text='Insert', command=lambda: self.commando3()) self.insert_butt3.grid(row=5, column=2, padx=10) ######################################################################################################################## # Parts list (listbox) LISTBOX: self.list_box = Listbox(self.root, border=0, width=40, height=20, justify='center') self.list_box.grid(row=2, rowspan=5, column=3, pady=5) # Create scrollbar self.scrollbar = tk.Scrollbar(self.root) self.scrollbar.grid(row=3, column=4) # Set scrollbar to parts self.list_box.configure(yscrollcommand=self.scrollbar.set) self.scrollbar.configure(command=self.list_box.yview)
def __init__(self, ncffile, options): try: from Tkinter import Checkbutton, Frame, Label, Scrollbar from Tkinter import Listbox, Button, IntVar, Tk, VERTICAL from Tkinter import EXTENDED, END, N, S, SINGLE, Entry from Tkinter import StringVar, Text, DISABLED, LEFT except Exception: try: from tkinter import Checkbutton, Frame, Label, Scrollbar from tkinter import Listbox, Button, IntVar, Tk, VERTICAL from tkinter import EXTENDED, END, N, S, SINGLE, Entry from tkinter import StringVar, Text, DISABLED, LEFT except Exception: warn('tkinter unavailable') master = self.root = Tk() self.ncffile = ncffile self.options = options self.plotted_variables = set() frame = Frame(master) frame.grid(row=0) codeframe = Frame(master) codeframe.grid(row=1) metaframe = Frame(master) metaframe.grid(row=2) goframe = Frame(frame) goframe.grid(column=3, row=1) var_label = Label(frame, text='Select Variable') var_label.grid(column=0, row=0) var_scrollbar = Scrollbar(frame, orient=VERTICAL) var_scrollbar.grid(column=1, row=1, sticky=N + S) self.var = Listbox(frame, selectmode=EXTENDED, exportselection=0, yscrollcommand=var_scrollbar.set) self.var.grid(column=0, row=1) var_scrollbar.config(command=self.var.yview) what_to_do = Label(frame, text='Execute') what_to_do.grid(column=2, row=0) self.method_list = Listbox(frame, selectmode=SINGLE, exportselection=0) self.method_list.grid(column=2, row=1) self.pre_txt = StringVar() pre_label = Label(codeframe, text='Before any figures, execute code') self.pre_txt.set(_pre_code) pre_label.grid(row=2, sticky='W') self.pre = Entry(codeframe, width=120, textvariable=self.pre_txt) self.pre.grid(row=3, sticky='E') self.before_txt = StringVar() self.before_txt.set(_before_code) before_label = Label( codeframe, text='Before each figure, execute code') before_label.grid(row=4, sticky='W') self.before = Entry(codeframe, width=120, textvariable=self.before_txt) self.before.grid(row=5, sticky='E') self.after_txt = StringVar() self.after_txt.set(_after_code) after_label = Label(codeframe, text='After each figure, execute code') after_label.grid(row=6, sticky='W') self.after = Entry(codeframe, width=120, textvariable=self.after_txt) self.after.grid(row=7, sticky='E') self.post_txt = StringVar() self.post_txt.set(_post_code) post_label = Label(codeframe, text='After all figures, execute code') post_label.grid(row=8, sticky='W') self.post = Entry(codeframe, width=120, textvariable=self.post_txt) self.post.grid(row=9, sticky='E') options_label = Label(goframe, text='Options:') options_label.grid(column=0, row=1, sticky='W') self.logscale = IntVar() self.logscale.set(0) c = Checkbutton(goframe, text="log-scale?", variable=self.logscale) c.grid(column=0, row=2, sticky='W') self.coastlines = IntVar() self.coastlines.set(_coastlines_opt) coastlines = Checkbutton( goframe, text="coastlines?", variable=self.coastlines, justify=LEFT) coastlines.grid(column=0, row=3, sticky='W') self.countries = IntVar() self.countries.set(_countries_opt) countries = Checkbutton( goframe, text="countries?", variable=self.countries, justify=LEFT) countries.grid(column=0, row=4, sticky='W') self.states = IntVar() self.states.set(_states_opt) states = Checkbutton(goframe, text="states?", variable=self.states, justify=LEFT) states.grid(column=0, row=5, sticky='W') self.counties = IntVar() self.counties.set(_counties_opt) counties = Checkbutton(goframe, text="counties?", variable=self.counties, justify=LEFT) counties.grid(column=0, row=6, sticky='W') self.execute_button = Button( goframe, text="Make Figure", command=self.execute) self.execute_button.grid(row=0, column=0, sticky='W') self.methods = ['mapplot', 'presslat', 'presslon', 'time-lat', 'profile', 'timeseries', 'pressx', 'tileplot', 'plot'] method_labels = ['lat-lon', 'press-lat', 'press-lon', 'time-lat', 'Vertical Profile', 'Time Series', 'press-? (2-D)', 'Tile Plot (2-D)', 'Plot (1-D)'] for method in method_labels: self.method_list.insert(END, method) var_keys = [k for k, v in self.ncffile.variables.items() if k not in _coordkeys] var_keys.sort() self.vars = [] for spc in var_keys: self.var.insert(END, spc) self.vars.append(spc) meta_label = Label(metaframe, text='Common Data Language Header:') meta_label.grid(column=0, row=0, sticky='W') meta_scrollbar = Scrollbar(metaframe, orient=VERTICAL) meta_scrollbar.grid(column=1, row=1, sticky=N + S) self.meta = Text(metaframe, height=10, width=118, bg='white', relief='flat', yscrollcommand=meta_scrollbar.set) self.meta.grid(column=0, row=1, sticky='W') from PseudoNetCDF.pncdump import pncdump try: from StringIO import StringIO except ImportError: from io import StringIO pdump = StringIO("") pncdump(self.ncffile, header=True, outfile=pdump, ) pdump.seek(0, 0) self.meta.insert(END, pdump.read()) self.meta.config(state=DISABLED) help = Button(goframe, text='Help', command=self.help) help.grid(column=0, row=7) quit = Button(goframe, text='Quit', command=self.quit) quit.grid(column=0, row=8) master.mainloop()
def preUI(self): self.frame0.destroy() self.initUIRoot() frame1 = Frame(self.frame0, relief=RAISED, borderwidth=1) frame1.pack(fill=BOTH, expand=False) frame2 = Frame(self.frame0, relief=RAISED, borderwidth=1) frame2.pack(fill=BOTH, expand=True) frame1.columnconfigure(1, weight=1) # frame1.columnconfigure(9, weight=1) frame1.columnconfigure(10, pad=7) frame1.rowconfigure(5, weight=1) frame1.rowconfigure(5, pad=7) frame2.columnconfigure(8, pad=7, weight=1) frame2.rowconfigure(8, pad=7) lbl = Label(frame1, text="催化剂性质") lbl.grid(row=0, column=0, columnspan=8, rowspan=1, sticky=W, pady=4, padx=5) # K_Mat_Tree = ttk.Treeview(frame1) # K_Mat_Tree['show'] = 'headings' # K_Mat_Tree = self.makeMatrixUI(7, K_Mat_Tree, sourceDate.K_model) # K_Mat_Tree.grid(row=1, column=0, columnspan=6, rowspan=5, sticky=E + W + S + N, pady=4, padx=5) K_Mat_Tree = Text(frame1, height=18) self.makeMatrixUI(K_Mat_Tree, self.catObj) K_Mat_Tree.configure(state='normal') K_Mat_Tree.grid(row=1, column=0, columnspan=6, rowspan=6, sticky=E + W + S + N, pady=4, padx=5) lbl = Label(frame1, text="优化方法:") lbl.grid(row=0, column=6, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) txt = Entry(frame1) txt.insert(0, self.catObj.optMethod) txt.configure(state='readonly') txt.grid(row=0, column=8, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) lbl = Label(frame1, text="集总数:") lbl.grid(row=1, column=6, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) txt = Entry(frame1) txt.insert(0, self.catObj.n) txt.configure(state='readonly') txt.grid(row=1, column=8, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) lbl = Label(frame1, text="精确度:") lbl.grid(row=2, column=6, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) txt = Entry(frame1) txt.insert(0, self.catObj.tol) txt.configure(state='readonly') txt.grid(row=2, column=8, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) cateDetailButton = Button(frame1, text="查看催化剂详情") cateDetailButton.grid(row=3, column=8) # ________________________________________ lbl = Label(frame2, text="待预测条件") lbl.grid(row=0, column=0, sticky=W, columnspan=5, rowspan=1, pady=4, padx=5) lbl = Label(frame2, text="初始组成(<1 英文逗号分割):") lbl.grid(row=1, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.Y0_input = Entry(frame2) self.Y0_input.grid(row=1, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="温度(K)") lbl.grid(row=2, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.T_input = Entry(frame2) if not self.catObj.withTemp: self.T_input.insert(0, self.catObj.t) self.T_input.configure(state='readonly') self.T_input.grid(row=2, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="压力(KPa)") lbl.grid(row=3, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.p_input = Entry(frame2) self.p_input.grid(row=3, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="剂油比") lbl.grid(row=4, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.roil_input = Entry(frame2) self.roil_input.grid(row=4, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="停留时间(s)") lbl.grid(row=5, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.t_input = Entry(frame2) self.t_input.grid(row=5, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="碱氮含量(<1)") lbl.grid(row=6, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.yn_input = Entry(frame2) self.yn_input.insert(0, 0.0) self.yn_input.grid(row=6, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="重芳烃含量(<1)") lbl.grid(row=7, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.ya_input = Entry(frame2) self.ya_input.grid(row=7, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="微分方程步长") lbl.grid(row=8, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.step_input = Entry(frame2) self.step_input.insert(0, 0.1) self.step_input.grid(row=8, column=2, columnspan=3, rowspan=1, sticky=E, pady=4, padx=5) self.preResult_LB = Listbox(frame2) self.preResult_LB.grid(row=1, column=7, columnspan=2, rowspan=6, pady=4, padx=5) cateDetailButton = Button(frame2, text="预测", command=self.doPre) cateDetailButton.grid(row=8, column=7, columnspan=2)
def init_gui(self): """init helper""" #setting up frames top_frame = Frame(self.root) mid_frame = Frame(self.root) radio_frame = Frame(self.root) res_frame = Frame(self.root) msg_frame = Frame(self.root) check_frame = Frame(self.root) history_frame = Frame(self.root) btn_frame = Frame(self.root) rating_frame = Frame(self.root) top_frame.pack(side=TOP, fill=X) mid_frame.pack(side=TOP, fill=X) history_frame.pack(side=TOP, fill=BOTH, expand=True) radio_frame.pack(side=TOP, fill=BOTH, expand=True) rating_frame.pack(side=TOP, fill=BOTH, expand=True) res_frame.pack(side=TOP, fill=BOTH, expand=True) check_frame.pack(side=TOP, fill=BOTH, expand=True) msg_frame.pack(side=TOP, fill=BOTH, expand=True) btn_frame.pack(side=TOP, fill=X) # Binding F5 application-wide to run lint self.root.bind('<F5>', self.run_lint) #Message ListBox rightscrollbar = Scrollbar(msg_frame) rightscrollbar.pack(side=RIGHT, fill=Y) bottomscrollbar = Scrollbar(msg_frame, orient=HORIZONTAL) bottomscrollbar.pack(side=BOTTOM, fill=X) self.lb_messages = Listbox(msg_frame, yscrollcommand=rightscrollbar.set, xscrollcommand=bottomscrollbar.set, bg="white") self.lb_messages.bind("<Double-Button-1>", self.show_sourcefile) self.lb_messages.pack(expand=True, fill=BOTH) rightscrollbar.config(command=self.lb_messages.yview) bottomscrollbar.config(command=self.lb_messages.xview) #History ListBoxes rightscrollbar2 = Scrollbar(history_frame) rightscrollbar2.pack(side=RIGHT, fill=Y) bottomscrollbar2 = Scrollbar(history_frame, orient=HORIZONTAL) bottomscrollbar2.pack(side=BOTTOM, fill=X) self.showhistory = Listbox(history_frame, yscrollcommand=rightscrollbar2.set, xscrollcommand=bottomscrollbar2.set, bg="white") self.showhistory.pack(expand=True, fill=BOTH) rightscrollbar2.config(command=self.showhistory.yview) bottomscrollbar2.config(command=self.showhistory.xview) self.showhistory.bind('<Double-Button-1>', self.select_recent_file) self.set_history_window() #status bar self.status = Label(self.root, text="", bd=1, relief=SUNKEN, anchor=W) self.status.pack(side=BOTTOM, fill=X) #labelbl_ratingls lbl_rating_label = Label(rating_frame, text='Rating:') lbl_rating_label.pack(side=LEFT) lbl_rating = Label(rating_frame, textvariable=self.rating) lbl_rating.pack(side=LEFT) Label(mid_frame, text='Recently Used:').pack(side=LEFT) Label(top_frame, text='Module or package').pack(side=LEFT) #file textbox self.txt_module = Entry(top_frame, background='white') self.txt_module.bind('<Return>', self.run_lint) self.txt_module.pack(side=LEFT, expand=True, fill=X) #results box rightscrollbar = Scrollbar(res_frame) rightscrollbar.pack(side=RIGHT, fill=Y) bottomscrollbar = Scrollbar(res_frame, orient=HORIZONTAL) bottomscrollbar.pack(side=BOTTOM, fill=X) self.results = Listbox(res_frame, yscrollcommand=rightscrollbar.set, xscrollcommand=bottomscrollbar.set, bg="white", font="Courier") self.results.pack(expand=True, fill=BOTH, side=BOTTOM) rightscrollbar.config(command=self.results.yview) bottomscrollbar.config(command=self.results.xview) #buttons Button(top_frame, text='Open', command=self.file_open).pack(side=LEFT) Button(top_frame, text='Open Package', command=(lambda: self.file_open(package=True))).pack(side=LEFT) self.btnRun = Button(top_frame, text='Run', command=self.run_lint) self.btnRun.pack(side=LEFT) Button(btn_frame, text='Quit', command=self.quit).pack(side=BOTTOM) #radio buttons self.information_box = IntVar() self.convention_box = IntVar() self.refactor_box = IntVar() self.warning_box = IntVar() self.error_box = IntVar() self.fatal_box = IntVar() i = Checkbutton(check_frame, text="Information", fg=COLORS['(I)'], variable=self.information_box, command=self.refresh_msg_window) c = Checkbutton(check_frame, text="Convention", fg=COLORS['(C)'], variable=self.convention_box, command=self.refresh_msg_window) r = Checkbutton(check_frame, text="Refactor", fg=COLORS['(R)'], variable=self.refactor_box, command=self.refresh_msg_window) w = Checkbutton(check_frame, text="Warning", fg=COLORS['(W)'], variable=self.warning_box, command=self.refresh_msg_window) e = Checkbutton(check_frame, text="Error", fg=COLORS['(E)'], variable=self.error_box, command=self.refresh_msg_window) f = Checkbutton(check_frame, text="Fatal", fg=COLORS['(F)'], variable=self.fatal_box, command=self.refresh_msg_window) i.select() c.select() r.select() w.select() e.select() f.select() i.pack(side=LEFT) c.pack(side=LEFT) r.pack(side=LEFT) w.pack(side=LEFT) e.pack(side=LEFT) f.pack(side=LEFT) #check boxes self.box = StringVar() # XXX should be generated report = Radiobutton(radio_frame, text="Report", variable=self.box, value="Report", command=self.refresh_results_window) raw_met = Radiobutton(radio_frame, text="Raw metrics", variable=self.box, value="Raw metrics", command=self.refresh_results_window) dup = Radiobutton(radio_frame, text="Duplication", variable=self.box, value="Duplication", command=self.refresh_results_window) ext = Radiobutton(radio_frame, text="External dependencies", variable=self.box, value="External dependencies", command=self.refresh_results_window) stat = Radiobutton(radio_frame, text="Statistics by type", variable=self.box, value="Statistics by type", command=self.refresh_results_window) msg_cat = Radiobutton(radio_frame, text="Messages by category", variable=self.box, value="Messages by category", command=self.refresh_results_window) msg = Radiobutton(radio_frame, text="Messages", variable=self.box, value="Messages", command=self.refresh_results_window) source_file = Radiobutton(radio_frame, text="Source File", variable=self.box, value="Source File", command=self.refresh_results_window) report.select() report.grid(column=0, row=0, sticky=W) raw_met.grid(column=1, row=0, sticky=W) dup.grid(column=2, row=0, sticky=W) msg.grid(column=3, row=0, sticky=W) stat.grid(column=0, row=1, sticky=W) msg_cat.grid(column=1, row=1, sticky=W) ext.grid(column=2, row=1, sticky=W) source_file.grid(column=3, row=1, sticky=W) #dictionary for check boxes and associated error term self.msg_type_dict = { 'I': lambda: self.information_box.get() == 1, 'C': lambda: self.convention_box.get() == 1, 'R': lambda: self.refactor_box.get() == 1, 'E': lambda: self.error_box.get() == 1, 'W': lambda: self.warning_box.get() == 1, 'F': lambda: self.fatal_box.get() == 1 } self.txt_module.focus_set()
class Application(Frame): def compress(self, sCTRL, dCTRL, eCTRL, gCTRL): allCTRL = { 'Student': sCTRL, 'Discipline': dCTRL, 'Enroll': eCTRL, 'Grade': gCTRL } pickle.dump(allCTRL, open("save.p", "wb")) def compare(self): if self.oCont >= self.Max: self.Max = self.oCont return def reader(self, Input, InputNumber): try: Input.getvar((str(InputNumber))) except TclError as tcl: s = str(tcl) return s.split("\"")[1] def clearText(self): self.textFrame.delete('1.0', END) def Srefresh(self): controller = self._studentControl.getCurentRepo().getStudents() curList = self.sList curList.delete(0, END) controller.sort() for index in controller: curList.insert(END, index) def Drefresh(self): controller = self._disciplineControl.getCurentRepo().getDisciplines() curList = self.dList curList.delete(0, END) controller.sort() for index in controller: curList.insert(END, index) def Erefresh(self): controller = self._enrolControl.getCurentRepo().getEnroll() curList = self.eList curList.delete(0, END) controller.sort() for index in controller: curList.insert(END, index) def Grefresh(self): controller = self._gradeControl.getCurentRepo().getGrades() curList = self.gList curList.delete(0, END) controller.sort() for index in controller: curList.insert(END, index) def refreshALL(self): self.Srefresh() self.Drefresh() self.Erefresh() self.Grefresh() def SreadID(self, string): return string[11:string.index('|') - 1] def DreadID(self, string): return string[15:string.index('|') - 1] def EreadID(self, string): return [ string[12:string.index('|') - 1], string[string.index('|') + 15:-2] ] def sPopup(self, event): self.sMenu.post(event.x_root, event.y_root) def dPopup(self, event): self.dMenu.post(event.x_root, event.y_root) def ePopup(self, event): self.eMenu.post(event.x_root, event.y_root) def gPopup(self, event): self.gMenu.post(event.x_root, event.y_root) def displayError(self, msg): tkMessageBox.showerror('Error', msg) def NewFile(self): self._studentControl.setRepo(deepcopy(student(1, ''))) self._disciplineControl.setRepo(deepcopy(discipline(1, ''))) self._enrolControl.setRepo(deepcopy(enroll(1, 1))) self._gradeControl.setRepo(deepcopy(grade(1, 1))) self.refreshALL() ''' #============================================# :STUDENT: #============================================# ''' def add_Student(self): try: top = tk.Toplevel() top.title('Input') Input = Window2('Enter student ID: ', 'Enter student Name: ', top) Input.mainloop() top.destroy() if not Input.getvar(str( Input.Input1)) == None and not Input.getvar( str(Input.Input2)) == None: studentID = Input.getvar(str(Input.Input1)) name = Input.getvar(str(Input.Input2)) print studentID print name Valid().ID(studentID) Valid().name(name) self._studentControl.getCurentRepo().addStudent( student(int(studentID), name)) self._studentControl.create(int(studentID), name) self.refreshALL() except ValueError: self.displayError('Invalid Input') except NameError: self.displayError('Invalid Name') except idError: self.displayError('Invalid ID') def remove_Student(self): try: index = self.sList.curselection() studentID = self.SreadID(self.sList.get(index)) studentID = int(studentID) name = '' eList = [] gList = [] for Student in self._studentControl.getCurentRepo().getStudents(): if int(Student.getId()) == studentID: name = Student.getName() for enroll in self._enrolControl.getCurentRepo().getEnroll(): if enroll.get_student_id() == studentID: eList.append(enroll) for grade in self._gradeControl.getCurentRepo().getGrades(): if int(grade.getStudentID()) == studentID: gList.append(grade) try: self._studentControl.removeStudent(studentID) except classException: pass try: self._enrolControl.removeEnrollStudent(studentID) except classException: pass try: self._gradeControl.removeGradeStudent(studentID) except classException: pass self._studentControl.delete(studentID, eList, gList, name) self.refreshALL() except ValueError: self.displayError('Invalid Input') except NameError: self.displayError('Invalid Name') except TclError: self.displayError('No item selected') def update_StudentID(self): try: top = tk.Toplevel() top.title('Input') Input = WindowRemove('New ID', top) Input.mainloop() top.destroy() index = self.sList.curselection() studentID = self.SreadID(self.sList.get(index)) studentID = int(studentID) if not Input.getvar(str(Input.Input1)) == None: newID = Input.getvar(str(Input.Input1)) newID = int(newID) self._studentControl.getCurentRepo().updateStudentID( studentID, newID) self._enrolControl.getCurentRepo().updateStudentID( studentID, newID) self._gradeControl.getCurentRepo().updateGradeStudentID( int(studentID), newID) self._studentControl.updateID(studentID, newID) self.refreshALL() except ValueError: self.displayError('Invalid Input') except NameError: self.displayError('Invalid Name') except TclError: self.displayError('No item selected') def update_StudentName(self): try: top = tk.Toplevel() top.title('Input') Input = WindowRemove('New name', top) Input.mainloop() top.destroy() index = self.sList.curselection() studentID = self.SreadID(self.sList.get(index)) studentID = int(studentID) oldName = self.sList.get(index)[self.sList.get(index).index('|') + 9:-2] if not Input.getvar(str(Input.Input1)) == None: newName = Input.getvar(str(Input.Input1)) Valid().name(newName) self._studentControl.getCurentRepo().updateStudentName( studentID, newName) self._studentControl.updateName(studentID, oldName, newName) self.refreshALL() except ValueError: self.displayError('Invalid Input') except NameError: self.displayError('Invalid Name') except TclError: self.displayError('No item selected') ''' #=============================================# :DISCIPLINE: #=============================================# ''' def add_Discipline(self): try: top = tk.Toplevel() top.title('Input') Input = Window2('Enter discipline ID: ', 'Enter discipline Name: ', top) Input.mainloop() top.destroy() if not Input.getvar(str(Input.Input1)) == None or not Input.getvar( str(Input.Input2)) == None: disciplineID = Input.getvar(str(Input.Input1)) name = Input.getvar(str(Input.Input2)) Valid().name(name) Valid().ID(disciplineID) self._disciplineControl.getCurentRepo().addDiscipline( discipline(int(disciplineID), name)) self._disciplineControl.create(int(disciplineID), name) self.refreshALL() except ValueError: self.displayError('Invalid Input') except NameError: self.displayError('Invalid Name') except TclError: self.displayError('No item selected') except idError: self.displayError('Invalid ID') def remove_Discipline(self): try: index = self.dList.curselection() disciplineID = self.DreadID(self.dList.get(index)) disciplineID = int(disciplineID) name = '' eList = [] gList = [] for Discipline in self._disciplineControl.getCurentRepo( ).getDisciplines(): if int(Discipline.getId()) == disciplineID: name = Discipline.getName() for enroll in self._enrolControl.getCurentRepo().getEnroll(): if enroll.get_discipline_id() == disciplineID: eList.append(enroll) for grade in self._gradeControl.getCurentRepo().getGrades(): if grade.getDisciplineID() == disciplineID: gList.append(grade) try: self._disciplineControl.removeDiscipline(disciplineID) except classException: pass try: self._gradeControl.removeGradeDiscipline(disciplineID) except classException: pass try: self._enrolControl.removeEnrollDiscipline(disciplineID) except classException: pass try: self._disciplineControl.delete(disciplineID, eList, gList, name) except classException: pass self.refreshALL() except ValueError: self.displayError('Invalid Input') except NameError: self.displayError('Invalid Name') except TclError: self.displayError('No item selected') def update_DisciplineID(self): try: top = tk.Toplevel() top.title('Input') Input = WindowRemove('New ID', top) Input.mainloop() top.destroy() index = self.dList.curselection() disciplineID = self.DreadID(self.dList.get(index)) disciplineID = int(disciplineID) if not Input.getvar(str(Input.Input1)) == None: newID = Input.getvar(str(Input.Input1)) newID = int(newID) self._disciplineControl.getCurentRepo().updateDisciplineID( disciplineID, newID) self._enrolControl.getCurentRepo().updateDisciplineID( disciplineID, newID) self._gradeControl.getCurentRepo().updateGradeDisciplineID( disciplineID, newID) self._disciplineControl.updateID(disciplineID, newID) self.refreshALL() except ValueError: self.displayError('Invalid Input') except NameError: self.displayError('Invalid Name') except TclError: self.displayError('No item selected') def update_DisciplineName(self): try: top = tk.Toplevel() top.title('Input') Input = WindowRemove('New name', top) Input.mainloop() top.destroy() index = self.dList.curselection() disciplineID = self.DreadID(self.dList.get(index)) disciplineID = int(disciplineID) oldName = self.dList.get(index)[self.dList.get(index).index('|') + 8:-2] if not Input.getvar(str(Input.Input1)) == None: newName = Input.getvar(str(Input.Input1)) Valid().name(newName) self._disciplineControl.getCurentRepo().updateDisciplineName( disciplineID, newName) self._disciplineControl.updateName(disciplineID, oldName, newName) self.refreshALL() except ValueError: self.displayError('Invalid Input') except NameError: self.displayError('Invalid Name') except TclError: self.displayError('No item selected') ''' #===================================================# :ENROLL: #===================================================# ''' def remove_Enroll(self): try: index = self.eList.curselection() IDs = self.EreadID(self.eList.get(index)) studentID = int(IDs[0]) disicplineID = int(IDs[1]) self.eList.delete(ANCHOR) self._gradeControl.removeGrade(enroll(studentID, disicplineID)) self._enrolControl.removeEnroll(enroll(studentID, disicplineID)) self.Erefresh() self.Grefresh() self.refreshALL() except ValueError: self.displayError('Invalid Input') except NameError: self.displayError('Invalid Name') except TclError: self.displayError('No item selected') def add_Enroll(self): try: index = self.sList.curselection() studentID = self.SreadID(self.sList.get(index)) studentID = int(studentID) index = self.dList.curselection() disciplineID = self.DreadID(self.dList.get(index)) disciplineID = int(disciplineID) #try: self._enrolControl.addEnroll(enroll(studentID, disciplineID)) #except ValueError: #self.displayError('Enrollment allready exists') self._enrolControl.create(enroll(studentID, disciplineID)) self.refreshALL() except ValueError: self.displayError('Invalid Input') except NameError: self.displayError('Invalid Name') except TclError: self.displayError('No item selected') def add_EnrollGrade(self): try: top = tk.Toplevel() top.title('Input') Input = WindowRemove('Grade: ', top) Input.mainloop() top.destroy() index = self.eList.curselection() IDs = self.EreadID(self.eList.get(index)) studentID = int(IDs[0]) disciplineID = int(IDs[1]) if not Input.getvar(str(Input.Input1)) == None: gradeValue = Input.getvar(str(Input.Input1)) gradeValue = float(gradeValue) Valid().grade(gradeValue) self._gradeControl.addGrade(grade(disciplineID, studentID), gradeValue) self.Grefresh() self.refreshALL() except ValueError: self.displayError('Invalid Input') except NameError: self.displayError('Invalid Name') except TclError: self.displayError('No item selected') ''' #=======================================================# :GRADE: #=======================================================# ''' def add_Grade(self): try: top = tk.Toplevel() top.title('Input') Input = WindowRemove('Grade: ', top) Input.mainloop() top.destroy() index = self.gList.curselection() IDs = self.EreadID(self.eList.get(index)) studentID = int(IDs[0]) disciplineID = int(IDs[1]) if not Input.getvar(str(Input.Input1)) == None: gradeValue = Input.getvar(str(Input.Input1)) gradeValue = float(gradeValue) Valid().grade(gradeValue) self._gradeControl.addGrade(grade(disciplineID, studentID), gradeValue) self._gradeControl.create(grade(disciplineID, studentID), gradeValue) self.refreshALL() except ValueError: self.displayError('Invalid Input') except NameError: self.displayError('Invalid Name') except TclError: self.displayError('No item selected') ''' #================================================# :SEARCH: #================================================# ''' def SearchALL(self): top = tk.Toplevel() top.title('Input') Input = WindowRemove('Search: ', top) Input.mainloop() top.destroy() searchString = Input.getvar(str(Input.Input1)) top = tk.Toplevel() top.title('Serch Results') top.text = Listbox(top) top.text.grid(row=0, column=0) top.text.config(width=50) top.text.insert(END, 'Disciplines:') for discipline in self._disciplineControl.getCurentRepo( ).getDisciplines(): if searchString.lower() in str(discipline.getId()).lower() or str( discipline.getId()).lower() in searchString.lower( ) or searchString.lower() in discipline.getName().lower( ) or discipline.getName().lower() in searchString.lower(): top.text.insert(END, discipline) top.text.insert(END, 'Students:') for student in self._studentControl.getCurentRepo().getStudents(): if searchString.lower() in str(student.getId()).lower() or str( student.getId()).lower() in searchString.lower( ) or searchString.lower() in student.getName().lower( ) or student.getName().lower() in searchString.lower(): top.text.insert(END, student) ''' #===============================================# :STATISCTICS: #===============================================# ''' def StudentEnrollA(self): try: top = tk.Toplevel() top.title('Enrollment List') top.text = Listbox(top) top.text.grid(row=0, column=0) index = self.dList.curselection() disciplineID = self.DreadID(self.dList.get(index)) disciplineID = int(disciplineID) SList = self._enrolControl.studentEnrollA(disciplineID) for index in SList: top.text.insert(END, index) del SList[:] except TclError: top.destroy() self.displayError('No disicpline Selected') def StudentEnrollB(self): try: top = tk.Toplevel() top.title('Enrollment List') top.text = Listbox(top) top.text.grid(row=0, column=0) index = self.dList.curselection() disciplineID = self.DreadID(self.dList.get(index)) disciplineID = int(disciplineID) SList = [[' ', -1]] for grade in self._gradeControl.getCurentRepo().getGrades(): if grade.getDisciplineID() == disciplineID: for student in self._studentControl.getCurentRepo( ).getStudents(): if student.getId() == grade.getStudentID(): if grade.getGrade() != []: gradeAvg = self.listAvg( grade.getGrade(), grade.getGradeSize()) SList.append([student.getName(), gradeAvg]) SList.sort(key=itemgetter(1), reverse=True) del SList[-1] for index in SList: top.text.insert(END, index) del SList[:] except TclError: top.destroy() self.displayError('No disicpline Selected') def FailingStudents(self): top = tk.Toplevel() top.title('Enrollment List') top.text = Listbox(top) top.text.grid(row=0, column=0) top.text.config(width=50) sList = [['', '']] for grade in self._gradeControl.getCurentRepo().getGrades(): for student in self._studentControl.getCurentRepo().getStudents(): for discipline in self._disciplineControl.getCurentRepo( ).getDisciplines(): if grade.getStudentID() == student.getId(): if grade.getDisciplineID() == discipline.getId(): if grade.getGrade() != []: gradeAvg = self.listAvg( grade.getGrade(), grade.getGradeSize()) if gradeAvg < 5: sList.append([ student.getName(), discipline.getName() ]) for index in sList: top.text.insert(END, '\n' + index[0] + ' - ' + index[1]) del sList[:] def BestStudents(self): top = tk.Toplevel() top.title('Enrollment List') top.text = Listbox(top) top.text.grid(row=0, column=0) top.text.config(width=50) sList = [['', '']] gList = [] sName = '' for student in self._studentControl.getCurentRepo().getStudents(): for grade in self._gradeControl.getCurentRepo().getGrades(): if student.getId() == grade.getStudentID(): if (grade.getGrade() != []): gAvg = self.listAvg(grade.getGrade(), grade.getGradeSize()) gList.append(gAvg) sName = student.getName() if gList != []: sAvg = self.listAvg(gList, len(gList)) sList.append([sName, round(sAvg, 2)]) sList.sort(key=itemgetter(1), reverse=True) for index in range(1, len(sList)): top.text.insert( END, str(sList[index][0] + ' - ' + str(sList[index][1]))) del sList[:] def DisciplineH(self): top = tk.Toplevel() top.title('Enrollment List') top.text = Listbox(top) top.text.grid(row=0, column=0) top.text.config(width=50) sList = [['', '']] gList = [] dName = '' for discipline in self._disciplineControl.getCurentRepo( ).getDisciplines(): for grade in self._gradeControl.getCurentRepo().getGrades(): if discipline.getId() == grade.getDisciplineID(): if (grade.getGrade() != []): gAvg = self.listAvg(grade.getGrade(), grade.getGradeSize()) gList.append(gAvg) dName = discipline.getName() if gList != []: sAvg = self.listAvg(gList, len(gList)) sList.append([dName, round(sAvg, 2)]) sList.sort(key=itemgetter(1), reverse=True) for index in range(1, len(sList)): top.text.insert( END, '\n' + str(sList[index][0]) + ' - ' + str(sList[index][1])) del sList[:] ''' #======================================# :EDIT: #======================================# ''' def undo(self, event): self._undoControl.undo() self.refreshALL() def redo(self, event): self._undoControl.redo() self.refreshALL() ''' #===========================================================================================# :Widgets: #===========================================================================================# ''' def createWidgets(self): ''' #==================================================# :TOPBAR: #==================================================# ''' self.fileButton = Menubutton(self, text='File', relief='flat') self.fileButton.grid(row=0, column=0) self.fileButton.menu = Menu(self.fileButton, tearoff=0) self.fileButton["menu"] = self.fileButton.menu self.fileButton.menu.add_command(label="New", command=self.NewFile) self.fileButton.menu.add_command(label="Exit", command=self.quit) self.eButton = Menubutton(self, text="Enrollment", relief='flat') self.eButton.grid(row=0, column=1) self.eButton.menu = Menu(self.eButton, tearoff=0) self.eButton["menu"] = self.eButton.menu self.eButton.menu.add_command(label="Add Enrollment", command=self.add_Enroll) self.statButton = Menubutton(self, text="Statistics", relief='flat') self.statButton.grid(row=0, column=2) self.statButton.menu = Menu(self.statButton, tearoff=0) self.statButton["menu"] = self.statButton.menu self.discMenu = Menu(tearoff=0) self.discMenu.add_command(label="Sort by name", command=self.StudentEnrollA) self.discMenu.add_command(label="Sort by grade", command=self.StudentEnrollB) self.statButton.menu.add_cascade( label="Students Enrolled at disicpline", menu=self.discMenu) self.statButton.menu.add_command(label="Failing Students", command=self.FailingStudents) self.statButton.menu.add_command(label="Best Students", command=self.BestStudents) self.statButton.menu.add_command(label="Discipline Averages", command=self.DisciplineH) self.searchButton = Menubutton(self, text="Search", relief='flat') self.searchButton.grid(row=0, column=3) self.searchButton.menu = Menu(self.searchButton, tearoff=0) self.searchButton["menu"] = self.searchButton.menu self.searchButton.menu.add_command(label="Search", command=self.SearchALL) self.editButton = Menubutton(self, text="Edit", relief='flat') self.editButton.grid(row=0, column=4) self.editButton.menu = Menu(self.editButton, tearoff=0) self.editButton["menu"] = self.editButton.menu self.editButton.menu.add_command(label="Undo", command=self.undo) self.editButton.menu.add_command(label="Redo", command=self.redo) self.root.bind('<Control-z>', self.undo) self.root.bind('<Control-y>', self.redo) ''' #===================================================# :Student: #===================================================# ''' self.sbar = Label(self, text='Student list', fg='white', bg='#3B9C9C', width=49) self.sbar.grid(row=1, column=0, columnspan=16) self.sList = Listbox(self, exportselection=0) for index in self._studentControl.getCurentRepo().getStudents(): self.sList.insert(END, index) self.sList.grid(row=2, column=0, columnspan=16) self.sList.config(width=57, height=40) self.sMenu = Menu(self, tearoff=0) self.sMenu.add_command(label="Add Student", command=self.add_Student) self.sMenu.add_command(label="Remove Student", command=self.remove_Student) self.sMenu.add_command(label='Update Student ID', command=self.update_StudentID) self.sMenu.add_command(label='Update Student name', command=self.update_StudentName) self.sMenu.add_command(label='Refresh', command=self.Srefresh) self.sList.bind("<Button-3>", self.sPopup) ''' #===================================================# :Discipline: #===================================================# ''' self.dbar = Label(self, text='Discipline list', fg='white', bg='#3B9C9C', width=49) self.dbar.grid(row=1, column=16, columnspan=16) self.dList = Listbox(self, exportselection=0) for index in self._disciplineControl.getCurentRepo().getDisciplines(): self.dList.insert(END, index) self.dList.grid(row=2, column=16, columnspan=16) self.dList.config(width=57, height=40) self.dMenu = Menu(self, tearoff=0) self.dMenu.add_command(label="Add Discipline", command=self.add_Discipline) self.dMenu.add_command(label="Remove Discipline", command=self.remove_Discipline) self.dMenu.add_command(label='Update Discipline ID', command=self.update_DisciplineID) self.dMenu.add_command(label='Update Discipline name', command=self.update_DisciplineName) self.dMenu.add_command(label='Refresh', command=self.Drefresh) self.dList.bind("<Button-3>", self.dPopup) ''' #===================================================# :Enroll: #===================================================# ''' self.ebar = Label(self, text='Enroll list', fg='white', bg='#3B9C9C', width=49) self.ebar.grid(row=1, column=32, columnspan=16) self.eList = Listbox(self, exportselection=0) for index in self._enrolControl.getCurentRepo().getEnroll(): self.eList.insert(END, '\n' + str(index)) self.eList.grid(row=2, column=32, columnspan=16) self.eList.config(width=57, height=40) self.eMenu = Menu(self, tearoff=0) self.eMenu.add_command(label="Remove Enrollment", command=self.remove_Enroll) self.eMenu.add_command(label="Grade Student", command=self.add_EnrollGrade) self.eMenu.add_command(label='Refresh', command=self.Erefresh) self.eList.bind("<Button-3>", self.ePopup) ''' #===================================================# :Grade: #===================================================# ''' self.gbar = Label(self, text='Grade list', fg='white', bg='#3B9C9C', width=49) self.gbar.grid(row=1, column=48, columnspan=16) self.gList = Listbox(self, exportselection=0) for index in self._gradeControl.getCurentRepo().getGrades(): self.gList.insert(END, '\n' + str(index)) self.gList.grid(row=2, column=48, columnspan=16) self.gList.config(width=57, height=40) self.gMenu = Menu(self, tearoff=0) self.gMenu.add_command(label="Grade Student", command=self.add_Grade) self.gMenu.add_command(label='Refresh', command=self.Grefresh) self.gList.bind("<Button-3>", self.gPopup) def __init__(self, studentControl, disciplineControl, gradeControl, enrolControl, U1, master=None): Frame.__init__(self, master) self.pack() self.grid() self.Max = 0 self.oCont = 0 self.root = master self._studentControl = studentControl self._disciplineControl = disciplineControl self._gradeControl = gradeControl self._enrolControl = enrolControl self._undoControl = U1 self.createWidgets() @staticmethod def listAvg(myList, size): s = 0.0 for index in range(size): s += myList[index] s /= size return s
class App(object): def __init__(self): self.w_window = Tk() self.w_listbox_tracks = Listbox(self.w_window) self.w_label_base_path = Label( self.w_window, highlightbackground='red', highlightthickness=1, ) self.w_btn_next = Button( self.w_window, text=u'Следующая', command=self.btn_next, ) self.w_btn_pause = Button( self.w_window, text=u'Пауза/Играть', command=self.btn_pause, ) self.w_btn_stop = Button( self.w_window, text=u'Стоп', command=self.btn_stop, ) self.w_btn_plus = Button( self.w_window, text=u'+', command=self.btn_plus, ) self.w_btn_minus = Button( self.w_window, text=u'-', command=self.btn_minus, ) self.buttons = ( self.w_btn_next, self.w_btn_pause, self.w_btn_stop, self.w_btn_plus, self.w_btn_minus, ) self.music_path = '' self.musics = getattr(settings, 'musics', {}) self.musics_map = {} self.media_instance = vlc.get_default_instance() self.player = self.media_instance.media_player_new() self.media = self.media_instance.media_new(u'') self.mediaManager = self.media.event_manager() self.mark5 = self.mark4 = self.mark3 = self.mark2 = 0 self.current_play_path = u'' # для исключения ошибки, get_position не всегда равен 1 self._last_pos = 2 self.worked = False def _nur_configure(self): self.w_window.protocol('WM_DELETE_WINDOW', self.end) self.w_label_base_path.bind('<Double-Button-1>', self.set_new_path) self.w_listbox_tracks.bind('<Double-Button-1>', self.select_music) self.w_window.minsize(width=settings.MAIN_WINDOW_MIN_WIDTH, height=settings.MAIN_WINDOW_MIN_HEIGHT) self.w_window.geometry(u'{0}x{1}+{2}+{3}'.format( settings.MAIN_WINDOW_WIDTH, settings.MAIN_WINDOW_HEIGHT, settings.MAIN_WINDOW_X, settings.MAIN_WINDOW_Y)) def _nur_layout(self): rel_label_height = 0.1 rel_btns_height = 0.1 rel_btns_width = 1.0 / len(self.buttons) rel_btns_y = 1 - rel_btns_height rel_listbox_heigth = 1 - rel_label_height - rel_btns_height self.w_label_base_path.place( relx=0, rely=0, relwidth=1, relheight=rel_label_height, ) self.w_listbox_tracks.place( relx=0, rely=rel_label_height, relwidth=1, relheight=rel_listbox_heigth, ) x = 0 for btn in self.buttons: btn.place( relx=x, rely=rel_btns_y, relwidth=rel_btns_width, relheight=rel_btns_height, ) x += rel_btns_width def start(self): self._nur_configure() self._nur_layout() self.set_new_path() self.w_window.mainloop() def end(self): self.write_settings() self.w_window.destroy() def write_settings(self): with open(settings.CONFIG_FILE_PATH, 'w') as f: json.dump( { 'MUSIC_PATH': self.music_path, 'musics': self.musics, 'VOLUME': self.player.audio_get_volume() }, f, indent=4) def set_new_path(self, event=None): if event: self.music_path = askdirectory( title=u'Выберите папку с музыкой', initialdir=self.music_path) or self.music_path else: self.music_path = settings.MUSIC_PATH self.w_label_base_path['text'] = self.music_path self._load_musics() def _get_musics(self): _musics = {} for root, dirs, files in os.walk(self.music_path): for fil in files: if fil.endswith('.mp3'): file_path = os.path.join(root, fil) _musics[file_path] = { 'file_name': fil, 'album': (file_path.replace(self.music_path, '').replace(fil, '')), } return _musics def _load_musics(self): for mus_path, meta in self._get_musics().iteritems(): if mus_path not in self.musics: self.musics[mus_path] = meta meta['last_positions'] = [1.0] self.__load_musics() def __load_musics(self): self.musics_map = [(mus_path, u'{album}{file_name}'.format(**mus_meta)) for mus_path, mus_meta in self.musics.iteritems()] self.musics_map.sort(key=lambda x: x[1]) self.musics_map = [(item[0], u'{0} - {2} - {1}'.format( index, item[1], (sum(self.musics[item[0]]['last_positions']) / len(self.musics[item[0]]['last_positions'])))) for index, item in enumerate(self.musics_map)] self.w_listbox_tracks.delete(0, END) self.w_listbox_tracks.insert( END, *(title for mus_path, title in self.musics_map)) def select_music(self, event=None): self.calculate_mark() try: index = self.w_listbox_tracks.curselection()[0] self.current_play_path, music_title = self.musics_map[index] except IndexError: return else: self.player.stop() self.media = self.media_instance.media_new(self.current_play_path) self.mediaManager = self.media.event_manager() self.player.set_media(self.media) self.player.play() self.player.audio_set_volume(settings.VOLUME) if not self.worked: self.worked = True self.w_window.after(3000, self.after) # self.player.set_position(0.9) def btn_pause(self): self.player.pause() self.worked = not self.worked print self.worked if self.worked: self.w_window.after(3000, self.after) def btn_stop(self): self.player.stop() self.worked = False def btn_plus(self): volume = self.player.audio_get_volume() if volume < 100: self.player.audio_set_volume(volume + 10) def btn_minus(self): volume = self.player.audio_get_volume() if volume > 0: self.player.audio_set_volume(volume - 10) def btn_next(self): if not self.musics: return self.calculate_mark() if self.mark5 < 10: mark = 0.8 self.mark5 += 1 elif self.mark4 < 8: mark = 0.6 self.mark4 += 1 elif self.mark3 < 6: mark = 0.4 self.mark3 += 1 elif self.mark2 < 4: mark = 0.2 self.mark2 += 1 else: mark = 0 self.mark5 = self.mark4 = self.mark3 = self.mark2 = 0 self.write_settings() self.__load_musics() music_path = random.choice([ path for path, meta in self.musics.iteritems() if sum(meta['last_positions']) / len(meta['last_positions']) > mark ]) for index, music in enumerate(self.musics_map): if music[0] == music_path: break self.w_listbox_tracks.selection_clear(0, END) self.w_listbox_tracks.activate(index) self.w_listbox_tracks.selection_set(index) self.w_listbox_tracks.see(index) self.select_music() def calculate_mark(self): try: self.musics[self.current_play_path]['last_positions'].append( self.player.get_position()) except KeyError: pass else: self.musics[self.current_play_path]['last_positions'] = ( self.musics[self.current_play_path]['last_positions'][-10:]) def after(self): pos = self.player.get_position() if pos in (1.0, self._last_pos): self.btn_next() self._last_pos = pos if self.worked: self.w_window.after(3000, self.after)
class Combobox_Autocomplete(Entry, object): def __init__(self, master, list_of_items=None, autocomplete_function=None, listbox_width=None, listbox_height=7, ignorecase_match=False, startswith_match=True, vscrollbar=True, hscrollbar=True, **kwargs): if hasattr(self, "autocomplete_function"): if autocomplete_function is not None: raise ValueError("Combobox_Autocomplete subclass has 'autocomplete_function' implemented") else: if autocomplete_function is not None: self.autocomplete_function = autocomplete_function else: if list_of_items is None: raise ValueError("If not guiven complete function, list_of_items can't be 'None'") if ignorecase_match: if startswith_match: def matches_function(entry_data, item): return item.startswith(entry_data) else: def matches_function(entry_data, item): return item in entry_data self.autocomplete_function = lambda entry_data: [item for item in self.list_of_items if matches_function(entry_data, item)] else: if startswith_match: def matches_function(escaped_entry_data, item): if re.match(escaped_entry_data, item, re.IGNORECASE): return True else: return False else: def matches_function(escaped_entry_data, item): if re.search(escaped_entry_data, item, re.IGNORECASE): return True else: return False def autocomplete_function(entry_data): escaped_entry_data = re.escape(entry_data) return [item for item in self.list_of_items if matches_function(escaped_entry_data, item)] self.autocomplete_function = autocomplete_function self._listbox_height = int(listbox_height) self._listbox_width = listbox_width self.list_of_items = list_of_items self._use_vscrollbar = vscrollbar self._use_hscrollbar = hscrollbar kwargs.setdefault("background", "white") if "textvariable" in kwargs: self._entry_var = kwargs["textvariable"] else: self._entry_var = kwargs["textvariable"] = StringVar() Entry.__init__(self, master, **kwargs) self._trace_id = self._entry_var.trace('w', self._on_change_entry_var) self._listbox = None self.bind("<Tab>", self._on_tab) self.bind("<Up>", self._previous) self.bind("<Down>", self._next) self.bind('<Control-n>', self._next) self.bind('<Control-p>', self._previous) self.bind("<Return>", self._update_entry_from_listbox) self.bind("<Escape>", lambda event: self.unpost_listbox()) #self.bind("<FocusOut>", lambda event: self.unpost_listbox()) def _on_tab(self, event): #self.post_listbox() self.unpost_listbox() #frmbill.cbouom.focus() #self._update_entry_from_listbox() #self.unpost_listbox() # if self._listbox is not None: # self._listbox.master.destroy() # self._listbox = None return "break" def _on_change_entry_var(self, name, index, mode): entry_data = self._entry_var.get() if entry_data == '': #print('test111') self.unpost_listbox() self.focus() else: if len(entry_data) < 3: return True values = finditem(entry_data) #kk #self.autocomplete_function(entry_data) if values: if self._listbox is None: self._build_listbox(values) else: self._listbox.delete(0, END) height = min(self._listbox_height, len(values)) self._listbox.configure(height=height) for item in values: self._listbox.insert(END, item) else: self.unpost_listbox() self.focus() def _build_listbox(self, values): listbox_frame = Frame() self._listbox = Listbox(listbox_frame, background="white", selectmode=SINGLE, activestyle="none", exportselection=False) self._listbox.grid(row=0, column=0,sticky = N+E+W+S) self._listbox.bind("<ButtonRelease-1>", self._update_entry_from_listbox) self._listbox.bind("<Return>", self._update_entry_from_listbox) self._listbox.bind("<Escape>", lambda event: self.unpost_listbox()) self._listbox.bind('<Control-n>', self._next) self._listbox.bind('<Control-p>', self._previous) if self._use_vscrollbar: vbar = Scrollbar(listbox_frame, orient=VERTICAL, command= self._listbox.yview) vbar.grid(row=0, column=1, sticky=N+S) self._listbox.configure(yscrollcommand= lambda f, l: autoscroll(vbar, f, l)) if self._use_hscrollbar: hbar = Scrollbar(listbox_frame, orient=HORIZONTAL, command= self._listbox.xview) hbar.grid(row=1, column=0, sticky=E+W) self._listbox.configure(xscrollcommand= lambda f, l: autoscroll(hbar, f, l)) listbox_frame.grid_columnconfigure(0, weight= 1) listbox_frame.grid_rowconfigure(0, weight= 1) x = -self.cget("borderwidth") - self.cget("highlightthickness") y = self.winfo_height()-self.cget("borderwidth") - self.cget("highlightthickness") if self._listbox_width: width = self._listbox_width else: width=self.winfo_width() listbox_frame.place(in_=self, x=x, y=y, width=width) height = min(self._listbox_height, len(values)) self._listbox.configure(height=height) for item in values: self._listbox.insert(END, item) def post_listbox(self): if self._listbox is not None: return entry_data = self._entry_var.get() if entry_data == '': return values = self.autocomplete_function(entry_data) if values: self._build_listbox(values) def unpost_listbox(self): if self._listbox is not None: self._listbox.master.destroy() self._listbox = None def get_value(self): return self._entry_var.get() def set_value(self, text, close_dialog=False): self._set_var(text) if close_dialog: self.unpost_listbox() self.icursor(END) self.xview_moveto(1.0) def _set_var(self, text): self._entry_var.trace_vdelete("w", self._trace_id) self._entry_var.set(text) self._trace_id = self._entry_var.trace('w', self._on_change_entry_var) if len(text) > 0: find_price(text) #kk def _update_entry_from_listbox(self, event): if self._listbox is not None: current_selection = self._listbox.curselection() if current_selection: text = self._listbox.get(current_selection) self._set_var(text) self._listbox.master.destroy() self._listbox = None self.focus() self.icursor(END) self.xview_moveto(1.0) return "break" def _previous(self, event): if self._listbox is not None: current_selection = self._listbox.curselection() if len(current_selection)==0: self._listbox.selection_set(0) self._listbox.activate(0) else: index = int(current_selection[0]) self._listbox.selection_clear(index) if index == 0: index = END else: index -= 1 self._listbox.see(index) self._listbox.selection_set(first=index) self._listbox.activate(index) return "break" def _next(self, event): if self._listbox is not None: current_selection = self._listbox.curselection() if len(current_selection)==0: self._listbox.selection_set(0) self._listbox.activate(0) else: index = int(current_selection[0]) self._listbox.selection_clear(index) if index == self._listbox.size() - 1: index = 0 else: index +=1 self._listbox.see(index) self._listbox.selection_set(index) self._listbox.activate(index) return "break" # if __name__ == '__main__': # try: # from Tkinter import Tk # except ImportError: # from tkinter import Tk # list_of_items = ["Cordell Cannata", "Lacey Naples", "Zachery Manigault", "Regan Brunt", "Mario Hilgefort", "Austin Phong", "Moises Saum", "Willy Neill", "Rosendo Sokoloff", "Salley Christenberry", "Toby Schneller", "Angel Buchwald", "Nestor Criger", "Arie Jozwiak", "Nita Montelongo", "Clemencia Okane", "Alison Scaggs", "Von Petrella", "Glennie Gurley", "Jamar Callender", "Titus Wenrich", "Chadwick Liedtke", "Sharlene Yochum", "Leonida Mutchler", "Duane Pickett", "Morton Brackins", "Ervin Trundy", "Antony Orwig", "Audrea Yutzy", "Michal Hepp", "Annelle Hoadley", "Hank Wyman", "Mika Fernandez", "Elisa Legendre", "Sade Nicolson", "Jessie Yi", "Forrest Mooneyhan", "Alvin Widell", "Lizette Ruppe", "Marguerita Pilarski", "Merna Argento", "Jess Daquila", "Breann Bevans", "Melvin Guidry", "Jacelyn Vanleer", "Jerome Riendeau", "Iraida Nyquist", "Micah Glantz", "Dorene Waldrip", "Fidel Garey", "Vertie Deady", "Rosalinda Odegaard", "Chong Hayner", "Candida Palazzolo", "Bennie Faison", "Nova Bunkley", "Francis Buckwalter", "Georgianne Espinal", "Karleen Dockins", "Hertha Lucus", "Ike Alberty", "Deangelo Revelle", "Juli Gallup", "Wendie Eisner", "Khalilah Travers", "Rex Outman", "Anabel King", "Lorelei Tardiff", "Pablo Berkey", "Mariel Tutino", "Leigh Marciano", "Ok Nadeau", "Zachary Antrim", "Chun Matthew", "Golden Keniston", "Anthony Johson", "Rossana Ahlstrom", "Amado Schluter", "Delila Lovelady", "Josef Belle", "Leif Negrete", "Alec Doss", "Darryl Stryker", "Michael Cagley", "Sabina Alejo", "Delana Mewborn", "Aurelio Crouch", "Ashlie Shulman", "Danielle Conlan", "Randal Donnell", "Rheba Anzalone", "Lilian Truax", "Weston Quarterman", "Britt Brunt", "Leonie Corbett", "Monika Gamet", "Ingeborg Bello", "Angelique Zhang", "Santiago Thibeau", "Eliseo Helmuth"] # root = Tk() # root.geometry("300x200") # combobox_autocomplete = Combobox_Autocomplete(root, list_of_items, highlightthickness=1) # combobox_autocomplete.pack() # combobox_autocomplete.focus() # root.mainloop()
radiobutton1 = Radiobutton(column, variable=variable, value="value1", text="Selection 1") radiobutton0.fieldname = "radiobutton" radiobutton1.pack(side=LEFT) Label(form, text="Text area:").grid(row=6, column=0, sticky=E, pady=(8, 0)) text = Text(form, height=5) text.fieldname = "text" text.grid(row=7, column=1, sticky=E + W) Label(form, text="Listbox:").grid(row=8, column=0, sticky=E, pady=(8, 0)) listbox = Listbox(form) listbox.fieldname = "listbox" listbox.grid(row=9, column=1, sticky=W) for item in ["one", "two", "three", "four"]: listbox.insert("end", item) Label(form, text="Combobox:").grid(row=10, column=0, sticky=E, pady=(8, 0)) combobox = Combobox(form, values=('X', 'Y', 'Z'), width=5) combobox.fieldname = "combobox" combobox.grid(row=11, column=1, sticky=W) Submit_Button(form, text="Submit").grid(row=12, column=1, sticky=E) root.mainloop()
def createWidgets(self): ''' #==================================================# :TOPBAR: #==================================================# ''' self.fileButton = Menubutton(self, text='File', relief='flat') self.fileButton.grid(row=0, column=0) self.fileButton.menu = Menu(self.fileButton, tearoff=0) self.fileButton["menu"] = self.fileButton.menu self.fileButton.menu.add_command(label="New", command=self.NewFile) self.fileButton.menu.add_command(label="Exit", command=self.quit) self.eButton = Menubutton(self, text="Enrollment", relief='flat') self.eButton.grid(row=0, column=1) self.eButton.menu = Menu(self.eButton, tearoff=0) self.eButton["menu"] = self.eButton.menu self.eButton.menu.add_command(label="Add Enrollment", command=self.add_Enroll) self.statButton = Menubutton(self, text="Statistics", relief='flat') self.statButton.grid(row=0, column=2) self.statButton.menu = Menu(self.statButton, tearoff=0) self.statButton["menu"] = self.statButton.menu self.discMenu = Menu(tearoff=0) self.discMenu.add_command(label="Sort by name", command=self.StudentEnrollA) self.discMenu.add_command(label="Sort by grade", command=self.StudentEnrollB) self.statButton.menu.add_cascade( label="Students Enrolled at disicpline", menu=self.discMenu) self.statButton.menu.add_command(label="Failing Students", command=self.FailingStudents) self.statButton.menu.add_command(label="Best Students", command=self.BestStudents) self.statButton.menu.add_command(label="Discipline Averages", command=self.DisciplineH) self.searchButton = Menubutton(self, text="Search", relief='flat') self.searchButton.grid(row=0, column=3) self.searchButton.menu = Menu(self.searchButton, tearoff=0) self.searchButton["menu"] = self.searchButton.menu self.searchButton.menu.add_command(label="Search", command=self.SearchALL) self.editButton = Menubutton(self, text="Edit", relief='flat') self.editButton.grid(row=0, column=4) self.editButton.menu = Menu(self.editButton, tearoff=0) self.editButton["menu"] = self.editButton.menu self.editButton.menu.add_command(label="Undo", command=self.undo) self.editButton.menu.add_command(label="Redo", command=self.redo) self.root.bind('<Control-z>', self.undo) self.root.bind('<Control-y>', self.redo) ''' #===================================================# :Student: #===================================================# ''' self.sbar = Label(self, text='Student list', fg='white', bg='#3B9C9C', width=49) self.sbar.grid(row=1, column=0, columnspan=16) self.sList = Listbox(self, exportselection=0) for index in self._studentControl.getCurentRepo().getStudents(): self.sList.insert(END, index) self.sList.grid(row=2, column=0, columnspan=16) self.sList.config(width=57, height=40) self.sMenu = Menu(self, tearoff=0) self.sMenu.add_command(label="Add Student", command=self.add_Student) self.sMenu.add_command(label="Remove Student", command=self.remove_Student) self.sMenu.add_command(label='Update Student ID', command=self.update_StudentID) self.sMenu.add_command(label='Update Student name', command=self.update_StudentName) self.sMenu.add_command(label='Refresh', command=self.Srefresh) self.sList.bind("<Button-3>", self.sPopup) ''' #===================================================# :Discipline: #===================================================# ''' self.dbar = Label(self, text='Discipline list', fg='white', bg='#3B9C9C', width=49) self.dbar.grid(row=1, column=16, columnspan=16) self.dList = Listbox(self, exportselection=0) for index in self._disciplineControl.getCurentRepo().getDisciplines(): self.dList.insert(END, index) self.dList.grid(row=2, column=16, columnspan=16) self.dList.config(width=57, height=40) self.dMenu = Menu(self, tearoff=0) self.dMenu.add_command(label="Add Discipline", command=self.add_Discipline) self.dMenu.add_command(label="Remove Discipline", command=self.remove_Discipline) self.dMenu.add_command(label='Update Discipline ID', command=self.update_DisciplineID) self.dMenu.add_command(label='Update Discipline name', command=self.update_DisciplineName) self.dMenu.add_command(label='Refresh', command=self.Drefresh) self.dList.bind("<Button-3>", self.dPopup) ''' #===================================================# :Enroll: #===================================================# ''' self.ebar = Label(self, text='Enroll list', fg='white', bg='#3B9C9C', width=49) self.ebar.grid(row=1, column=32, columnspan=16) self.eList = Listbox(self, exportselection=0) for index in self._enrolControl.getCurentRepo().getEnroll(): self.eList.insert(END, '\n' + str(index)) self.eList.grid(row=2, column=32, columnspan=16) self.eList.config(width=57, height=40) self.eMenu = Menu(self, tearoff=0) self.eMenu.add_command(label="Remove Enrollment", command=self.remove_Enroll) self.eMenu.add_command(label="Grade Student", command=self.add_EnrollGrade) self.eMenu.add_command(label='Refresh', command=self.Erefresh) self.eList.bind("<Button-3>", self.ePopup) ''' #===================================================# :Grade: #===================================================# ''' self.gbar = Label(self, text='Grade list', fg='white', bg='#3B9C9C', width=49) self.gbar.grid(row=1, column=48, columnspan=16) self.gList = Listbox(self, exportselection=0) for index in self._gradeControl.getCurentRepo().getGrades(): self.gList.insert(END, '\n' + str(index)) self.gList.grid(row=2, column=48, columnspan=16) self.gList.config(width=57, height=40) self.gMenu = Menu(self, tearoff=0) self.gMenu.add_command(label="Grade Student", command=self.add_Grade) self.gMenu.add_command(label='Refresh', command=self.Grefresh) self.gList.bind("<Button-3>", self.gPopup)
def _create_selector(self, parent, values): self._listbox = Listbox(parent) for item in values: self._listbox.insert(END, item) return self._listbox
def __init__(self): self.w_window = Tk() self.w_listbox_tracks = Listbox(self.w_window) self.w_label_base_path = Label( self.w_window, highlightbackground='red', highlightthickness=1, ) self.w_btn_next = Button( self.w_window, text=u'Следующая', command=self.btn_next, ) self.w_btn_pause = Button( self.w_window, text=u'Пауза/Играть', command=self.btn_pause, ) self.w_btn_stop = Button( self.w_window, text=u'Стоп', command=self.btn_stop, ) self.w_btn_plus = Button( self.w_window, text=u'+', command=self.btn_plus, ) self.w_btn_minus = Button( self.w_window, text=u'-', command=self.btn_minus, ) self.buttons = ( self.w_btn_next, self.w_btn_pause, self.w_btn_stop, self.w_btn_plus, self.w_btn_minus, ) self.music_path = '' self.musics = getattr(settings, 'musics', {}) self.musics_map = {} self.media_instance = vlc.get_default_instance() self.player = self.media_instance.media_player_new() self.media = self.media_instance.media_new(u'') self.mediaManager = self.media.event_manager() self.mark5 = self.mark4 = self.mark3 = self.mark2 = 0 self.current_play_path = u'' # для исключения ошибки, get_position не всегда равен 1 self._last_pos = 2 self.worked = False
def __init__(self, *args, **kwargs): Listbox.__init__(self, *args, **kwargs)
class GameView: def __init__(self, container, main_ui, digits, types, players, game_started): self.main_ui = main_ui self.frame_left = Frame(container) self.frame_left.pack(side=LEFT, padx=20, pady=20) self.scoreFont = tkFont.Font(family="Helvetica", size=15) self.game = SudokuGame(digits, types) self.game.start() # Start game self.UI = SudokuUI(self.frame_left, self.game, main_ui) # Display sudoku board self.frame_right = Frame(container) self.frame_right.pack(side=RIGHT, padx=20, pady=10) games_txt = Label(self.frame_right, text="Scoreboard") games_txt.pack(side=TOP) self.games_lb = Listbox(self.frame_right, bg="gray99", selectbackground="gray99", height=6) self.games_lb.bind("<<ListboxSelect>>", self.no_selection) self.games_lb.pack() self.fill_players(players) self.waiting_txt = None if not game_started: self.waiting_txt = Label( self.frame_left, text="Waiting for players. Game has not started.", font=("Arial", 14), bg="red") self.waiting_txt.pack(fill=X) self.exitButton = Button(self.frame_right, text="Exit game", command=self.exit_game) self.exitButton.pack(padx=10, pady=10) def update_board(self, digits, types): #ugly hack for handling empty heatmap, not necessary to receive it every time from server if (types == ""): heatmap_str = "" types = self.game.heatmap for row in types: row = [str(r) for r in row] row_str = ",".join(row) heatmap_str += row_str + "," types = heatmap_str types = types[:-1] game = SudokuGame(digits, types) game.start() i, j, number = self.get_updated_digit(game.puzzle, self.game.puzzle) if (i != None and j != None and number != None): self.game = game self.UI.draw_update(i, j, number) def get_updated_digit(self, new_digit, old_digit): for i in range(0, 9): for j in range(0, 9): if (new_digit[i][j] != old_digit[i][j]): return i, j, new_digit[i][j] return None, None, None def show_end(self, content): self.UI.draw_victory(content) def fill_players(self, players): self.games_lb.delete(0, END) for idx, val in enumerate(players): # Insert all games to the list self.games_lb.insert(idx, val) self.games_lb.pack() def add_player(self, player): self.games_lb.insert(END, player) self.games_lb.pack() def hide_waiting_txt(self): if self.waiting_txt is not None: self.waiting_txt.pack_forget() def no_selection(self, event): w = event.widget cur = w.curselection() if len(cur) > 0: w.selection_clear(cur) def exit_game(self): self.main_ui.leave_game()
class ListPage(BasePage): def __init__(self, parent, controller): BasePage.__init__(self, parent, controller) self.mutex = Lock() def prepare(self): self.deviceList.config(state='normal') self.versionList.config(state='disabled') self.engList.config(state='disabled') self.packageList.config(state='disabled') self.ok.config(state='disabled') self.setData(self.controller.data) self.setDeviceList(self.data.keys()) self.controller.setDefault(self, self.controller.loadOptions()) self.deviceList.focus_force() def printErr(self, message): self.errLog.config(text=message) def setData(self, data): self.data = data def setupView(self, title="Select your flash", data=None): if(data): self.setData(data) self.errLog = Label(self, text="") self.errLog.grid(row=4, column=1, columnspan=3, sticky="NWSE") self.desc = Label(self, text=title, font=TITLE_FONT) self.desc.grid(row=0, column=0, columnspan=2) self.ok = Button(self, text='Next', command=lambda: self. confirm()) self.ok.grid(row=4, column=3, sticky="E") self.ok.config(state="disabled") self.deviceLabel = Label(self, text="Device", font=TITLE_FONT) self.deviceLabel.grid(row=1, column=0) self.deviceList = Listbox(self, exportselection=0) self.deviceList.grid(row=2, column=0) self.deviceList.bind('<<ListboxSelect>>', self.deviceOnSelect) self.deviceList.config(state="disabled") self.versionLabel = Label(self, text="Branch", font=TITLE_FONT) self.versionLabel.grid(row=1, column=1) self.versionList = Listbox(self, exportselection=0) self.versionList.grid(row=2, column=1) self.versionList.bind('<<ListboxSelect>>', self.versionOnSelect) self.versionList.config(state="disabled") self.engLabel = Label(self, text="Build Type", font=TITLE_FONT) self.engLabel.grid(row=1, column=2) self.engList = Listbox(self, exportselection=0) self.engList.grid(row=2, column=2) self.engList.bind('<<ListboxSelect>>', self.engOnSelect) self.engList.config(state="disabled") self.packageLabel = Label( self, text="Gecko/Gaia/Full", font=TITLE_FONT) self.packageLabel.grid(row=1, column=3) self.packageList = Listbox(self, exportselection=0) self.packageList.grid(row=2, column=3) self.packageList.bind('<<ListboxSelect>>', self.packageOnSelect) self.packageList.config(state="disabled") self.bidVar = StringVar() Label(self, text="Build ID").grid(row=3, column=0, sticky='E') self.bidInput = Entry( self, textvariable=self.bidVar, width="30") self.bidInput.grid( row=3, column=1, columnspan=2, sticky="W") self.bidVar.set('latest') # binding unfocus for build id field self.bidInput.bind('<FocusOut>', self.updateBuildId) # binding the Return Key to each componments self.deviceList.bind('<Return>', self.pressReturnKey) self.versionList.bind('<Return>', self.pressReturnKey) self.engList.bind('<Return>', self.pressReturnKey) self.packageList.bind('<Return>', self.pressReturnKey) self.bidInput.bind('<Return>', self.pressReturnKey) self.ok.bind('<Return>', self.pressReturnKey) def selection_all_checked(self): result = False if len(self.deviceList.curselection()) == 0: self.logger.log('Please select device.', status_callback=self.printErr) self.ok.config(state="disabled") self.deviceList.focus_set() elif len(self.versionList.curselection()) == 0: self.logger.log('Please select branch.', status_callback=self.printErr) self.ok.config(state="disabled") self.versionList.focus_set() elif len(self.engList.curselection()) == 0: self.logger.log('Please select user or engineer build.', status_callback=self.printErr) self.ok.config(state="disabled") self.engList.focus_set() elif len(self.packageList.curselection()) == 0: self.logger.log('Please select package to flash.', status_callback=self.printErr) self.ok.config(state="disabled") self.packageList.focus_set() elif len(self.bidVar.get()) == 0: self.logger.log('Please enter build ID to flash or use "latest" to get the newest', status_callback=self.printErr) self.bidVar.set('latest') else: result = True return result def updateBuildId(self, event=None): if len(self.engList.curselection()) != 0: self.refreshPackageList() def pressReturnKey(self, event=None): if self.selection_all_checked(): self.ok.config(state="disabled") self.confirm() def deviceOnSelect(self, evt): self.setVersionList() def versionOnSelect(self, evt): self.setEngList() def engOnSelect(self, evt): self.refreshPackageList() # hard coded right now def packageOnSelect(self, evt): self.ok.config(state="normal") def confirm(self): self.mutex.acquire() try: if self.selection_all_checked(): self.ok.config(state="disabled") params = [] package = self.packageList.get(self.packageList.curselection()[0]) self.logger.log('Start to flash [' + package + '].', status_callback=self.printErr) if(PathParser._IMAGES in package): params.append(PathParser._IMAGES) else: if(PathParser._GAIA in package): params.append(PathParser._GAIA) if(PathParser._GECKO in package): params.append(PathParser._GECKO) self.controller.doFlash(params) self.packageList.select_clear(0, END) self.controller.transition(self) finally: self.mutex.release() def setDeviceList(self, device=[]): self.deviceList.delete(0, END) for li in device: self.deviceList.insert(END, li) def setVersionList(self, version=[]): if len(version) == 0: version = self.data[ self.deviceList.get(self.deviceList.curselection()) ] self.versionList.config(state="normal") self.engList.config(state="disabled") self.packageList.config(state="disabled") self.ok.config(state="disabled") self.versionList.delete(0, END) for li in version: self.versionList.insert(END, li) def setEngList(self, eng=[]): if len(eng) == 0: device = self.deviceList.get(self.deviceList.curselection()) version = self.versionList.get(self.versionList.curselection()) eng = self.data[device][version] self.engList.config(state="normal") self.packageList.config(state="disabled") self.ok.config(state="disabled") self.engList.delete(0, END) for li in eng: self.engList.insert(END, li) def refreshPackageList(self): self.mutex.acquire() try: self.packageList.config(state="normal") self.ok.config(state="normal") self.packageList.delete(0, END) device = self.deviceList.get(self.deviceList.curselection()) version = self.versionList.get(self.versionList.curselection()) eng = self.engList.get(self.engList.curselection()) # if the value is '' or 'latest', the set the build_id option as ''. buildId = '' if (len(self.bidVar.get()) == 0 or self.bidVar.get() == 'latest') else self.bidVar.get() package = self.controller.getPackages(self.data[device][version][eng]['src'], build_id=buildId) if len(package) == 0: package = [PathParser._GAIA_GECKO, PathParser._GAIA, PathParser._GECKO, PathParser._IMAGES] for li in package: self.packageList.insert(END, li) finally: self.mutex.release()
def setupView(self, title="Select your flash", data=None): if(data): self.setData(data) self.errLog = Label(self, text="") self.errLog.grid(row=4, column=1, columnspan=3, sticky="NWSE") self.desc = Label(self, text=title, font=TITLE_FONT) self.desc.grid(row=0, column=0, columnspan=2) self.ok = Button(self, text='Next', command=lambda: self. confirm()) self.ok.grid(row=4, column=3, sticky="E") self.ok.config(state="disabled") self.deviceLabel = Label(self, text="Device", font=TITLE_FONT) self.deviceLabel.grid(row=1, column=0) self.deviceList = Listbox(self, exportselection=0) self.deviceList.grid(row=2, column=0) self.deviceList.bind('<<ListboxSelect>>', self.deviceOnSelect) self.deviceList.config(state="disabled") self.versionLabel = Label(self, text="Branch", font=TITLE_FONT) self.versionLabel.grid(row=1, column=1) self.versionList = Listbox(self, exportselection=0) self.versionList.grid(row=2, column=1) self.versionList.bind('<<ListboxSelect>>', self.versionOnSelect) self.versionList.config(state="disabled") self.engLabel = Label(self, text="Build Type", font=TITLE_FONT) self.engLabel.grid(row=1, column=2) self.engList = Listbox(self, exportselection=0) self.engList.grid(row=2, column=2) self.engList.bind('<<ListboxSelect>>', self.engOnSelect) self.engList.config(state="disabled") self.packageLabel = Label( self, text="Gecko/Gaia/Full", font=TITLE_FONT) self.packageLabel.grid(row=1, column=3) self.packageList = Listbox(self, exportselection=0) self.packageList.grid(row=2, column=3) self.packageList.bind('<<ListboxSelect>>', self.packageOnSelect) self.packageList.config(state="disabled") self.bidVar = StringVar() Label(self, text="Build ID").grid(row=3, column=0, sticky='E') self.bidInput = Entry( self, textvariable=self.bidVar, width="30") self.bidInput.grid( row=3, column=1, columnspan=2, sticky="W") self.bidVar.set('latest') # binding unfocus for build id field self.bidInput.bind('<FocusOut>', self.updateBuildId) # binding the Return Key to each componments self.deviceList.bind('<Return>', self.pressReturnKey) self.versionList.bind('<Return>', self.pressReturnKey) self.engList.bind('<Return>', self.pressReturnKey) self.packageList.bind('<Return>', self.pressReturnKey) self.bidInput.bind('<Return>', self.pressReturnKey) self.ok.bind('<Return>', self.pressReturnKey)
class Combobox_Autocomplete(Entry, object): def __init__(self, master, list_of_items=None, autocomplete_function=None, listbox_width=None, listbox_height=7, ignorecase_match=False, startswith_match=True, vscrollbar=True, hscrollbar=True, **kwargs): if hasattr(self, "autocomplete_function"): if autocomplete_function is not None: raise ValueError("Combobox_Autocomplete subclass has 'autocomplete_function' implemented") else: if autocomplete_function is not None: self.autocomplete_function = autocomplete_function else: if list_of_items is None: raise ValueError("If not guiven complete function, list_of_items can't be 'None'") if ignorecase_match: if startswith_match: def matches_function(entry_data, item): return item.startswith(entry_data) else: def matches_function(entry_data, item): return item in entry_data self.autocomplete_function = lambda entry_data: [item for item in self.list_of_items if matches_function(entry_data, item)] else: if startswith_match: def matches_function(escaped_entry_data, item): if re.match(escaped_entry_data, item, re.IGNORECASE): return True else: return False else: def matches_function(escaped_entry_data, item): if re.search(escaped_entry_data, item, re.IGNORECASE): return True else: return False def autocomplete_function(entry_data): escaped_entry_data = re.escape(entry_data) return [item for item in self.list_of_items if matches_function(escaped_entry_data, item)] self.autocomplete_function = autocomplete_function self._listbox_height = int(listbox_height) self._listbox_width = listbox_width self.list_of_items = list_of_items self._use_vscrollbar = vscrollbar self._use_hscrollbar = hscrollbar kwargs.setdefault("background", "white") if "textvariable" in kwargs: self._entry_var = kwargs["textvariable"] else: self._entry_var = kwargs["textvariable"] = StringVar() Entry.__init__(self, master, **kwargs) self._trace_id = self._entry_var.trace('w', self._on_change_entry_var) self._listbox = None self.bind("<Tab>", self._on_tab) self.bind("<Up>", self._previous) self.bind("<Down>", self._next) self.bind('<Control-n>', self._next) self.bind('<Control-p>', self._previous) self.bind("<Return>", self._update_entry_from_listbox) self.bind("<Escape>", lambda event: self.unpost_listbox()) def _on_tab(self, event): self.post_listbox() return "break" def _on_change_entry_var(self, name, index, mode): entry_data = self._entry_var.get() if entry_data == '': self.unpost_listbox() self.focus() else: values = self.autocomplete_function(entry_data) if values: if self._listbox is None: self._build_listbox(values) else: self._listbox.delete(0, END) height = min(self._listbox_height, len(values)) self._listbox.configure(height=height) for item in values: self._listbox.insert(END, item) else: self.unpost_listbox() self.focus() def _build_listbox(self, values): listbox_frame = Frame() self._listbox = Listbox(listbox_frame, background="white", selectmode=SINGLE, activestyle="none", exportselection=False) self._listbox.grid(row=0, column=0,sticky = N+E+W+S) self._listbox.bind("<ButtonRelease-1>", self._update_entry_from_listbox) self._listbox.bind("<Return>", self._update_entry_from_listbox) self._listbox.bind("<Escape>", lambda event: self.unpost_listbox()) self._listbox.bind('<Control-n>', self._next) self._listbox.bind('<Control-p>', self._previous) if self._use_vscrollbar: vbar = Scrollbar(listbox_frame, orient=VERTICAL, command= self._listbox.yview) vbar.grid(row=0, column=1, sticky=N+S) self._listbox.configure(yscrollcommand= lambda f, l: autoscroll(vbar, f, l)) if self._use_hscrollbar: hbar = Scrollbar(listbox_frame, orient=HORIZONTAL, command= self._listbox.xview) hbar.grid(row=1, column=0, sticky=E+W) self._listbox.configure(xscrollcommand= lambda f, l: autoscroll(hbar, f, l)) listbox_frame.grid_columnconfigure(0, weight= 1) listbox_frame.grid_rowconfigure(0, weight= 1) x = -self.cget("borderwidth") - self.cget("highlightthickness") y = self.winfo_height()-self.cget("borderwidth") - self.cget("highlightthickness") if self._listbox_width: width = self._listbox_width else: width=self.winfo_width() listbox_frame.place(in_=self, x=x, y=y, width=width) height = min(self._listbox_height, len(values)) self._listbox.configure(height=height) for item in values: self._listbox.insert(END, item) def post_listbox(self): if self._listbox is not None: return entry_data = self._entry_var.get() if entry_data == '': return values = self.autocomplete_function(entry_data) if values: self._build_listbox(values) def unpost_listbox(self): if self._listbox is not None: self._listbox.master.destroy() self._listbox = None def get_value(self): return self._entry_var.get() def set_value(self, text, close_dialog=False): self._set_var(text) if close_dialog: self.unpost_listbox() self.icursor(END) self.xview_moveto(1.0) def _set_var(self, text): self._entry_var.trace_vdelete("w", self._trace_id) self._entry_var.set(text) self._trace_id = self._entry_var.trace('w', self._on_change_entry_var) def _update_entry_from_listbox(self, event): if self._listbox is not None: current_selection = self._listbox.curselection() if current_selection: text = self._listbox.get(current_selection) self._set_var(text) self._listbox.master.destroy() self._listbox = None self.focus() self.icursor(END) self.xview_moveto(1.0) return "break" def _previous(self, event): if self._listbox is not None: current_selection = self._listbox.curselection() if len(current_selection)==0: self._listbox.selection_set(0) self._listbox.activate(0) else: index = int(current_selection[0]) self._listbox.selection_clear(index) if index == 0: index = END else: index -= 1 self._listbox.see(index) self._listbox.selection_set(first=index) self._listbox.activate(index) return "break" def _next(self, event): if self._listbox is not None: current_selection = self._listbox.curselection() if len(current_selection)==0: self._listbox.selection_set(0) self._listbox.activate(0) else: index = int(current_selection[0]) self._listbox.selection_clear(index) if index == self._listbox.size() - 1: index = 0 else: index +=1 self._listbox.see(index) self._listbox.selection_set(index) self._listbox.activate(index) return "break"
class Example(Frame): def __init__(self, parent): self.catFactors = {} Frame.__init__(self, parent) self.parent = parent self.initUI() def initUI(self): if hasattr(self, 'frame0'): self.frame0.destroy() self.initUIRoot() self.initUIFrame() def initUIRoot(self): self.parent.title("集总模型") self.pack(fill=BOTH, expand=1) menubar = Menu(self.parent) self.parent.config(menu=menubar) self.frame0 = Frame(self, relief=RAISED) self.frame0.pack(fill=BOTH, expand=True) fileMenu = Menu(menubar) fileMenu.add_command(label=u"新建催化剂", command=self.onNewCata) fileMenu.add_command(label=u"精确预测", command=self.onNewPre) fileMenu.add_command(label=u"趋势预测", command=self.onNewGraph) fileMenu.add_command(label=u"最优条件预测", command=self.onNewBest) helpMenu = Menu(menubar) helpMenu.add_command(label=u"关于", command=self.onHelp) mainPageMenu = Menu(menubar) mainPageMenu.add_command(label=u"主页", command=self.initUI) menubar.add_cascade(label="主页", menu=mainPageMenu) menubar.add_cascade(label="操作", menu=fileMenu) menubar.add_cascade(label="帮助", menu=helpMenu) def initUIFrame(self): self.frame0.columnconfigure(0, pad=5, weight=1) self.frame0.columnconfigure(1, pad=5, weight=1) self.frame0.columnconfigure(2, pad=5, weight=1) self.frame0.columnconfigure(3, pad=5, weight=1) self.frame0.columnconfigure(4, pad=5, weight=1) self.frame0.columnconfigure(5, pad=5, weight=1) self.frame0.rowconfigure(0, pad=37) self.frame0.rowconfigure(1, pad=7) self.frame0.rowconfigure(2, pad=7, weight=1) titleImg = ImageTk.PhotoImage(file="./imgs/title.png") catImg = ImageTk.PhotoImage(file="./imgs/cat.png") preImg = ImageTk.PhotoImage(file="./imgs/pre.png") chartImg = ImageTk.PhotoImage(file="./imgs/chart.png") bestImg = ImageTk.PhotoImage(file="./imgs/bestPoint.png") rareImg = ImageTk.PhotoImage(file="./imgs/rare.png") lbl = Label(self.frame0, image=titleImg) lbl.grid(row=0, column=1,columnspan=5,sticky=S+W) lbl.image = titleImg lbl = Label(self.frame0, image=rareImg) lbl.grid(row=3, column=1,columnspan=5,sticky=S) lbl.image = rareImg preButton = Button(self.frame0, command=self.onNewPre) preButton.config(image=preImg) preButton.image = preImg preButton.grid(row=1, column=2) cateButton = Button(self.frame0, command=self.onNewCata) cateButton.config(image=catImg) cateButton.image = catImg cateButton.grid(row=1, column=1) chartButton = Button(self.frame0, command=self.onNewGraph) chartButton.config(image=chartImg) chartButton.image = chartImg chartButton.grid(row=1, column=3) chartButton = Button(self.frame0, command=self.onNewBest) chartButton.config(image=bestImg) chartButton.image = bestImg chartButton.grid(row=1, column=4) lbl = Label(self.frame0, text="新建催化剂") lbl.grid(row=2, column=1, sticky=N) lbl = Label(self.frame0, text="精确预测") lbl.grid(row=2, column=2, sticky=N) lbl = Label(self.frame0, text="趋势预测") lbl.grid(row=2, column=3, sticky=N) lbl = Label(self.frame0, text="最优条件预测") lbl.grid(row=2, column=4, sticky=N) def bestUI(self): self.frame0.destroy() self.initUIRoot() frame1 = Frame(self.frame0, relief=RAISED, borderwidth=1) frame1.pack(fill=BOTH, expand=False) frame2 = Frame(self.frame0, relief=RAISED, borderwidth=1) frame2.pack(fill=BOTH, expand=True) frame1.columnconfigure(1, weight=1) # frame1.columnconfigure(9, weight=1) frame1.columnconfigure(10, pad=7) frame1.rowconfigure(5, weight=1) frame1.rowconfigure(5, pad=7) frame2.columnconfigure(11, pad=7, weight=1) frame2.rowconfigure(8, pad=7) lbl = Label(frame1, text="催化剂性质") lbl.grid(row=0, column=0, columnspan=8, rowspan=1, sticky=W, pady=4, padx=5) # K_Mat_Tree = ttk.Treeview(frame1) # K_Mat_Tree['show'] = 'headings' # K_Mat_Tree = self.makeMatrixUI(7, K_Mat_Tree, sourceDate.K_model) # K_Mat_Tree.grid(row=1, column=0, columnspan=6, rowspan=5, sticky=E + W + S + N, pady=4, padx=5) K_Mat_Tree = Text(frame1, height=18) self.makeMatrixUI(K_Mat_Tree, self.catObj) K_Mat_Tree.configure(state='normal') K_Mat_Tree.grid(row=1, column=0, columnspan=6, rowspan=6, sticky=E + W + S + N, pady=4, padx=5) lbl = Label(frame1, text="优化方法:") lbl.grid(row=0, column=6, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) txt = Entry(frame1) txt.insert(0, self.catObj.optMethod) txt.configure(state='readonly') txt.grid(row=0, column=8, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) lbl = Label(frame1, text="集总数:") lbl.grid(row=1, column=6, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) txt = Entry(frame1) txt.insert(0, self.catObj.n) txt.configure(state='readonly') txt.grid(row=1, column=8, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) lbl = Label(frame1, text="精确度:") lbl.grid(row=2, column=6, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) txt = Entry(frame1) txt.insert(0, self.catObj.tol) txt.configure(state='readonly') txt.grid(row=2, column=8, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) cateDetailButton = Button(frame1, text="查看催化剂详情") cateDetailButton.grid(row=3, column=8) # ________________________________________ lbl = Label(frame2, text="待预测条件") lbl.grid(row=0, column=0, sticky=W, columnspan=5, rowspan=1, pady=4, padx=5) lbl = Label(frame2, text="初始组成(<1 英文逗号分割):") lbl.grid(row=1, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.Y0_input = Entry(frame2) self.Y0_input.grid(row=1, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="温度范围(K 英文逗号分割 )") lbl.grid(row=2, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.T_input = Entry(frame2) if not self.catObj.withTemp: self.T_input.insert(0, self.catObj.t) self.T_input.configure(state='readonly') self.T_input.grid(row=2, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="压力范围(KPa 英文逗号分割)") lbl.grid(row=3, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.p_input = Entry(frame2) self.p_input.grid(row=3, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="剂油比范围 (英文逗号分割)") lbl.grid(row=4, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.roil_input = Entry(frame2) self.roil_input.grid(row=4, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="停留时间范围(英文逗号分割s)") lbl.grid(row=5, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.t_input = Entry(frame2) self.t_input.grid(row=5, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="碱氮含量(<1)") lbl.grid(row=6, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.yn_input = Entry(frame2) self.yn_input.insert(0, 0.0) self.yn_input.grid(row=6, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="重芳烃含量(<1)") lbl.grid(row=7, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.ya_input = Entry(frame2) self.ya_input.grid(row=7, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="微分方程步长") lbl.grid(row=8, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.step_input = Entry(frame2) self.step_input.insert(0, 0.1) self.step_input.grid(row=8, column=2, columnspan=3, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="待预测组分编号(,)") lbl.grid(row=9, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.target = Entry(frame2) self.target.insert(0, '5,6,7') self.target.grid(row=9, column=2, columnspan=3, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="结果组成") lbl.grid(row=0, column=7, columnspan=2, rowspan=1, pady=4, padx=5, sticky=W) self.preResult_LB = Listbox(frame2) self.preResult_LB.grid(row=1, column=7, columnspan=2, rowspan=8, pady=4, padx=5, sticky=W) lbl = Label(frame2, text="最优温度:") lbl.grid(row=0, column=9, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.bestT = Entry(frame2) self.bestT.delete(0, 'end') self.bestT.configure(state='readonly') self.bestT.grid(row=0, column=11, columnspan=3, rowspan=1, sticky=W, pady=4, padx=5) lbl = Label(frame2, text="最优压力:") lbl.grid(row=1, column=9, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.bestP = Entry(frame2) self.bestP.delete(0, 'end') self.bestP.configure(state='readonly') self.bestP.grid(row=1, column=11, columnspan=3, rowspan=1, sticky=W, pady=4, padx=5) lbl = Label(frame2, text="最优剂油比:") lbl.grid(row=2, column=9, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.bestR = Entry(frame2) self.bestR.delete(0, 'end') self.bestR.configure(state='readonly') self.bestR.grid(row=2, column=11, columnspan=3, rowspan=1, sticky=W, pady=4, padx=5) lbl = Label(frame2, text="最优反应时间:") lbl.grid(row=3, column=9, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.bestTime = Entry(frame2) self.bestTime.delete(0, 'end') self.bestTime.configure(state='readonly') self.bestTime.grid(row=3, column=11, columnspan=3, rowspan=1, sticky=W, pady=4, padx=5) lbl = Label(frame2, text="目标结果:") lbl.grid(row=4, column=9, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.bestSum = Entry(frame2) self.bestSum.delete(0, 'end') self.bestSum.configure(state='readonly') self.bestSum.grid(row=4, column=11, columnspan=3, rowspan=1, sticky=W, pady=4, padx=5) cateDetailButton = Button(frame2, text="预测", command=self.doBest) cateDetailButton.grid(row=9, column=6, columnspan=2) def preUI(self): self.frame0.destroy() self.initUIRoot() frame1 = Frame(self.frame0, relief=RAISED, borderwidth=1) frame1.pack(fill=BOTH, expand=False) frame2 = Frame(self.frame0, relief=RAISED, borderwidth=1) frame2.pack(fill=BOTH, expand=True) frame1.columnconfigure(1, weight=1) # frame1.columnconfigure(9, weight=1) frame1.columnconfigure(10, pad=7) frame1.rowconfigure(5, weight=1) frame1.rowconfigure(5, pad=7) frame2.columnconfigure(8, pad=7, weight=1) frame2.rowconfigure(8, pad=7) lbl = Label(frame1, text="催化剂性质") lbl.grid(row=0, column=0, columnspan=8, rowspan=1, sticky=W, pady=4, padx=5) # K_Mat_Tree = ttk.Treeview(frame1) # K_Mat_Tree['show'] = 'headings' # K_Mat_Tree = self.makeMatrixUI(7, K_Mat_Tree, sourceDate.K_model) # K_Mat_Tree.grid(row=1, column=0, columnspan=6, rowspan=5, sticky=E + W + S + N, pady=4, padx=5) K_Mat_Tree = Text(frame1, height=18) self.makeMatrixUI(K_Mat_Tree, self.catObj) K_Mat_Tree.configure(state='normal') K_Mat_Tree.grid(row=1, column=0, columnspan=6, rowspan=6, sticky=E + W + S + N, pady=4, padx=5) lbl = Label(frame1, text="优化方法:") lbl.grid(row=0, column=6, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) txt = Entry(frame1) txt.insert(0, self.catObj.optMethod) txt.configure(state='readonly') txt.grid(row=0, column=8, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) lbl = Label(frame1, text="集总数:") lbl.grid(row=1, column=6, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) txt = Entry(frame1) txt.insert(0, self.catObj.n) txt.configure(state='readonly') txt.grid(row=1, column=8, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) lbl = Label(frame1, text="精确度:") lbl.grid(row=2, column=6, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) txt = Entry(frame1) txt.insert(0, self.catObj.tol) txt.configure(state='readonly') txt.grid(row=2, column=8, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) cateDetailButton = Button(frame1, text="查看催化剂详情") cateDetailButton.grid(row=3, column=8) # ________________________________________ lbl = Label(frame2, text="待预测条件") lbl.grid(row=0, column=0, sticky=W, columnspan=5, rowspan=1, pady=4, padx=5) lbl = Label(frame2, text="初始组成(<1 英文逗号分割):") lbl.grid(row=1, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.Y0_input = Entry(frame2) self.Y0_input.grid(row=1, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="温度(K)") lbl.grid(row=2, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.T_input = Entry(frame2) if not self.catObj.withTemp: self.T_input.insert(0, self.catObj.t) self.T_input.configure(state='readonly') self.T_input.grid(row=2, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="压力(KPa)") lbl.grid(row=3, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.p_input = Entry(frame2) self.p_input.grid(row=3, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="剂油比") lbl.grid(row=4, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.roil_input = Entry(frame2) self.roil_input.grid(row=4, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="停留时间(s)") lbl.grid(row=5, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.t_input = Entry(frame2) self.t_input.grid(row=5, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="碱氮含量(<1)") lbl.grid(row=6, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.yn_input = Entry(frame2) self.yn_input.insert(0, 0.0) self.yn_input.grid(row=6, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="重芳烃含量(<1)") lbl.grid(row=7, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.ya_input = Entry(frame2) self.ya_input.grid(row=7, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="微分方程步长") lbl.grid(row=8, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.step_input = Entry(frame2) self.step_input.insert(0, 0.1) self.step_input.grid(row=8, column=2, columnspan=3, rowspan=1, sticky=E, pady=4, padx=5) self.preResult_LB = Listbox(frame2) self.preResult_LB.grid(row=1, column=7, columnspan=2, rowspan=6, pady=4, padx=5) cateDetailButton = Button(frame2, text="预测", command=self.doPre) cateDetailButton.grid(row=8, column=7, columnspan=2) def cateUI(self): self.frame0.destroy() self.initUIRoot() frame4 = Frame(self.frame0, relief=RAISED, borderwidth=1) frame4.pack(fill=BOTH) frame1 = Frame(self.frame0, relief=RAISED, borderwidth=1) frame1.pack(fill=BOTH, expand=True) frame1.columnconfigure(0, weight=1) # frame1.columnconfigure(9, weight=1) frame1.rowconfigure(0, weight=1) lbl = Label(frame4, text="已输入温度组数") lbl.grid(row=0, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.varCountT = StringVar() self.countT = Message(frame4, textvariable=self.varCountT) self.varCountT.set('0') self.countT.grid(row=0, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) factor_Tree = ttk.Treeview(frame1) factor_Tree['show'] = 'headings' factor_Tree["columns"] = ['t_resid', 't', 'r_oil', 'p', 'Y0', 'Y_results', 'w_aro', 'w_nitro'] # factor_Tree.heading("t", text="温度") factor_Tree.column("t", width=self.winfo_width() / 8) factor_Tree.heading("r_oil", text="剂油比") factor_Tree.column("r_oil", width=self.winfo_width() / 8) factor_Tree.heading("p", text="压力") factor_Tree.column("p", width=self.winfo_width() / 8) factor_Tree.heading("Y0", text="初始组成") factor_Tree.column("Y0", width=self.winfo_width() / 8) factor_Tree.heading("Y_results", text="产物组成") factor_Tree.column("Y_results", width=self.winfo_width() / 8) factor_Tree.heading("w_aro", text="重芳烃含量") factor_Tree.column("w_aro", width=self.winfo_width() / 8) factor_Tree.heading("w_nitro", text="碱氮含量") factor_Tree.column("w_nitro", width=self.winfo_width() / 8) factor_Tree.heading("t_resid", text="停留时间") factor_Tree.column("t_resid", width=self.winfo_width() / 8) factor_Tree.grid(row=0, column=0, pady=4, padx=5) self.factor_Tree = factor_Tree frame2 = Frame(self.frame0, relief=RAISED, borderwidth=1) frame2.pack(fill=BOTH, expand=True) frame2.columnconfigure(0, weight=1) frame2.columnconfigure(8, weight=1) lbl = Label(frame2, text="停留时间(s)") lbl.grid(row=0, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.t_input = Entry(frame2) self.t_input.grid(row=0, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="温度(K)") lbl.grid(row=1, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.T_input = Entry(frame2) self.T_input.grid(row=1, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="剂油比") lbl.grid(row=2, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.roil_input = Entry(frame2) self.roil_input.grid(row=2, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="压力(KPa)") lbl.grid(row=3, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.p_input = Entry(frame2) self.p_input.grid(row=3, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="初始组成(<1 英文逗号分割):") lbl.grid(row=0, column=4, columnspan=2, rowspan=1, sticky=W, pady=4, padx=5) self.Y0_input = Entry(frame2) self.Y0_input.grid(row=0, column=6, columnspan=2, rowspan=1, sticky=W, pady=4, padx=5) lbl = Label(frame2, text="产物组成(<1 英文逗号分割):") lbl.grid(row=1, column=4, columnspan=2, rowspan=1, sticky=W, pady=4, padx=5) self.Y_results_input = Entry(frame2) self.Y_results_input.grid(row=1, column=6, columnspan=2, rowspan=1, sticky=W, pady=4, padx=5) lbl = Label(frame2, text="碱氮含量(<1)") lbl.grid(row=2, column=4, columnspan=2, rowspan=1, sticky=W, pady=4, padx=5) self.yn_input = Entry(frame2) self.yn_input.insert(0, 0.0) self.yn_input.grid(row=2, column=6, columnspan=2, rowspan=1, sticky=W, pady=4, padx=5) lbl = Label(frame2, text="重芳烃含量(<1)") lbl.grid(row=3, column=4, columnspan=2, rowspan=1, sticky=W, pady=4, padx=5) self.ya_input = Entry(frame2) self.ya_input.grid(row=3, column=6, columnspan=2, rowspan=1, sticky=W, pady=4, padx=5) lbl = Label(frame2, text="分子质量(逗号分割)") lbl.grid(row=4, column=4, columnspan=2, rowspan=1, sticky=W, pady=4, padx=5) self.Molmasses_input = Entry(frame2) self.Molmasses_input.grid(row=4, column=6, columnspan=2, rowspan=1, sticky=W, pady=4, padx=5) self.Molmasses_input.insert('0.8,1.1,1.8,0.2,0.2,0.2,0.11,0.016,0.042,0.056,0.05,0.012') addButton = Button(frame2, command=self.addFactors, text="添加条件") addButton.grid(row=9, column=2, sticky=E) self.newCatButton = Button(frame2, command=self.newCata, text="开始计算", state=DISABLED) self.newCatButton.grid(row=9, column=6, sticky=E) def graphUI(self): self.frame0.destroy() self.initUIRoot() frame1 = Frame(self.frame0, relief=RAISED, borderwidth=1) frame1.pack(fill=BOTH, expand=False) frame2 = Frame(self.frame0, relief=RAISED, borderwidth=1) frame2.pack(fill=BOTH, expand=True) frame1.columnconfigure(1, weight=1) # frame1.columnconfigure(9, weight=1) frame1.columnconfigure(10, pad=7) frame1.rowconfigure(5, weight=1) frame1.rowconfigure(5, pad=7) frame2.columnconfigure(8, pad=7, weight=1) frame2.columnconfigure(1, weight=1) frame2.columnconfigure(6, weight=1) frame2.rowconfigure(8, pad=7) lbl = Label(frame1, text="催化剂性质") lbl.grid(row=0, column=0, columnspan=8, rowspan=1, sticky=W, pady=4, padx=5) # K_Mat_Tree = ttk.Treeview(frame1) # K_Mat_Tree['show'] = 'headings' # K_Mat_Tree = self.makeMatrixUI(7, K_Mat_Tree, sourceDate.K_model) # K_Mat_Tree.grid(row=1, column=0, columnspan=6, rowspan=5, sticky=E + W + S + N, pady=4, padx=5) K_Mat_Tree = Text(frame1, height=18) self.makeMatrixUI(K_Mat_Tree, self.catObj) K_Mat_Tree.configure(state='normal') K_Mat_Tree.grid(row=1, column=0, columnspan=6, rowspan=6, sticky=E + W + S + N, pady=4, padx=5) lbl = Label(frame1, text="优化方法:") lbl.grid(row=0, column=6, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) txt = Entry(frame1) txt.insert(0, self.catObj.optMethod) txt.configure(state='readonly') txt.grid(row=0, column=8, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) lbl = Label(frame1, text="集总数:") lbl.grid(row=1, column=6, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) txt = Entry(frame1) txt.insert(0, self.catObj.n) txt.configure(state='readonly') txt.grid(row=1, column=8, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) lbl = Label(frame1, text="精确度:") lbl.grid(row=2, column=6, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) txt = Entry(frame1) txt.insert(0, self.catObj.tol) txt.configure(state='readonly') txt.grid(row=2, column=8, columnspan=2, rowspan=1, sticky=E + W + S + N, pady=4, padx=5) cateDetailButton = Button(frame1, text="查看催化剂详情") cateDetailButton.grid(row=3, column=8) # ________________________________________ lbl = Label(frame2, text="待预测条件") lbl.grid(row=0, column=0, columnspan=5, rowspan=1, pady=4, padx=5) lbl = Label(frame2, text="初始组成(<1 英文逗号分割):") lbl.grid(row=1, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.Y0_input = Entry(frame2) self.Y0_input.grid(row=1, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="温度(K)") lbl.grid(row=2, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.T_input = Entry(frame2) self.T_input.grid(row=2, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="压力(KPa)") lbl.grid(row=3, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.p_input = Entry(frame2) self.p_input.grid(row=3, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="剂油比") lbl.grid(row=4, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.roil_input = Entry(frame2) self.roil_input.grid(row=4, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="停留时间(s)") lbl.grid(row=5, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.t_input = Entry(frame2) self.t_input.grid(row=5, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="碱氮含量(<1)") lbl.grid(row=6, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.yn_input = Entry(frame2) self.yn_input.insert(0, 0.0) self.yn_input.grid(row=6, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="重芳烃含量(<1)") lbl.grid(row=7, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.ya_input = Entry(frame2) self.ya_input.grid(row=7, column=2, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="微分方程步长") lbl.grid(row=8, column=0, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.step_input = Entry(frame2) self.step_input.insert(0, 0.1) self.step_input.grid(row=8, column=2, columnspan=3, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="图表设置") lbl.grid(row=0, column=6, columnspan=5, rowspan=1, pady=4, padx=5) lbl = Label(frame2, text="条件变量") lbl.grid(row=1, column=6, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.var = ttk.Combobox(frame2, textvariable=StringVar()) if not self.catObj.withTemp: self.var['values'] = (u'压力', u'剂油比', u'停留时间') self.p_input.insert(0, 0) self.T_input.insert(0, self.catObj.t) self.T_input.configure(state='readonly') self.p_input.configure(state='readonly') self.lastVar = u'压力' else: self.T_input.delete(0, 'end') self.T_input.insert(0, 0) self.T_input.configure(state='readonly') self.var['values'] = (u'温度', u'压力', u'剂油比', u'停留时间', u'温度+压力',u'温度+剂油比',u'剂油比+压力') self.lastVar = u'温度' self.var.bind('<<ComboboxSelected>>', self.onSelecetedVar) self.var.current(0) self.var.grid(row=1, column=8, columnspan=2, rowspan=1, sticky=W, pady=4, padx=5) self.rangeLbl = Label(frame2, text="条件范围") self.rangeLbl.grid(row=2, column=6, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="上限") lbl.grid(row=3, column=6, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) lbl = Label(frame2, text="下限") lbl.grid(row=4, column=6, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.rangeMin = Entry(frame2) self.rangeMax = Entry(frame2) self.rangeMin.grid(row=3, column=8, columnspan=1, sticky=W, rowspan=1, pady=4, padx=5) self.rangeMax.grid(row=4, column=8, columnspan=1, sticky=W, rowspan=1, pady=4, padx=5) lbl = Label(frame2, text="结果集(英文逗号分割)") lbl.grid(row=5, column=6, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.chartResultId = Entry(frame2) self.chartResultId.insert(0, '1,2,3,4,5,6,7,8,9,10,11,12') self.chartResultId.grid(row=5, column=8, columnspan=3, rowspan=1, sticky=W, pady=4, padx=5) lbl = Label(frame2, text="结果名(英文逗号分割\n尽量使用英文)") lbl.grid(row=6, column=6, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.chartResultName = Entry(frame2) #TODO,get the default value from lump model self.chartResultName.insert(0, 'HS,HA,HR,DIESEL,GS,GO,GA,DGAS,LO3,LO4,LPGD,COKE') self.chartResultName.grid(row=6, column=8, columnspan=3, rowspan=1, sticky=W, pady=4, padx=5) lbl = Label(frame2, text="点数") lbl.grid(row=7, column=6, columnspan=2, rowspan=1, sticky=E, pady=4, padx=5) self.stepNum = Entry(frame2) self.stepNum.grid(row=7, column=8, columnspan=3, rowspan=1, sticky=W, pady=4, padx=5) cateDetailButton = Button(frame2, text="预测趋势", command=self.doChart) cateDetailButton.grid(row=8, column=6, columnspan=2) def onSelecetedVar(self, event): varName = self.var.get() if self.lastVar == u'温度': # u'温度',,,u'停留时间' self.T_input.configure(state="normal") elif self.lastVar == u'压力': self.p_input.configure(state="normal") elif self.lastVar == u'剂油比': self.roil_input.configure(state="normal") elif self.lastVar == u'停留时间': self.t_input.configure(state="normal") elif self.lastVar == u'温度+压力': self.T_input.configure(state="normal") self.p_input.configure(state="normal") elif self.lastVar == u'温度+剂油比': self.roil_input.configure(state="normal") self.T_input.configure(state="normal") elif self.lastVar == u'剂油比+压力': self.roil_input.configure(state="normal") self.p_input.configure(state="normal") if varName == u'温度': self.rangeLbl.config(text='条件范围') self.T_input.delete(0, 'end') self.T_input.insert(0, 0) self.T_input.configure(state="readonly") elif varName == u'压力': self.rangeLbl.config(text='条件范围') self.p_input.delete(0, 'end') self.p_input.insert(0, 0) self.p_input.configure(state="readonly") elif varName == u'剂油比': self.rangeLbl.config(text='条件范围') self.roil_input.delete(0, 'end') self.roil_input.insert(0, 0) self.roil_input.configure(state="readonly") elif varName == u'停留时间': self.rangeLbl.config(text='条件范围') self.t_input.delete(0, 'end') self.t_input.insert(0, 0) self.t_input.configure(state="readonly") elif varName == u'温度+压力': self.rangeLbl.config(text='条件范围,格式:温度,压力') self.T_input.delete(0, 'end') self.T_input.insert(0, 0) self.T_input.configure(state="readonly") self.p_input.delete(0, 'end') self.p_input.insert(0, 0) self.p_input.configure(state="readonly") elif varName == u'温度+剂油比': self.rangeLbl.config(text='条件范围,格式:温度,剂油比') self.roil_input.delete(0, 'end') self.roil_input.insert(0, 0) self.roil_input.configure(state="readonly") self.T_input.delete(0, 'end') self.T_input.insert(0, 0) self.T_input.configure(state="readonly") elif varName == u'剂油比+压力': self.rangeLbl.config(text='条件范围,格式:剂油比,压力') self.roil_input.delete(0, 'end') self.roil_input.insert(0, 0) self.roil_input.configure(state="readonly") self.p_input.delete(0, 'end') self.p_input.insert(0, 0) self.p_input.configure(state="readonly") self.lastVar = varName def onNewCata(self): self.catFactors = {} ftypes = [('集总模型', '*.lp')] dlg = tkFileDialog.Open(self, filetypes=ftypes) fl = dlg.show() # print flmakePreResultUI if fl != '': self.lumpObj = self.readFile(fl) print self.lumpObj self.cateUI() def onNewPre(self): ftypes = [('催化剂存档文件', '*.cat')] dlg = tkFileDialog.Open(self, filetypes=ftypes) fl = dlg.show() print fl if fl != '': self.catObj = self.readFile(fl) self.preUI() def onNewBest(self): ftypes = [('催化剂存档文件', '*.cat')] dlg = tkFileDialog.Open(self, filetypes=ftypes) fl = dlg.show() print fl if fl != '': self.catObj = self.readFile(fl) self.bestUI() def onNewGraph(self): ftypes = [('催化剂存档文件', '*.cat')] dlg = tkFileDialog.Open(self, filetypes=ftypes) fl = dlg.show() print fl if fl != '': self.catObj = self.readFile(fl) self.graphUI() def saveCate(self): ftypes = [('催化剂存档文件', '*.cat')] filename = tkFileDialog.asksaveasfilename(title='保存催化剂存档文件', defaultextension='.cat', filetypes=ftypes) return filename def onHelp(self): mbox.showinfo("集总模型软件", "中国石油\n兰州化工研究中心") def doPre(self): catObj = self.catObj t_resid = float(self.t_input.get()) p = float(self.p_input.get()) Y0 = numpy.mat(self.Y0_input.get().split(',')).astype(numpy.float) const_r = 8.3145 w_aro = float(self.ya_input.get()) w_nitro = float(self.yn_input.get()) t = float(self.T_input.get()) r_oil = float(self.roil_input.get()) stepLength = float(self.step_input.get()) n = catObj.n print [t_resid, p, Y0, const_r, w_aro, w_nitro, t, r_oil, n] result = newPre(catObj, t_resid, p, Y0, const_r, w_aro, w_nitro, t, r_oil, n, stepLength).tolist()[0] self.makePreResultUI(self.preResult_LB, result) def doBest(self): catObj = self.catObj t_resid = [float(self.t_input.get().split(',')[0]),float(self.t_input.get().split(',')[1])] p = [float(self.p_input.get().split(',')[0]),float(self.p_input.get().split(',')[1])] Y0 = numpy.mat(self.Y0_input.get().split(',')).astype(numpy.float) const_r = 8.3145 w_aro = float(self.ya_input.get()) w_nitro = float(self.yn_input.get()) t = [float(self.T_input.get().split(',')[0]),float(self.T_input.get().split(',')[1])] r_oil = [float(self.roil_input.get().split(',')[0]),float(self.roil_input.get().split(',')[1])] stepLength = float(self.step_input.get()) n = catObj.n target = self.target.get().split(',') print [t_resid, p, Y0, const_r, w_aro, w_nitro, t, r_oil, n,target] result = newBest(catObj, t_resid, p, Y0, const_r, w_aro, w_nitro, t, r_oil, n, stepLength,target) self.bestP.configure(state='normal') self.bestT.configure(state='normal') self.bestR.configure(state='normal') self.bestTime.configure(state='normal') self.bestSum.configure(state='normal') self.bestP.insert('end',round(result['bestP'], 4)) self.bestT.insert('end',round(result['bestT'], 4)) self.bestR.insert('end',round(result['bestR'], 4)) self.bestTime.insert('end',round(result['bestTime'], 4)) self.bestSum.insert('end',round(result['sum'], 4)) self.makePreResultUI(self.preResult_LB, result['Y']) def doChart(self): catObj = self.catObj t_resid = float(self.t_input.get()) p = float(self.p_input.get()) Y0 = numpy.mat(self.Y0_input.get().split(',')).astype(numpy.float) const_r = 8.3145 w_aro = float(self.ya_input.get()) w_nitro = float(self.yn_input.get()) t = float(self.T_input.get()) r_oil = float(self.roil_input.get()) stepNum = int(self.stepNum.get()) resultId = self.chartResultId.get() resultName = self.chartResultName.get() stepLength = float(self.step_input.get()) n = catObj.n varName = '' if self.lastVar == u'温度': varName = 't' varMin = float(self.rangeMin.get()) varMax = float(self.rangeMax.get()) elif self.lastVar == u'压力': varName = 'p' varMin = float(self.rangeMin.get()) varMax = float(self.rangeMax.get()) elif self.lastVar == u'剂油比': varName = 'r' varMin = float(self.rangeMin.get()) varMax = float(self.rangeMax.get()) elif self.lastVar == u'停留时间': varName = 'time' varMin = float(self.rangeMin.get()) varMax = float(self.rangeMax.get()) elif self.lastVar == u'温度+压力': varName = 't,p'.split(',') varMin = self.rangeMin.get().split(',') varMax = self.rangeMax.get().split(',') elif self.lastVar == u'温度+剂油比': varName = 't,r'.split(',') varMin = self.rangeMin.get().split(',') varMax = self.rangeMax.get().split(',') elif self.lastVar == u'剂油比+压力': varName = 'r,p'.split(',') varMin = self.rangeMin.get().split(',') varMax = self.rangeMax.get().split(',') chartConfig = {} chartConfig['varName'] = varName chartConfig['stepNum'] = stepNum chartConfig['varMin'] = varMin chartConfig['varMax'] = varMax chartConfig['resultId'] = resultId chartConfig['resultName'] = resultName # t_resid=3 # p=175 # const_r=8.3145 # Y0=mat([0.481,0.472,0.047,0,0,0,0]) # w_aro=0.472 # w_nitro=0 # t=685 # n=7 # r_oil=8.79 # chartConfig={'varName': 'time', 'varMax': 0.001, 'varMin': 15.0, 'resultId': '1,2,3,4,5,6,7', 'stepNum': 100,'resultName':u'Hs,Ha,Hr,柴油,汽油,气体,焦炭'} print chartConfig print [catObj, t_resid, p, Y0, const_r, w_aro, w_nitro, t, r_oil, n, chartConfig] if len(varName)>1: result = new3dChart(catObj, t_resid, p, Y0, const_r, w_aro, w_nitro, t, r_oil, n, chartConfig, stepLength) else: result = new2dChart(catObj, t_resid, p, Y0, const_r, w_aro, w_nitro, t, r_oil, n, chartConfig, stepLength) def addFactors(self): t_resid = float(self.t_input.get()) p = float(self.p_input.get()) Y0_raw = self.Y0_input.get() Y0 = numpy.mat(Y0_raw.split(',')).astype(numpy.float) Y_results_raw = self.Y_results_input.get() Y_results = numpy.mat(Y_results_raw.split(',')).astype(numpy.float) w_aro = float(self.ya_input.get()) w_nitro = float(self.yn_input.get()) t = float(self.T_input.get()) r_oil = float(self.roil_input.get()) self.Molmasses = numpy.mat(self.Molmasses_input.get().split(',')).astype(numpy.float) self.factor_Tree.insert('', END, values=[t_resid, t, r_oil, p, Y0_raw, Y_results_raw, w_aro, w_nitro]) if self.catFactors.has_key(t): self.catFactors[t].append( {'t_resid': t_resid, 't': t, 'r_oil': r_oil, 'p': p, 'Y0': Y0, 'Y_results': Y_results, 'w_aro': w_aro, 'w_nitro': w_nitro}) else: self.catFactors[t] = [ {'t_resid': t_resid, 't': t, 'r_oil': r_oil, 'p': p, 'Y0': Y0, 'Y_results': Y_results, 'w_aro': w_aro, 'w_nitro': w_nitro}] print self.catFactors self.varCountT.set(len(self.catFactors)) self.Molmasses_input.configure(state='readonly') self.newCatButton.configure(state='active') def newCata(self): filename = self.saveCate() print filename if len(self.catFactors) == 1: newCatNoKa(filename, self.lumpObj, 1, 0, 1, self.lumpObj, self.Molmasses, self.catFactors.values()[0], 'L-BFGS-B', 1e-5, self.lumpObj.shape[0]) else: newCatWithKa(filename, self.lumpObj, 1, 0, 1, self.lumpObj, self.Molmasses, self.catFactors, 'L-BFGS-B', 1e-5, self.lumpObj.shape[0]) def makeMatrixUI(self, targetTree, catObj): n = catObj.n if not catObj.withTemp: targetTree.insert('end', '催化剂模型是在同一温度下,只能计算K\n------------------\nK=\n') K = numpy.around(self.makeMatrixByResult(catObj.K_model, catObj.X0_result, catObj.n)['K_result'], 4) self.makeMatrixOutput(n, targetTree, K) targetTree.insert('end', '\n------------------\n重芳烃影响因数:\n') targetTree.insert('end', self.makeMatrixByResult(catObj.K_model, catObj.X0_result, catObj.n)['Ka']) targetTree.insert('end', '\n------------------\n碱氮影响因数:\n') targetTree.insert('end', self.makeMatrixByResult(catObj.K_model, catObj.X0_result, catObj.n)['Kn']) targetTree.insert('end', '\n------------------\n') else: K = self.makeMatrixByResult(catObj.K_model, catObj.X0_result, catObj.n)['K_result'] print catObj.X0_result Ka = numpy.around(self.makeMatrixByResult(catObj.K_model, catObj.Ka, catObj.n)['K_result'], 4) print catObj.Ka Ea = numpy.around(self.makeMatrixByResult(catObj.K_model, catObj.Ea, catObj.n)['K_result'], 4) print catObj.Ea targetTree.insert('end', '\n------------------\nK=\n') print len(K) for i in K: self.makeMatrixOutput(n, targetTree, numpy.round(i, 4)) targetTree.insert('end', '\n------------------\n') targetTree.insert('end', '\n------------------\nKa=\n') self.makeMatrixOutput(n, targetTree, Ka) targetTree.insert('end', '\n------------------\n') targetTree.insert('end', '\n------------------\nEa=\n') self.makeMatrixOutput(n, targetTree, Ea) targetTree.insert('end', '\n------------------\n') def makeMatrixOutput(self, n, targetTree, mat): for i in range(n): targetTree.insert('end', ','.join(mat[i].astype(numpy.string_).tolist())) targetTree.insert('end', '\n') return targetTree def makeMatrixByResult(self, K_model, result, n): if type(result) != type([]): K = result[:-3].tolist() args = result[-3:] K_raw_result = [] for i in K_model.T.flat: if i: K_raw_result.append(K.pop(0)) else: K_raw_result.append(0) K_result = reshape(K_raw_result, (n, n)).T.T.T ka_result, kn_result, cata_result = args return {'K_result': K_result, 'ka_result': ka_result, 'kn_result': kn_result, 'cata_result': cata_result} else: K_results = [] args = result[0][-3:] for i in result: K = i[:-3].tolist() K_raw_result = [] for i in K_model.T.flat: if i: K_raw_result.append(K.pop(0)) else: K_raw_result.append(0) K_result = reshape(K_raw_result, (n, n)).T.T.T K_results.append(K_result) ka_result, kn_result, cata_result = args return {'K_result': K_results, 'ka_result': ka_result, 'kn_result': kn_result, 'cata_result': cata_result} def makePreResultUI(self, target, result): target.delete(0, END) if type(result)!=type([]): result=result.tolist()[0] for i in result: target.insert(END, round(i, 3)) return target def readFile(self, filename): f = open(filename, "r") obj = pickle.load(f) return obj
def initUI(self): """ Initializes the user interface Setting up the entry widgets for: - Experiment_ID - Participant Name - Session Day - Pupil Size - Practice - Stereo """ # Set the title self.parent.title(EXP_NAME) # Create the label for Experiment_ID and set location label_id = Label(text='Participant ID:') label_id.place(x=20, y=20) # Check the DATA_DIR directory for previous participants # and choose the next Experiment_ID in line self.folders = listdir(DATA_DIR) # Initiate Tkinter's StringVar self.value_id = StringVar() # Set the default value self.value_id.set('001') # Going in reverse order of the participants' directories in # DATA_DIR, find the last participant's Experiment_ID and opt # for the next one in line for folder in reversed(self.folders): try: # Check if the value of the first 3 digits of the # directory name is greater than the default value if int(folder[:3]) >= int(self.value_id.get()): # Get the next Experiment_ID in integer form and # convert to string format num = str(int(folder[:3]) + 1) # Actions to perform in case scenarios for each # of the possibilites of num_length num_length = {3: num, 2: '0%s' % num, 1: '00%s' % num} # Set the value accordingly to the StringVar, # replacing the default self.value_id.set(num_length[len(num)]) # In case there are other folders in DATA_DIR, for which # the first 3 characters are not digits, we must cater # for when an exception is thrown up except ValueError: pass # Create the entry widget for Experiment_ID with the preset # value and state disabled self.input_id = Entry(self.parent, width=5, state=DISABLED, textvariable=self.value_id) self.input_id.place(x=150, y=20) # Create the label for Participant Name and set location label_name = Label(text='Participant Name:') label_name.place(x=20, y=50) # Initiate Tkinter's StringVar self.value_name = StringVar() # Set the default value self.value_name.set('') # Create the entry for Participant Name and set location self.input_name = Entry(self.parent, width=35, textvariable=self.value_name) self.input_name.place(x=150, y=50) self.input_name.focus() # Create the label for Session Day and set location label_day = Label(text='Session Day:') label_day.place(x=20, y=80) # Create value holder for Session Day as IntVar and set default # value to 1 self.value_day = IntVar() self.value_day.set(1) # Create the radiobuttons as required for day in range(1, TOTAL_SESSIONS + 1): input_day = Radiobutton(self.parent, text=str(day), variable=self.value_day, value=day) # Anchor them to the West (W) input_day.pack(anchor=W) # Choose location for the radiobuttons input_day.place(x=150, y=(50 + (day * 25))) # Create the label for Pupil Size and set location label_pupilsize = Label(text='Pupil Size:') label_pupilsize.place(x=20, y=140) self.value_pupilsize = StringVar() self.value_pupilsize.set('') # Create the MaxLengthEntry for Pupil Size and set location # The maximum length is set to 3 characters and a float must be # provided self.input_pupilsize = MaxLengthEntry(self.parent, width=5, maxlength=3, required_type=float) self.input_pupilsize.config(textvariable=self.value_pupilsize) self.input_pupilsize.place(x=150, y=140) # Create value folder for Practice as IntVar self.value_practice = IntVar() # Create the checkbutton for Practice and set location input_practice = Checkbutton(self.parent, text='Practice', variable=self.value_practice, onvalue=1, offvalue=0) input_practice.place(x=150, y=170) # Create value holder for Stereo as IntVar self.value_stereo = IntVar() # Create the checkbutton for Stereo and set location input_stereo = Checkbutton(self.parent, text='Stereo', variable=self.value_stereo, onvalue=1, offvalue=0) input_stereo.place(x=150, y=200) # Create the label for Previous Subjects and set location label_previous = Label(text='Previous Subjects:') label_previous.place(x=20, y=250) # Create the Listboc containing all the previous participants self.input_previous = Listbox(self.parent, width=35, height=10) for identifier in self.folders: self.input_previous.insert(END, identifier) self.input_previous.place(x=150, y=250) self.input_previous.bind('<<ListboxSelect>>', self.__select_previous) # Create the submit button, give command upon pressing and set # location submit = Button(text='Submit', width=47, command=self.gather_input) submit.pack(padx=8, pady=8) submit.place(x=20, y=425)
class Ordered_Listbox(Frame): def __init__(self, master, data=None, ascending_order=True, ignore_case=False, autoscroll=False, vscrollbar=True, hscrollbar=False, scrollbar_background=None, scrollbar_troughcolor=None, **kwargs): Frame.__init__(self, master) self._ignore_case = ignore_case self._ascending_order = ascending_order master.grid_rowconfigure(0, weight=1) master.grid_columnconfigure(0, weight=1) self._listbox = Listbox(self, *kwargs) self._listbox.grid(row=0, column=0, sticky=N + E + W + S) scrollbar_kwargs = {} if scrollbar_background is not None: scrollbar_kwargs["background"] = scrollbar_background if scrollbar_troughcolor is not None: scrollbar_kwargs["throughcolor"] = scrollbar_troughcolor if vscrollbar: self._vbar = Scrollbar(self, takefocus=0, command=self._listbox.yview, **scrollbar_kwargs) self._vbar.grid(row=0, column=1, sticky=N + S) if autoscroll: self._listbox.config(yscrollcommand=lambda f, l: make_autoscroll(self._vbar, f, l)) else: self._listbox.config(yscrollcommand=self._vbar.set) if hscrollbar: self._hbar = Scrollbar(self, takefocus=0, command=self._listbox.xview, **scrollbar_kwargs) self._hbar.grid(row=0, column=1, sticky=E + W) if autoscroll: self._listbox.config(xscrollcommand=lambda f, l: make_autoscroll(self._hbar, f, l)) else: self._listbox.config(xscrollcommand=self._hbar.set) if data is not None: for item in data: self.add_item(item) def add_item(self, item): list_of_items = self._listbox.get(0, END) index = bisect(list_of_items, item, ignore_case=self._ignore_case, ascending_order=self._ascending_order) self._listbox.insert(index, item) def delete_item(self, item): list_of_items = self._listbox.get(0, END) index = bisect(list_of_items, item, ignore_case=self._ignore_case, ascending_order=self._ascending_order) self._listbox.delete(index - 1) def selected_items(self): list_of_items = [] for index in self._listbox.curselection(): list_of_items.append(self._listbox.get(index)) return list_of_items def selected_item(self): return self._listbox.curselection()[0] def deselect_all(self): self._listbox.selection_clear(0, END) def select(self, item): index = self.index(item) if index is None: return self._listbox.selection_set(index) def deselect(self, item): index = self.index(item) if index is None: return self._listbox.selection_clear(index) def index(self, item): list_of_items = self._listbox.get(0, END) try: index = list_of_items.index(item) except ValueError: return None return index def bind(self, event, handler): self._listbox.bind(event, handler) def clear(self): self._listbox.delete(1, END) def __iter__(self): return self.items @property def items(self): return self._listbox.get(0, END)
class Gamelist(): def __init__(self, drive, platform): GameListData.game_list_data_json = GameListData().get_game_list() self.json_game_list_data = GameListData.game_list_data_json if drive == 'USB(*)': self.drive_to_show = '/dev_' + drive.lower().replace('(*)', '') else: self.drive_to_show = '/dev_' + drive.lower() + '/' self.platform_to_show = platform + '_games' self.WCM_BASE_PATH = AppPaths.wcm_gui self.last_selection = (None, 0) self.list_of_items = [] self.selected_title_id = None self.selected_title = None self.selected_path = None self.selected_filename = None self.drive_system_path_array = None self.is_cleared = False def create_main_frame(self, entry_field_title_id, entry_field_title, entry_field_filename, entry_field_iso_path, entry_field_platform, drive_system_array): self.entry_field_title_id = entry_field_title_id self.entry_field_title = entry_field_title self.entry_field_filename = entry_field_filename self.entry_field_iso_path = entry_field_iso_path self.entry_field_platform = entry_field_platform self.drive_system_path_array = drive_system_array self.corrected_index = [] self.main_frame = Frame() self.popup_menu = Menu(self.main_frame, tearoff=0) self.popup_menu.add_command(label="Delete", command=self.delete_selected) self.popup_menu.add_command(label="Rename", command=self.rename_selected) # self.popup_menu.add_command(label="Refetch", # command=self.refetch) # self.popup_menu.add_command(label="Select All", # command=self.select_all) s = Scrollbar(self.main_frame) self._listbox = Listbox(self.main_frame, width=465) self._listbox.bind('<Enter>', self._bound_to_mousewheel) self._listbox.bind('<Leave>', self._unbound_to_mousewheel) self._listbox.bind("<Button-3>", self.popup) # Button-2 on Aqua s.pack(side=RIGHT, fill=Y) self._listbox.pack(side=LEFT, fill=Y) s['command'] = self._listbox.yview self._listbox['yscrollcommand'] = s.set # default filters if 'ALL_games' == self.platform_to_show: # iterate all platforms for platform in self.json_game_list_data: for list_game in self.json_game_list_data[platform]: # titles in the list has been designed to be unique if '/dev_all/' == self.drive_to_show or self.drive_to_show in list_game['path']: self.add_item(list_game['title']) else: for list_game in self.json_game_list_data[self.platform_to_show]: if '/dev_all/' == self.drive_to_show or self.drive_to_show in list_game['path']: self.add_item(list_game['title']) for x in range(19 - self._listbox.size()): self.add_item('') # adding shade to every other row of the list for x in range(0, self._listbox.size()): if x % 2 == 0: self._listbox.itemconfig(x, {'fg': 'white'}, background='#001738') else: self._listbox.itemconfig(x, {'fg': 'white'}, background='#001F4C') self.label = Label(self.main_frame) self.selection_poller() return self.main_frame def selection_poller(self): self.label.after(200, self.selection_poller) self.new_selection = self._listbox.curselection() # cursor har been initiated if self._listbox.curselection() is not (): if self.new_selection[0] is not self.last_selection[0] or self.is_cleared: self.entry_fields_update(self.new_selection) self.is_cleared = False self.last_selection = self.new_selection def entry_fields_update(self, new_selection): for platform in self.json_game_list_data: for list_game in self.json_game_list_data[platform]: self.selected_title = self._listbox.get(new_selection[0]) tmp_title = list_game['title'] match = self.selected_title == str(tmp_title) if match: self.selected_title_id = str(list_game['title_id']).replace('-', '') self.selected_title = str(list_game['title']) self.selected_path = str(list_game['path']) self.selected_filename = str(list_game['filename']) self.selected_platform = str(list_game['platform']) # parse drive and system from json data path_array = filter(None, self.selected_path.split('/')) self.drive_system_path_array[0] = path_array[0] self.drive_system_path_array[1] = path_array[1] self.drive_system_path_array[2] = '/'.join(path_array[2:len(path_array)]).replace('//', '') self.entry_field_title_id.delete(0, len(self.entry_field_title_id.get())-1) self.entry_field_title_id.delete(0, END) self.entry_field_title_id.insert(0, self.selected_title_id) self.entry_field_title.delete(0, END) self.entry_field_title.insert(0, self.selected_title) self.entry_field_filename.delete(0, END) self.entry_field_filename.insert(0, self.selected_filename) self.entry_field_platform.delete(0, END) self.entry_field_platform.insert(0, self.selected_platform) return True def get_selected_path(self): return self.current_iso_path def get_listbox(self): return self._listbox def get_ascending_index(self, list_of_items, item, ignore_case=True): lo = 0 hi = len(list_of_items) if ignore_case: item = item.lower() while lo < hi: mid = (lo + hi) // 2 if item < list_of_items[mid].lower(): hi = mid else: lo = mid + 1 else: while lo < hi: mid = (lo + hi) // 2 if item < list_of_items[mid]: hi = mid else: lo = mid + 1 return lo def add_item(self, item): if item != '': self.list_of_items = self._listbox.get(0, END) # getting ascending index in order to sort alphabetically index = self.get_ascending_index(self.list_of_items, item) self._listbox.insert(index, item) else: self._listbox.insert(END, item) def get_items(self): return self.list_of_items def _bound_to_mousewheel(self, event): self._listbox.bind_all("<MouseWheel>", self._on_mousewheel) def _unbound_to_mousewheel(self, event): self._listbox.unbind_all("<MouseWheel>") def _on_mousewheel(self, event): self._listbox.yview_scroll(int(-1*(event.delta/30)), "units") def popup(self, event): try: self._listbox.selection_clear(0, END) self._listbox.selection_set(self._listbox.nearest(event.y)) self._listbox.activate(self._listbox.nearest(event.y)) finally: if self._listbox.get(self._listbox.curselection()[0]) is not '': self.popup_menu.tk_popup(event.x_root + 43, event.y_root + 12, 0) self.popup_menu.grab_release() self.popup_menu.focus_set() def delete_selected(self): import tkMessageBox game_folder_path = os.path.join(AppPaths.game_work_dir, '..') response = tkMessageBox.askyesno('Delete game folder', 'Delete \'' + self.entry_field_title.get() + '\'?\n\nFolder path: ' + os.path.realpath(game_folder_path)) # yes if response: # remove game from visual game list for i in self._listbox.curselection()[::-1]: self._listbox.delete(i) removed_index = i # remove game from json game list platform_key = self.entry_field_platform.get() + '_games' self.json_game_list_data[platform_key] = [x for x in self.json_game_list_data[platform_key] if x['title'] != self.selected_title] # update the json game list file with open(GameListData.GAME_LIST_DATA_PATH, 'w') as newFile: json_text = json.dumps(self.json_game_list_data, indent=4, separators=(",", ":")) newFile.write(json_text) # remove the game build folder too if AppPaths.game_work_dir != os.path.join(AppPaths.wcm_gui, 'work_dir'): if os.path.isdir(game_folder_path): if 'webman-classics-maker' in game_folder_path: shutil.rmtree(game_folder_path) # clear entry_fields self.clear_entries_and_path() # set cursor self._listbox.select_set(removed_index) #This only sets focus on the first item. def rename_selected(self): self.entry_field_title.selection_range(0, END) self.entry_field_title.focus_set() def select_all(self): self._listbox.selection_set(0, 'end') def clear_entries_and_path(self): self.entry_field_title_id.delete(0, len(self.entry_field_title_id.get())-1) self.entry_field_title_id.delete(0, END) self.entry_field_title.delete(0, END) self.entry_field_platform.delete(0, END) self.entry_field_filename.delete(0, END) self.is_cleared = True def get_selected_build_dir_path(self): self.build_dir_path = '' if self.selected_filename not in {'', None}: filename = self.selected_filename title_id = self.selected_title_id.replace('-', '') build_base_path = AppPaths.builds tmp_filename = filename # removes the file extension from tmp_filename for file_ext in GlobalVar.file_extensions: if filename.upper().endswith(file_ext): tmp_filename = filename[0:len(filename)-len(file_ext)] break game_folder_name = tmp_filename.replace(' ', '_') + '_(' + title_id.replace('-', '') + ')' self.build_dir_path = os.path.join(build_base_path, game_folder_name) return self.build_dir_path
class Participant(object): """ Creates the input frame and stores the information regarding the participant """ def __init__(self, parent, *args, **kwargs): """ Initialize the input frame and call to inititialize the user interface """ # Set the Tk as the parent self.parent = parent # Initialize the user interface self.initUI() def initUI(self): """ Initializes the user interface Setting up the entry widgets for: - Experiment_ID - Participant Name - Session Day - Pupil Size - Practice - Stereo """ # Set the title self.parent.title(EXP_NAME) # Create the label for Experiment_ID and set location label_id = Label(text='Participant ID:') label_id.place(x=20, y=20) # Check the DATA_DIR directory for previous participants # and choose the next Experiment_ID in line self.folders = listdir(DATA_DIR) # Initiate Tkinter's StringVar self.value_id = StringVar() # Set the default value self.value_id.set('001') # Going in reverse order of the participants' directories in # DATA_DIR, find the last participant's Experiment_ID and opt # for the next one in line for folder in reversed(self.folders): try: # Check if the value of the first 3 digits of the # directory name is greater than the default value if int(folder[:3]) >= int(self.value_id.get()): # Get the next Experiment_ID in integer form and # convert to string format num = str(int(folder[:3]) + 1) # Actions to perform in case scenarios for each # of the possibilites of num_length num_length = {3: num, 2: '0%s' % num, 1: '00%s' % num} # Set the value accordingly to the StringVar, # replacing the default self.value_id.set(num_length[len(num)]) # In case there are other folders in DATA_DIR, for which # the first 3 characters are not digits, we must cater # for when an exception is thrown up except ValueError: pass # Create the entry widget for Experiment_ID with the preset # value and state disabled self.input_id = Entry(self.parent, width=5, state=DISABLED, textvariable=self.value_id) self.input_id.place(x=150, y=20) # Create the label for Participant Name and set location label_name = Label(text='Participant Name:') label_name.place(x=20, y=50) # Initiate Tkinter's StringVar self.value_name = StringVar() # Set the default value self.value_name.set('') # Create the entry for Participant Name and set location self.input_name = Entry(self.parent, width=35, textvariable=self.value_name) self.input_name.place(x=150, y=50) self.input_name.focus() # Create the label for Session Day and set location label_day = Label(text='Session Day:') label_day.place(x=20, y=80) # Create value holder for Session Day as IntVar and set default # value to 1 self.value_day = IntVar() self.value_day.set(1) # Create the radiobuttons as required for day in range(1, TOTAL_SESSIONS + 1): input_day = Radiobutton(self.parent, text=str(day), variable=self.value_day, value=day) # Anchor them to the West (W) input_day.pack(anchor=W) # Choose location for the radiobuttons input_day.place(x=150, y=(50 + (day * 25))) # Create the label for Pupil Size and set location label_pupilsize = Label(text='Pupil Size:') label_pupilsize.place(x=20, y=140) self.value_pupilsize = StringVar() self.value_pupilsize.set('') # Create the MaxLengthEntry for Pupil Size and set location # The maximum length is set to 3 characters and a float must be # provided self.input_pupilsize = MaxLengthEntry(self.parent, width=5, maxlength=3, required_type=float) self.input_pupilsize.config(textvariable=self.value_pupilsize) self.input_pupilsize.place(x=150, y=140) # Create value folder for Practice as IntVar self.value_practice = IntVar() # Create the checkbutton for Practice and set location input_practice = Checkbutton(self.parent, text='Practice', variable=self.value_practice, onvalue=1, offvalue=0) input_practice.place(x=150, y=170) # Create value holder for Stereo as IntVar self.value_stereo = IntVar() # Create the checkbutton for Stereo and set location input_stereo = Checkbutton(self.parent, text='Stereo', variable=self.value_stereo, onvalue=1, offvalue=0) input_stereo.place(x=150, y=200) # Create the label for Previous Subjects and set location label_previous = Label(text='Previous Subjects:') label_previous.place(x=20, y=250) # Create the Listboc containing all the previous participants self.input_previous = Listbox(self.parent, width=35, height=10) for identifier in self.folders: self.input_previous.insert(END, identifier) self.input_previous.place(x=150, y=250) self.input_previous.bind('<<ListboxSelect>>', self.__select_previous) # Create the submit button, give command upon pressing and set # location submit = Button(text='Submit', width=47, command=self.gather_input) submit.pack(padx=8, pady=8) submit.place(x=20, y=425) def __select_previous(self, event): """ Handle scenario where user selects one of the previous participants """ # Collect from previous subjects, if it was chosen self.previous = self.input_previous.curselection() if self.previous: self.previous = self.folders[int(self.previous[0])] with open(join(DATA_DIR, self.previous, 'data.json')) as f: data = load(f) # Set the value for participant ID self.value_id.set(data['ID']) # Set the value for name and disable the user from making # any more changes self.value_name.set(data['Name']) self.input_name.config(state=DISABLED) # Set the value for pupilsize and disable the user from # making any more changes self.value_pupilsize.set(data['Pupil Size']) self.input_pupilsize.config(state=DISABLED) def gather_input(self): """ Gather the input from the Tkinter window and store it as class variables of the Participant class This module will also create a folder for the participant if it does not exist already in DATA_DIR NOTE: DATA_DIR is set in settings.py """ # Collect all the values input and convert to their appropriate # types self.subject_id = self.input_id.get() self.name = self.input_name.get().title() self.day = int(self.value_day.get()) try: self.pupilsize = float(self.input_pupilsize.get()) except ValueError: pass self.practice = bool(self.value_practice.get()) self.stereo = bool(self.value_stereo.get()) # Destroy the Tkinter window self.parent.destroy() # Put together the directory name and path self.subject_dir = '%s_%s' % (self.subject_id, self.name.replace(' ', '')) self.subject_dir = join(DATA_DIR, self.subject_dir) # If the directory for the participant does not exist, create it if not exists(self.subject_dir): makedirs(self.subject_dir)
class App(tk.Frame): def __init__(self, master, *args, **kw): super().__init__(master, *args, **kw) self.root = master self.master.title('Rebuild List') # Width, Height of application self.master.geometry("775x700") self.store = Combobox_Autocomplete self.alldicts = {} self.create_widgets() self.create_widgets1() self.refresh_button() def create_widgets(self, *args): # Calculate button self.imgtitle = ImageTk.PhotoImage( Image.open( 'C:\\Users\\Chris\\PycharmProjects\\untitled\\snapsrebuild.png' )) self.lab = tk.Label(image=self.imgtitle) self.lab.grid(row=0, column=3, padx=20, pady=20) # Heading Labels # Consumable Label self.consume_label = tk.Label(self.root, text='Items:', font=('Arial', 12, 'bold')) self.consume_label.grid(row=1, column=0, columnspan=3, padx=50) # Rebuild List Center Text self.consume_label = tk.Label(self.root, text='Rebuild List', font=('Arial', 12, 'bold')) self.consume_label.grid(row=1, column=3, padx=50) # Armour Text self.consume_label = tk.Label(self.root, text='items:', font=('Arial', 12, 'bold')) self.consume_label.grid(row=1, column=5, columnspan=3, padx=50) ####################################################################################################################### # Left Side buttons and input ####################################################################################################################### # 111111 # Check Button Number One self.is_checked = IntVar() self.option_yes = tk.Checkbutton(self.root, text="", onvalue=1, offvalue=0, variable=self.is_checked, command=self.callback) self.option_yes.grid(row=2, column=0, padx=15) # Entry Label To the right of the checkbox self.entry_0 = tk.StringVar() self.combobox_autocomplete = Combobox_Autocomplete( self.root, list_of_items, textvariable=self.entry_0, highlightthickness=1) self.combobox_autocomplete.grid(row=2, column=1) # Insert button self.insert_butt = tk.Button(self.root, text='Insert', command=lambda: self.commando()) self.insert_butt.grid(row=2, column=2, padx=10) ######################################################################################################################## # Check Button Number Two 22222 self.is_checked1 = IntVar() self.option_yes1 = tk.Checkbutton(self.root, text="", onvalue=1, offvalue=0, variable=self.is_checked1, command=self.callback1) self.option_yes1.grid(row=3, column=0, padx=15) # Entry Label To the right of the checkbox self.entry_1 = tk.StringVar() self.combobox_autocomplete1 = Combobox_Autocomplete( self.root, list_of_items, textvariable=self.entry_1, highlightthickness=1) self.combobox_autocomplete1.grid(row=3, column=1) # Insert button self.insert_butt1 = tk.Button(self.root, text='Insert', command=lambda: self.commando1()) self.insert_butt1.grid(row=3, column=2, padx=10) ######################################################################################################################## # Check Button Number Three 3333333 self.is_checked2 = IntVar() self.option_yes2 = tk.Checkbutton(self.root, text="", onvalue=1, offvalue=0, variable=self.is_checked2, command=self.callback2) self.option_yes2.grid(row=4, column=0, padx=15) # Entry Label To the right of the checkbox self.entry_2 = tk.StringVar() self.combobox_autocomplete2 = Combobox_Autocomplete( self.root, list_of_items, textvariable=self.entry_2, highlightthickness=1) self.combobox_autocomplete2.grid(row=4, column=1) # Insert button self.insert_butt2 = tk.Button(self.root, text='Insert', command=lambda: self.commando2()) self.insert_butt2.grid(row=4, column=2, padx=10) ######################################################################################################################## # Check Button Number Four 4444444 self.is_checked3 = IntVar() self.option_yes3 = tk.Checkbutton(self.root, text="", onvalue=1, offvalue=0, variable=self.is_checked3, command=self.callback3) self.option_yes3.grid(row=5, column=0, padx=15) # Entry Label To the right of the checkbox self.entry_3 = tk.StringVar() self.combobox_autocomplete3 = Combobox_Autocomplete( self.root, list_of_items, textvariable=self.entry_3, highlightthickness=1) self.combobox_autocomplete3.grid(row=5, column=1) # Insert button self.insert_butt3 = tk.Button(self.root, text='Insert', command=lambda: self.commando3()) self.insert_butt3.grid(row=5, column=2, padx=10) ######################################################################################################################## # Parts list (listbox) LISTBOX: self.list_box = Listbox(self.root, border=0, width=40, height=20, justify='center') self.list_box.grid(row=2, rowspan=5, column=3, pady=5) # Create scrollbar self.scrollbar = tk.Scrollbar(self.root) self.scrollbar.grid(row=3, column=4) # Set scrollbar to parts self.list_box.configure(yscrollcommand=self.scrollbar.set) self.scrollbar.configure(command=self.list_box.yview) ######################################################################################################################## # LEFT SIDE FUNCTIONS ######################################################################################################################## # Insert Button On the left right def commando(self): x = 'Consumables' self.alldicts.update({x: (self.entry_0.get())}) self.list_box.delete(0) self.list_box.insert(0, self.entry_0.get()) for (key, value) in self.alldicts.items(): print(key, "::", value) return () def commando1(self): x = 'Consumables1' self.alldicts.update({x: (self.entry_1.get())}) self.list_box.delete(1) self.list_box.insert(1, self.entry_1.get()) for (key, value) in self.alldicts.items(): print(key, "::", value) return () # Insert Button On the left right def commando2(self): x = 'Consumables2' self.alldicts.update({x: (self.entry_2.get())}) self.list_box.delete(2) self.list_box.insert(2, self.entry_2.get()) for (key, value) in self.alldicts.items(): print(key, "::", value) return () # Insert Button On the left right def commando3(self): x = 'Consumables3' self.alldicts.update({x: (self.entry_3.get())}) self.list_box.delete(3) self.list_box.insert(3, self.entry_3.get()) for (key, value) in self.alldicts.items(): print(key, "::", value) return () ####################################################################################################################### def callback(self): if self.is_checked.get(): self.list_box.itemconfig(0, {'bg': 'green'}) else: self.list_box.itemconfig(0, {'bg': '#ffffff'}) def callback1(self): if self.is_checked1.get(): self.list_box.itemconfig(1, {'bg': 'green'}) else: self.list_box.itemconfig(1, {'bg': '#ffffff'}) def callback2(self): if self.is_checked2.get(): self.list_box.itemconfig(2, {'bg': 'green'}) else: self.list_box.itemconfig(2, {'bg': '#ffffff'}) def callback3(self): if self.is_checked3.get(): self.list_box.itemconfig(3, {'bg': 'green'}) else: self.list_box.itemconfig(3, {'bg': '#ffffff'}) ######################################################################################################################## # RIGHT SIDE BUTTONS AND LABELS ######################################################################################################################## # 5555555 def create_widgets1(self, *args): # Check Button Number One self.is_checked4 = IntVar() self.option_yes4 = tk.Checkbutton(self.root, text="", onvalue=1, offvalue=0, variable=self.is_checked4, command=self.callback4) self.option_yes4.grid(row=2, column=7, padx=15) # Entry Label To the right of the checkbox self.entry_4 = tk.StringVar() self.combobox_autocomplete4 = Combobox_Autocomplete( self.root, list_of_items, textvariable=self.entry_4, highlightthickness=1) self.combobox_autocomplete4.grid(row=2, column=6) # Insert button self.insert_butt4 = tk.Button(self.root, text='Insert', command=lambda: self.commando4()) self.insert_butt4.grid(row=2, column=5, padx=10) ######################################################################################################################## # Check Button Number Two 666666 self.is_checked5 = IntVar() self.option_yes5 = tk.Checkbutton(self.root, text="", onvalue=1, offvalue=0, variable=self.is_checked5, command=self.callback5) self.option_yes5.grid(row=3, column=7, padx=15) # Entry Label To the right of the checkbox self.entry_5 = tk.StringVar() self.combobox_autocomplete5 = Combobox_Autocomplete( self.root, list_of_items, textvariable=self.entry_5, highlightthickness=1) self.combobox_autocomplete5.grid(row=3, column=6) # Insert button self.insert_butt5 = tk.Button(self.root, text='Insert', command=lambda: self.commando5()) self.insert_butt5.grid(row=3, column=5, padx=10) ######################################################################################################################## # Check Button Number Three 777777 self.is_checked6 = IntVar() self.option_yes6 = tk.Checkbutton(self.root, text="", onvalue=1, offvalue=0, variable=self.is_checked6, command=self.callback6) self.option_yes6.grid(row=4, column=7, padx=15) # Entry Label To the right of the checkbox self.entry_6 = tk.StringVar() self.combobox_autocomplete6 = Combobox_Autocomplete( self.root, list_of_items, textvariable=self.entry_6, highlightthickness=1) self.combobox_autocomplete6.grid(row=4, column=6) # Insert button self.insert_butt6 = tk.Button(self.root, text='Insert', command=lambda: self.commando6()) self.insert_butt6.grid(row=4, column=5, padx=10) ######################################################################################################################## # Check Button Number Four 888888 self.is_checked7 = IntVar() self.option_yes7 = tk.Checkbutton(self.root, text="", onvalue=1, offvalue=0, variable=self.is_checked7, command=self.callback7) self.option_yes7.grid(row=5, column=7, padx=15) # Entry Label To the right of the checkbox self.entry_7 = tk.StringVar() self.combobox_autocomplete7 = Combobox_Autocomplete( self.root, list_of_items, textvariable=self.entry_7, highlightthickness=1) self.combobox_autocomplete7.grid(row=5, column=6) # Insert button self.insert_butt7 = tk.Button(self.root, text='Insert', command=lambda: self.commando7()) self.insert_butt7.grid(row=5, column=5, padx=10) ######################################################################################################################## # FUNCTIONS FOR THE RIGHT SIDE ######################################################################################################################## # Insert Buttons on the right side def commando4(self): x = 'Consumables' self.alldicts.update({x: (self.entry_4.get())}) self.list_box.delete(4) self.list_box.insert(4, self.entry_4.get()) for (key, value) in self.alldicts.items(): print(key, "::", value) return () def commando5(self): x = 'Consumables1' self.alldicts.update({x: (self.entry_5.get())}) self.list_box.delete(5) self.list_box.insert(5, self.entry_5.get()) for (key, value) in self.alldicts.items(): print(key, "::", value) return () def commando6(self): x = 'Consumables1' self.alldicts.update({x: (self.entry_6.get())}) self.list_box.delete(6) self.list_box.insert(6, self.entry_6.get()) for (key, value) in self.alldicts.items(): print(key, "::", value) return () def commando7(self): x = 'Consumables1' self.alldicts.update({x: (self.entry_7.get())}) self.list_box.delete(7) self.list_box.insert(7, self.entry_7.get()) for (key, value) in self.alldicts.items(): print(key, "::", value) return () ######################################################################################################################## def callback4(self): if self.is_checked4.get(): self.list_box.itemconfig(4, {'bg': 'green'}) else: self.list_box.itemconfig(4, {'bg': '#ffffff'}) def callback5(self): if self.is_checked5.get(): self.list_box.itemconfig(5, {'bg': 'green'}) else: self.list_box.itemconfig(5, {'bg': '#ffffff'}) def callback6(self): if self.is_checked6.get(): self.list_box.itemconfig(6, {'bg': 'green'}) else: self.list_box.itemconfig(6, {'bg': '#ffffff'}) def callback7(self): if self.is_checked7.get(): self.list_box.itemconfig(7, {'bg': 'green'}) else: self.list_box.itemconfig(7, {'bg': '#ffffff'}) ######################################################################################################################### # Refresh button def refresh_button(self, *args): self.refresher = tk.Button(self.root, text='Refresh', command=lambda: self.refresh()) self.refresher.grid(row=7, column=3, pady=10) # Need to refresh the colours that have been checked already, must clear the list box. def refresh(self, *args): self.list_box.delete(0, END) self.combobox_autocomplete.delete(0, "end") self.combobox_autocomplete1.delete(0, "end") self.combobox_autocomplete2.delete(0, "end") self.combobox_autocomplete3.delete(0, "end") self.combobox_autocomplete4.delete(0, "end") self.combobox_autocomplete5.delete(0, "end") self.combobox_autocomplete6.delete(0, "end") self.combobox_autocomplete7.delete(0, "end")
class App(tk.Frame): def __init__(self, master, *args, **kw): super().__init__(master, *args, **kw) self.root = master self.master.title('Rebuild List') # Width, Height of application self.master.geometry("575x600") self.store = Combobox_Autocomplete self.alldicts = {} self.create_widgets() self.create_widgets1() def create_widgets(self, *args): # Image self.imgtitle = ImageTk.PhotoImage(Image.open('snapsrebuild.png')) self.lab = tk.Label(image=self.imgtitle) self.lab.grid(row=0, column=0, columnspan=6, padx=20, pady=20) # Supplies Label self.consume_label = tk.Label(self.root, text='Supplies:', font=('Arial', 12, 'bold')) self.consume_label.grid(row=1, column=0, columnspan=2, padx=50) # AutoCompleteBox self.entry_0 = tk.StringVar() self.combobox_autocomplete = Combobox_Autocomplete(self.root, list_of_items, textvariable=self.entry_0, width=32, highlightthickness=1) self.combobox_autocomplete.grid(row=2, column=0, sticky="W", padx=20, pady=10) # Insert Button self.insert_butt = tk.Button(self.root, text='Insert', command=lambda: self.commando()) self.insert_butt.place(x=220, y=155) # List Box self.list_box = Listbox(self.root, border=1, width=40, height=20, justify='center') self.list_box.grid(row=3, rowspan=5, column=0, padx=20) # Delete Button self.del_button = tk.Button(self.root, text='Delete', command=lambda: self.delbutton()) self.del_button.place(x=175, y=520) # Check Button self.check_button = tk.Button(self.root, text='Check', command=lambda: self.checkbutton()) self.check_button.place(x=50, y=520) # Uncheck Button self.uncheck_button = tk.Button(self.root, text='Uncheck', command=lambda: self.uncheckbutton()) self.uncheck_button.place(x=105, y=520) self.list_box.insert(END, "Dragon Claws") self.list_box.insert(END, "Super Combat Potions") def delbutton(self): self.list_box.delete(ACTIVE) def checkbutton(self): self.list_box.itemconfig(ACTIVE, {'bg': 'green'}) def uncheckbutton(self): self.list_box.itemconfig(ACTIVE, {'bg': '#ffffff'}) # def commando(self): # x = 'Consumables' # self.alldicts.update({x: (self.entry_0.get())}) # self.list_box.insert(END, self.entry_0.get()) # for (key, value) in self.alldicts.items(): # print(key, "::", value) # return () ####################################################################################################################### def create_widgets1(self): # Gear Label self.consume_label1 = tk.Label(self.root, text='Gear', font=('Arial', 12, 'bold')) self.consume_label1.grid(row=1, column=2, padx=50) self.entry_1 = tk.StringVar() self.combobox_autocomplete1 = Combobox_Autocomplete(self.root, list_of_items, textvariable=self.entry_1, width=32, highlightthickness=1) self.combobox_autocomplete1.grid(row=2, column=2, padx=20, pady=10, sticky="W") # Insert Button self.insert_butt1 = tk.Button(self.root, text='Insert', command=lambda: self.commando1()) self.insert_butt1.place(x=505, y=155) # List Box self.list_box1 = Listbox(self.root, border=1, width=40, height=20) self.list_box1.grid(row=3, rowspan=5, column=2, padx=20) # Delete Button self.del_button1 = tk.Button(self.root, text='Delete', command=lambda: self.delbutton1()) self.del_button1.place(x=502, y=520) # Check Button self.check_button1 = tk.Button(self.root, text='Check', command=lambda: self.checkbutton1()) self.check_button1.place(x=305, y=520) # Uncheck Button self.uncheck_button1 = tk.Button(self.root, text='Uncheck', command=lambda: self.uncheckbutton1()) self.uncheck_button1.place(x=400, y=520) self.headers = [" ITEM", " PRICE"] self.row_format = "{:<8} {:>8}" self.list_box1.insert(0, self.row_format.format(*self.headers, sp=" " * 6)) self.list_box1.insert(1, '-----------------------------------------------------------') def delbutton1(self): self.list_box1.delete(ACTIVE) def checkbutton1(self): self.list_box1.itemconfig(ACTIVE, {'bg': 'green'}) def uncheckbutton1(self): self.list_box1.itemconfig(ACTIVE, {'bg': '#ffffff'}) def commando1(self): x = 'Gear' self.alldicts.update({x: (self.entry_1.get())}) for (key, value) in self.alldicts.items(): print(key, "::", value) for item in names: if item in self.entry_1.get(): indexNumber = names.index(self.entry_1.get()) print(indexNumber) self.priceIndex = prices[indexNumber] self.ent = self.entry_1.get() self.headers1 = [self.ent,' ', f"{self.priceIndex:,d}"] self.row_format1 = "{:<8} {:>8} {:>8}" self.list_box1.insert(END, self.row_format1.format(*self.headers1)) return ()
def create_main_frame(self, entry_field_title_id, entry_field_title, entry_field_filename, entry_field_iso_path, entry_field_platform, drive_system_array): self.entry_field_title_id = entry_field_title_id self.entry_field_title = entry_field_title self.entry_field_filename = entry_field_filename self.entry_field_iso_path = entry_field_iso_path self.entry_field_platform = entry_field_platform self.drive_system_path_array = drive_system_array self.corrected_index = [] self.main_frame = Frame() self.popup_menu = Menu(self.main_frame, tearoff=0) self.popup_menu.add_command(label="Delete", command=self.delete_selected) self.popup_menu.add_command(label="Rename", command=self.rename_selected) # self.popup_menu.add_command(label="Refetch", # command=self.refetch) # self.popup_menu.add_command(label="Select All", # command=self.select_all) s = Scrollbar(self.main_frame) self._listbox = Listbox(self.main_frame, width=465) self._listbox.bind('<Enter>', self._bound_to_mousewheel) self._listbox.bind('<Leave>', self._unbound_to_mousewheel) self._listbox.bind("<Button-3>", self.popup) # Button-2 on Aqua s.pack(side=RIGHT, fill=Y) self._listbox.pack(side=LEFT, fill=Y) s['command'] = self._listbox.yview self._listbox['yscrollcommand'] = s.set # default filters if 'ALL_games' == self.platform_to_show: # iterate all platforms for platform in self.json_game_list_data: for list_game in self.json_game_list_data[platform]: # titles in the list has been designed to be unique if '/dev_all/' == self.drive_to_show or self.drive_to_show in list_game['path']: self.add_item(list_game['title']) else: for list_game in self.json_game_list_data[self.platform_to_show]: if '/dev_all/' == self.drive_to_show or self.drive_to_show in list_game['path']: self.add_item(list_game['title']) for x in range(19 - self._listbox.size()): self.add_item('') # adding shade to every other row of the list for x in range(0, self._listbox.size()): if x % 2 == 0: self._listbox.itemconfig(x, {'fg': 'white'}, background='#001738') else: self._listbox.itemconfig(x, {'fg': 'white'}, background='#001F4C') self.label = Label(self.main_frame) self.selection_poller() return self.main_frame
class App: ######################################################################## ####################################Interface for PlaNet: def __init__(self, master): menu = Menu(root) root.config(menu=menu) filemenu = Menu(menu) analyzemenu = Menu(menu) PostAnalysis = Menu(menu) Settings = Menu(menu) About = Menu(menu) menu.add_cascade(label="Start", menu=filemenu) filemenu.add_command(label="Select genes for analysis", command=self.SearchGene) menu.add_cascade(label="Analyze", menu=analyzemenu) analyzemenu.add_command(label="Display probeset specific report", command=self.nvnReport) analyzemenu.add_command( label="NetworkComparer Step I: Find similar co-expression networks", command=self.netComparer) analyzemenu.add_command( label="NetworkComparer Step II: Extract ancestral network", command=self.ancestranNetPipe) menu.add_cascade(label="Change organism/database", command=self.UseDatabaseFile) menu.add_cascade(label="Help", menu=About) About.add_command(label="About GeneCAT", command=self.About) self.messenger = Text(root, font=("Courier", 10), wrap=NONE) self.printer("Stand alone version of PlaNet\n") button = Button(root, text="Clear", fg="red", command=self.clear) self.LabVar = StringVar() DBLabel = Label(root, relief=SUNKEN, textvariable=self.LabVar) ybar = Scrollbar(root) xbar = Scrollbar(root, orient=HORIZONTAL) DBLabel.pack(side=BOTTOM, anchor=NW) button.pack(side=BOTTOM, anchor=E) ybar.pack(side=RIGHT, fill=Y) xbar.pack(side=BOTTOM, fill=X) self.messenger.pack(expand=1, fill=BOTH) self.messenger.config(yscrollcommand=ybar.set) self.messenger.config(xscrollcommand=xbar.set) ybar.config(command=self.messenger.yview) xbar.config(command=self.messenger.xview) config = open('dbconf.txt', 'r').readlines() self.queries = [] try: self.currentDB = codecs.open('%s' % (config[0].rstrip()), mode='r', encoding='ASCII', errors='ignore').readlines() self.printer( "Currently using database: %s consisting of %d probesets and %d chips.\n" % (config[0].rstrip(), len(self.currentDB), (len(self.currentDB[0].split()) - 3))) self.LabVar.set( "Using database: %s, Columns=%d, rows=%d." % (config[0].rstrip(), len( self.currentDB[0].split()), len(self.currentDB))) nominator = [] denominator = [] self.annoDict = {} for i in range(len(self.currentDB)): temp = [] splitta = self.currentDB[i].rstrip().split("\t") self.annoDict[i] = splitta[ 0] + "\t" + splitta[1] + "\t" + splitta[2].replace( "*", " ") + "\t" + splitta[3] + "\t" for j in range(5, len(splitta)): temp.append(float(splitta[j])) expVector = numpy.array(temp) nomi = expVector - (numpy.sum(expVector) / len(expVector)) denomi = numpy.sqrt(numpy.sum(nomi**2)) nominator.append(nomi) denominator.append(denomi) self.nominator = numpy.array(nominator) self.denominator = numpy.array(denominator) except IOError: self.printer("Could not open current database.\n") ######################################################################## ####################################Start menu items: def SearchGene(self): #interface for "Select genes for analysis" SearchFrame = Toplevel() SearchFrame.title( "Data entry. Enter gene identifier, probesets or keywords.\n") scrollBar = Scrollbar(SearchFrame) self.inputFrame = Text(SearchFrame, font="courier", width=30, wrap=WORD) self.inputFrame.pack(side=LEFT, fill=BOTH) scrollBar.pack(side=LEFT, fill=Y) self.inputFrame.config(yscrollcommand=scrollBar.set) scrollBar.config(command=self.inputFrame.yview) goButton = Button(SearchFrame, text="Find", fg="red", command=self.SearchGenePipe) goButton.pack(side=BOTTOM) ####################################Searches the current database with user specified keywords def SearchGenePipe(self): if self.inputFrame.get(1.0, END) != "\n": queries = self.inputFrame.get(1.0, END).lower().split() foundGenes = [] for i in queries: infos = "" for j in self.currentDB: if i in j.lower(): splitta = j.split("\t") foundGenes.append(j) infos += splitta[0] + "\t" + splitta[ 1] + "\t" + splitta[2].replace("*", " ") + "\n" self.printer("Probesets found for term: " + i + "\n" + infos + "\n") if len(infos) == "": self.printer("No hits found.\n") else: self.queries = foundGenes ######################################################################## ####################################Data mining menu items ####################"Display probeset specific report" def nvnReport(self): #interface for "Display probeset specific report" top = Toplevel() top.title("Co-expression analysis") self.genelist = [] for string in self.queries: self.genelist.append(string.split()) self.listbox = Listbox(top, width=40, height=30, exportselection=0) for gene in self.genelist: self.listbox.insert(END, gene[0] + ' ' + gene[1]) DescriptionLabel = LabelFrame(top, text="Info") Description = Label( DescriptionLabel, text= "Select gene of interest from the list to the left.\nThis tool will generate result.html file containing a page similar to\ngene specific pages in PlaNet." ) DescriptionLabel.grid(row=0, column=2) ParametersLabel = LabelFrame(top, text="Parameters") Steps = Label(ParametersLabel, text="Number of steps") ParametersLabel.grid(row=1, column=2) Hrr = Label(ParametersLabel, text="HRR cut-off.") self.paraSteps = Entry(ParametersLabel) self.paraSteps.grid(row=1) self.paraSteps.insert(END, 2) self.paraHrr = Entry(ParametersLabel) self.paraHrr.grid(row=3) self.paraHrr.insert(END, 30) Description.grid() Steps.grid(row=0) Hrr.grid(row=2) scrollbar = Scrollbar(top) scrollbar.grid(row=0, column=1, rowspan=5, sticky=S + N) self.listbox.grid(row=0, column=0, rowspan=5) scrollbar.config(command=self.listbox.yview) button = Button(top, text="Calculate!", fg="red", font=("Courier", 22), command=self.nvnReportPipe) button.grid(row=6, column=0) def nvnReportPipe( self): #Executes functions that generate result.html file try: steps = int(self.paraSteps.get()) hrr = int(self.paraHrr.get()) except: self.printer( "You need to enter integer values for HRR and step parameters.\n" ) if self.listbox.curselection() != (): query = self.genelist[int(self.listbox.curselection()[0])][0] #### Plot expression profile function try: plotDatabase = codecs.open( open('dbconf.txt', 'r').read().rstrip().split(".")[0] + ".plt", mode='r', encoding='ASCII', errors='ignore').readlines() ticka = [""] + plotDatabase[0].replace( ",", "\n").lstrip().rstrip().split("\t") for i in plotDatabase: if query in i: query = i data = query.split()[1:] temp = [] for i in range(len(data)): temp.append([ map(float, data[i].replace("-", "\t").rstrip().split()), average( map(float, data[i].replace("-", "\t").rstrip().split())) ]) fig = plt.figure(figsize=(12, 7)) ax = fig.add_subplot(111) plt.subplots_adjust(left=0.1, right=0.97, top=0.93, bottom=0.3) ax.set_ylabel("Signal value") ax.set_title(query.split()[0]) ax.grid(True) plt.xticks(range(len(ticka) + 1), ticka, rotation=90, fontsize="small", horizontalalignment="center") ax.plot([0], [0]) crossX = [] crossY = [] for i in range(len(temp)): ax.plot([i + 1] * len(temp[i][0]), temp[i][0], "g.") crossX.append([i + 1]) crossY.append(temp[i][1]) ax.plot(crossX, crossY, "-ro") ax.plot([i + 2], [0]) canvas = FigureCanvasAgg(fig) canvas.print_figure("profile.png") plt.clf() except: self.printer( "Failed to generate an expression profile of your gene of interes.\nThe expression matrix used for plotting of expression profiles must be present and named " + open('dbconf.txt', 'r').read().rstrip().split(".")[0] + ".plt!") ###Call network creator try: networkViewer.makeNetwork(query.split()[0], steps, hrr) except: self.printer( "Failed to generate an co-expression network of your gene of interes.\nThe HRR network file used must be present named " + open('dbconf.txt', 'r').read().rstrip().split(".")[0] + ".hrr!") ### Calculate PCC of a gene to all genes in database try: query = self.queries[int( self.listbox.curselection()[0])].split("\t") expVector = map(float, query[5:]) expVector = numpy.array(expVector) nomi = expVector - (numpy.sum(expVector) / len(expVector)) denomi = numpy.sqrt(numpy.sum(nomi**2)) rValues = numpy.dot(self.nominator, nomi) / numpy.dot( self.denominator, denomi) displayList = [] for i in range(len(rValues)): displayList.append([rValues[i], self.annoDict[i]]) displayList.sort(reverse=True) except: displayList = [] self.printer( "Failed to calculate Pearson correlation co-efficient list.\n" ) ###Create html document with results header = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\n<html>\n<head>\n<!-- blarg -->\n</head>\n<body>\n' try: header += '<big><b>Summary page for: %s</b></big>\n<br><b>Expression profile:</b>\n<IMG SRC="profile.png"><br>\n' % ( displayList[0][1].split()[0] + "\t" + displayList[0][1].split()[1]) except: pass header += '<b>HRR based co-expression network:</b>\nGreen, organge and red edges represent HRR values of %s, %s and %s, respectively.</b><br>\n' % ( int(hrr) / 3, (int(hrr) / 3) * 2, hrr) header += '<embed src="network.svg" width="1200" height="1200" type="image/svg+xml" pluginspage="http://www.adobe.com/svg/viewer/install/" />\n<br>' #header += '<iframe src="network.svg" width="1500" height="1500">\n</iframe>\n' header += "<br><b>MapMan ontology analysis of the above network:</b>\n" try: header += open("mapRes.mapman", "r").read() except: pass header += "\n<br><b>Pearson correlation based co-expression analysis:</b>\n<pre>" v = open("result.html", "w") v.close() v = open("result.html", "a") v.write(header) for i in range(len(self.annoDict)): v.write( str(displayList[i][0])[:6] + "\t" + displayList[i][1] + "\n") v.write("</pre>") v.close() self.printer( "Probeset specific result calculated and available in result.html file.\n" ) ####################"NetworkComparer step I:" def netComparer(self): #Interface top = Toplevel() top.title("NetworkComparer") self.genelistNC = [] for string in self.queries: if "No hit" not in string: self.genelistNC.append(string.split("\t")) DescriptionLabel = LabelFrame( top, text="Select the gene of interest and specify parameters.") Description = Label( DescriptionLabel, text= "Select gene of interest from the list below.\nThis tool will generate netComp.html file containing a page similar to\nfirst step of NetworkComparer." ) DescriptionLabel.grid(row=0, column=0) Description.grid(row=0) ParametersLabel = LabelFrame(DescriptionLabel, text="Parameters") Steps = Label(ParametersLabel, text="Number of steps") ParametersLabel.grid(row=1, column=2) Hrr = Label(ParametersLabel, text="HRR cut-off.") Steps.grid(row=0) Hrr.grid(row=2) self.paraSteps = Entry(ParametersLabel) self.paraSteps.grid(row=1) self.paraSteps.insert(END, 2) self.paraHrr = Entry(ParametersLabel) self.paraHrr.grid(row=3) self.paraHrr.insert(END, 30) self.listbox = Listbox(DescriptionLabel, width=40, height=30, exportselection=0) probeName = [] for gene in self.genelistNC: self.listbox.insert(END, gene[0] + ' ' + gene[1] + ' ' + gene[3]) self.listbox.grid(row=1, column=0, rowspan=5, sticky=N + S + E + W) scrollbarG = Scrollbar(DescriptionLabel) scrollbarG.grid(row=1, column=1, rowspan=5, sticky=S + N) scrollbarG.config(command=self.listbox.yview) NetworkLabel = LabelFrame( top, text="Select the networks/species you want to compare.") Network = Label( NetworkLabel, text= "Available networks are displayed in the list below. Check/uncheck networks of interest." ) NetworkLabel.grid(row=0, column=1) Network.grid(row=0) self.networkBox = Listbox(NetworkLabel, width=40, height=30, selectmode=MULTIPLE, exportselection=0) self.networkList = [] for i in os.listdir("."): if ".hrr" in i: self.networkBox.insert(END, i) self.networkList.append(i) self.networkBox.grid(row=1, column=0, rowspan=5, sticky=N + S + E + W) scrollbarN = Scrollbar(NetworkLabel) scrollbarN.grid(row=1, column=1, rowspan=5, sticky=S + N) scrollbarN.config(command=self.networkBox.yview) button = Button(top, text="Calculate!", fg="red", font=("Courier", 22), command=self.netComparerPipe) button.grid(row=1, column=0, columnspan=5, sticky=E + W) def netComparerPipe( self ): #Passess selected query and networks to networkComparer.start function error = 0 try: steps = int(self.paraSteps.get()) except: error += 1 self.printer( "You must enter an integer value bigger than 1 for this parameter.\n" ) try: hrr = int(self.paraHrr.get()) except: error += 1 self.printer( "You must enter an integer value bigger than 1 for this parameter.\n" ) netList = [] for i in self.networkBox.curselection(): netList.append(self.networkList[int(i)]) if netList == []: error += 1 self.printer( "You must at least select one network for this analysis.\n") if error == 0: #try: networkComparer.start( steps, hrr, netList, self.genelistNC[int(self.listbox.curselection()[0])][0], self.genelistNC[int(self.listbox.curselection()[0])][3]) self.printer( "Calculation done and results are available in NetComp.html file.\n" ) #except: #self.printer("Something went wrong. Make sure Graphviz is installed.\n") ####################"NetworkComparer step II:" def ancestranNetPipe(self): #Interface top = Toplevel() top.title("NetworkComparer") a = open("NetComp.html", "r").readlines() self.queriesAC = [] quera = 0 for i in range(len(a)): if "START OF QUERIES" in a[i]: self.queryOrder = a[i + 1].rstrip().split() if "START OF VS. QUERY" in a[i]: quera = 1 if quera == 1: self.queriesAC.append(a[i].rstrip().split("\t")) self.queriesAC = self.queriesAC[1:len(self.queriesAC) - 1] DescriptionLabel = LabelFrame( top, text="Select the gene of interest and specify parameters.") Description = Label( DescriptionLabel, text= "Select gene of interest from the list below.\nThis tool will generate netComp.html file containing a page similar to\nfirst step of NetworkComparer." ) DescriptionLabel.grid(row=0, column=0) Description.grid(row=0) self.listbox = Listbox(DescriptionLabel, width=40, height=30, exportselection=0, selectmode=MULTIPLE) for gene in self.queriesAC: self.listbox.insert( END, gene[0] + ' ' + gene[1] + ' ' + gene[2] + ' ' + gene[3] + ' ' + gene[4]) self.listbox.grid(row=1, column=0, rowspan=5, sticky=N + S + E + W) scrollbarG = Scrollbar(DescriptionLabel) scrollbarG.grid(row=1, column=1, rowspan=5, sticky=S + N) scrollbarG.config(command=self.listbox.yview) button = Button(top, text="Calculate!", fg="red", font=("Courier", 22), command=self.ancestralNet) button.grid(row=1, column=0, columnspan=5, sticky=E + W) def ancestralNet( self ): #Passess selected query and networks to ancestralNetwork.start function selected = [] for i in self.listbox.curselection(): selected.append(self.queryOrder.index(self.queriesAC[int(i)][1])) ancestralNetwork.start(selected) ######################################################################## ####################################Settings menu items ####################Change database def UseDatabaseFile(self): database = askopenfilename(filetypes=[("Expression matrix", ".exp")]) if database != '': self.datafile = database.split('/')[len(database.split('/')) - 1] configstring = "%s" % self.datafile DB = open(self.datafile, 'r').readlines() self.LabVar.set( "Using database: %s, Columns=%d, rows=%d." % (self.datafile.strip(), len(DB[1].split()), len(DB))) newconfig = open('dbconf.txt', 'w') newconfig.writelines(configstring) newconfig.close() self.printer("Using %s database\n" % (self.datafile)) try: config = open('dbconf.txt', 'r').readlines() self.currentDB = codecs.open('%s' % (config[0].rstrip()), mode='r', encoding='ASCII', errors='ignore').readlines() self.printer( "Currently using database: %s consisting of %d probesets and %d chips.\n" % (config[0].rstrip(), len(self.currentDB), (len(self.currentDB[0].split()) - 3))) self.LabVar.set( "Using database: %s, Columns=%d, rows=%d." % (config[0].rstrip(), len( self.currentDB[0].split()), len(self.currentDB))) nominator = [] denominator = [] self.annoDict = {} for i in range(len(self.currentDB)): temp = [] splitta = self.currentDB[i].rstrip().split("\t") self.annoDict[i] = splitta[ 0] + "\t" + splitta[1] + "\t" + splitta[2].replace( "*", " ") + "\t" + splitta[3] + "\t" for j in range(5, len(splitta)): temp.append(float(splitta[j])) expVector = numpy.array(temp) nomi = expVector - (numpy.sum(expVector) / len(expVector)) denomi = numpy.sqrt(numpy.sum(nomi**2)) nominator.append(nomi) denominator.append(denomi) self.nominator = numpy.array(nominator) self.denominator = numpy.array(denominator) except IOError: self.printer("Could not open current database.\n") def About(self): top = Toplevel() top.title("PlaNet standalone") label = Label( top, text= "PlaNet standalone\nMarek Mutwil\ncontact: [email protected]", width=30) OkButton = Button(top, text="OK", command=top.destroy) label.pack() OkButton.pack() def printer(self, text): #prints text to message box #self.messenger.delete(1.0, END) self.messenger.insert(END, text) def clear(self): #clears message box self.messenger.delete(1.0, END)
def netComparer(self): #Interface top = Toplevel() top.title("NetworkComparer") self.genelistNC = [] for string in self.queries: if "No hit" not in string: self.genelistNC.append(string.split("\t")) DescriptionLabel = LabelFrame( top, text="Select the gene of interest and specify parameters.") Description = Label( DescriptionLabel, text= "Select gene of interest from the list below.\nThis tool will generate netComp.html file containing a page similar to\nfirst step of NetworkComparer." ) DescriptionLabel.grid(row=0, column=0) Description.grid(row=0) ParametersLabel = LabelFrame(DescriptionLabel, text="Parameters") Steps = Label(ParametersLabel, text="Number of steps") ParametersLabel.grid(row=1, column=2) Hrr = Label(ParametersLabel, text="HRR cut-off.") Steps.grid(row=0) Hrr.grid(row=2) self.paraSteps = Entry(ParametersLabel) self.paraSteps.grid(row=1) self.paraSteps.insert(END, 2) self.paraHrr = Entry(ParametersLabel) self.paraHrr.grid(row=3) self.paraHrr.insert(END, 30) self.listbox = Listbox(DescriptionLabel, width=40, height=30, exportselection=0) probeName = [] for gene in self.genelistNC: self.listbox.insert(END, gene[0] + ' ' + gene[1] + ' ' + gene[3]) self.listbox.grid(row=1, column=0, rowspan=5, sticky=N + S + E + W) scrollbarG = Scrollbar(DescriptionLabel) scrollbarG.grid(row=1, column=1, rowspan=5, sticky=S + N) scrollbarG.config(command=self.listbox.yview) NetworkLabel = LabelFrame( top, text="Select the networks/species you want to compare.") Network = Label( NetworkLabel, text= "Available networks are displayed in the list below. Check/uncheck networks of interest." ) NetworkLabel.grid(row=0, column=1) Network.grid(row=0) self.networkBox = Listbox(NetworkLabel, width=40, height=30, selectmode=MULTIPLE, exportselection=0) self.networkList = [] for i in os.listdir("."): if ".hrr" in i: self.networkBox.insert(END, i) self.networkList.append(i) self.networkBox.grid(row=1, column=0, rowspan=5, sticky=N + S + E + W) scrollbarN = Scrollbar(NetworkLabel) scrollbarN.grid(row=1, column=1, rowspan=5, sticky=S + N) scrollbarN.config(command=self.networkBox.yview) button = Button(top, text="Calculate!", fg="red", font=("Courier", 22), command=self.netComparerPipe) button.grid(row=1, column=0, columnspan=5, sticky=E + W)
class ConstraintsView(Frame): "Presents all constraints created by user" def __init__(self, parent): Frame.__init__(self, parent) # holds all constraints self.constraint_name_list = [] # holds the scrollbox output text for the added constraints self.constraints_output = [] text_label = "Constraints Added:" self.text = Label(self, text=text_label) self.text.pack(anchor=NW, expand=YES) buttons_frame = Frame(self) buttons_frame.pack(side=BOTTOM) self.delete_all = Button(buttons_frame, text="Delete all",\ command=self.delete_all_constraints) self.delete_all.pack(side=RIGHT, pady=10) self.delete_selection = Button(buttons_frame, text="Delete", command=self.delete_selection) self.delete_selection.pack(side=RIGHT, padx=20) self.yScroll = Scrollbar(self, orient=VERTICAL) self.yScroll.pack(side=RIGHT, fill=Y) self.xScroll = Scrollbar(self, orient=HORIZONTAL) self.xScroll.pack(side=BOTTOM, fill=X) self.listbox = Listbox(self, xscrollcommand = self.xScroll.set,\ yscrollcommand = self.yScroll.set,\ selectmode = MULTIPLE,\ width = 45, height = 20) self.xScroll['command'] = self.listbox.xview self.yScroll['command'] = self.listbox.yview self.listbox.pack(side=LEFT, fill=X, expand=1) def add_constraint_listbox(self, constraint_name, priority): "Updates the list box with the new constraint created" output = constraint_name + " Priority = " self.constraint_name_list.append(constraint_name) if priority == 10: output += 'Low' elif priority == 25: output += 'Medium' elif priority == 50: output += 'High' elif priority == 0: # mandatory has a 0 priority output += 'Mandatory' self.constraints_output.append(output) # clear listbox self.listbox.delete(0, END) for item in self.constraints_output: self.listbox.insert(END, item) def delete_all_constraints(self): "Deletes all constraints from the listbox and the mainScheduler" # clear all constraints from list box if self.constraint_name_list: self.listbox.delete(0, END) # clear all output constraints self.constraints_output = [] # clear all constraints from the scheduler object globs.mainScheduler.delete_list_constraints( self.constraint_name_list) #clear all constraints self.constraint_name_list = [] def delete_selection(self): selection = self.listbox.curselection() selected_indices = list(selection) selected_indices.reverse( ) # go over the indices backward to prevent mistakes if len(selection) > 0: #clear constraints selected from list box for i in selected_indices: self.listbox.delete(i) # clear constraints from the class deletion_list = [] for j in selected_indices: #print(self.constraint_name_list) #print(self.constraints_output) deletion_list.append(self.constraint_name_list.pop(int(j))) self.constraints_output.pop(int(j)) # clear selected constraints from the scheduler object globs.mainScheduler.delete_list_constraints(deletion_list)
class ScrolledList(Frame): def __init__(self, master,a_function): Frame.__init__(self,master) scrl_bar = Scrollbar(self) self.listbox = Listbox(self) scrl_bar.config(command=self.listbox.yview) scrl_bar.pack(side=RIGHT, fill=Y) self.listbox.config(yscrollcommand=scrl_bar.set) self.listbox.pack(side=LEFT, expand=YES, fill=BOTH) # link double click to the processList self.listbox.bind('<Double-1>', self.processList) # attach a function passed form the master # not this si done as passd function so it could be anything self.passed_function = a_function # get the index of the double clicked itenm and pass the item to # the passed function def processList(self, event): index = self.listbox.curselection() label = self.listbox.get(index) self.passed_function((index,label)) def load_data(self,d_list): #load the listbox idx = 0 for item in d_list: fparts = item.split('.') # DEBUG print fparts if fparts[-1] == 'dat': self.listbox.insert(idx, item) idx += 1 def remove_item(self,idx): self.listbox.delete(idx)
def open_recipe(): global Box global ingBox name = Box.get(ACTIVE) protocol_file = name + "protocol" '''File=open(protocol_file) text=File.read() File.close()''' openwindow = Tk() btn = Button(openwindow, text="save to your computer") btn.grid(row=0, column=0) label = Label(openwindow, text="Name") label.grid(row=1, column=0) label1 = Label(openwindow, text="Ingredients") label2 = Label(openwindow, text="Preparation Time") label3 = Label(openwindow, text="serves:") label4 = Label(openwindow, text="Instructions") cookit = Button(openwindow, text="cook", command=cook) absent = Button(openwindow, text="need to buy", command=go_shopping) label1.grid(row=2, column=0) label2.grid(row=3, column=0) label3.grid(row=4, column=0) label4.grid(row=5, column=0) cookit.grid(row=6, column=0) absent.grid(row=7, column=0) box = Text(openwindow, height="1") ingBox = Listbox(openwindow, width="107", height="15") timeBox = Text(openwindow, height="1") serves = Text(openwindow, height="1") ins = Text(openwindow, height="10") listt = [] cn = "" f = open(protocol_file).readlines() nodestart = False for i in range(len(f)): if "#" in f[i]: nodestart = False listt.append(cn) cn = "" if nodestart: cn = cn + f[i] if "@" in f[i]: nodestart = True Name = listt[0] list_ingred = listt[1].split("\n") prepTime = listt[4] People = listt[3] Instructions = listt[2] for k in range(len(Name)): box.insert(END, Name[k]) box.grid(row=1, column=1) for q in range(len(list_ingred)): ingBox.insert(END, list_ingred[q]) ingBox.grid(row=2, column=1) for w in range(len(prepTime)): timeBox.insert(END, prepTime[w]) timeBox.grid(row=3, column=1) for x in range(len(People)): serves.insert(END, People[x]) serves.grid(row=4, column=1) for y in range(len(Instructions)): ins.insert(END, Instructions[y]) ins.grid(row=5, column=1) openwindow.mainloop()
def CreateListBox(parent, x, y, val): """ Listbox to show the spelling list """ lstbox = Listbox(parent, listvariable=val, selectmode="extended") lstbox.grid(column=x, row=y) sbar = Scrollbar(parent, orient="vertical", command=lstbox.yview) sbar.grid(column=x+1, row=y, sticky="ns") lstbox['yscrollcommand'] = sbar.set return lstbox