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

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -