python - Variable updating one step behind in list searcher in Tkinter -
i'm trying build search engine check list , remove list items not meet search parameters. know there several problems program such not add things list when backspace , in updating loop tack on '*' thinking search strings beginning current parameters, cross bridges later.
class studentfinderwindow(tkinter.toplevel): def __init__(self): tkinter.toplevel.__init__(self) # create window searchresultlist = ['student1', 'student2', 'student3'] # test list. ##### window attributes self.title('edit students') #sets window title. ##### puts stuff window. # text editstudentinfolabel = tkinter.label(self,text='select student list below or search 1 in search box provided') editstudentinfolabel.grid(row=0, column=0) # entry box self.searchrepositoryentry = tkinter.entry(self) self.searchrepositoryentry.grid(row=1, column=0) # list box self.searchresults = tkinter.listbox(self) self.searchresults.grid(row=2, column=0)
this fills tkinter listbox original list.
# search results initial updater. self.getstudentlist() student in self.studentlist: self.searchresults.insert(tkinter.end, student) ##### event handler
right here bind run list updater after key entered search box
self.searchrepositoryentry.bind('<key>', self.updatesearch)
this supposed run every time key pressed. gets string in entry starts variable count know index name at. after run loop on current list supposedly checking see if fits requirement of parameters , other letter after it. if not match should delete. problem first time hit letter parameters string blank space , next letter string first letter , on. 1 step behind. , problem
def updatesearch(self, event): parameters = self.searchrepositoryentry.get() int = 0 currentlist = self.searchresults.get(0, tkinter.end) in currentlist: if not == parameters + '*': self.searchresults.delete(int) int += 1 def getstudentlist(self): global filedirectory # gets directory files in. filelist = listdir(filedirectory) self.studentlist = [] file in filelist: self.studentlist.append(file[:-4])
i believe have run same problem describe before, when attempting make actively searching ctrl-f feature in 1 of programs.
what found work not bind on key instead keyrelease. i'm not entirely sure why works (probably quirk tkinter). however, works.
snippet's:
the binding
# self.fw.en entry widget. self.fw.en.bind('<keyrelease>', self.find)
which run
def find (self, event): self.te.tag_remove('found', '1.0', 'end') pat = self.fw.en.get() if len(pat) > 1: index = '1.0' while true: index = self.te.search(pat, index, nocase=1, stopindex='end') if not index: break lastidex = '%s+%dc' % (index, len(pat)) self.te.tag_add('found', index, lastidex) index = lastidex self.te.tag_config('found', background='#80ff00')
Comments
Post a Comment