Я пытаюсь создать поисковую систему, которая проверит список, а затем удалит все элементы списка, которые не соответствуют параметрам поиска. Я знаю, что с моей программой есть несколько проблем, таких как то, что она не будет добавлять вещи обратно в список, когда вы возвращаетесь назад, и в моем обновлении для цикла я просто нажимаю на '*', думая, что она будет искать строки только начиная с текущих параметров , но я перейду эти мосты позже.
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 into the window.
# text
editStudentInfoLabel = Tkinter.Label(self,text='Select the student from the list below or search for one in the 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)
Заполняет список Tkinter оригинальным списком.
# Search results initial updater.
self.getStudentList()
for student in self.studentList:
self.searchResults.insert(Tkinter.END, student)
##### Event handler
Прямо здесь я запускаю средство обновления списка после ввода ключа в поле поиска
self.searchRepositoryEntry.bind('<Key>', self.updateSearch)
Предполагается, что он запускается при каждом нажатии клавиши. Он получает строку, которая находится в Entry, затем начинает подсчет переменных, так что я знаю, по какому индексу это имя. После этого он запускает цикл for в текущем списке, предположительно проверяя, соответствует ли он требованиям параметров и любой другой буквы после него. Если он не совпадает, его следует удалить. Проблема в том, что когда я в первый раз нажимаю на букву, строка параметров - это просто пробел, а затем следующая буква - первая буква строки и так далее. Это всегда на шаг позади. И это проблема
def updateSearch(self, event):
parameters = self.searchRepositoryEntry.get()
int = 0
currentList = self.searchResults.get(0, Tkinter.END)
for i in currentList:
if not i == parameters + '*':
self.searchResults.delete(int)
int += 1
def getStudentList(self):
global fileDirectory # Gets the directory that all the files are in.
fileList = listdir(fileDirectory)
self.studentList = []
for file in fileList:
self.studentList.append(file[:-4])