#python #class #tkinter
Вопрос:
Я работаю над одной функцией моего программного обеспечения, которая использует клавиатуру, которую я привязал к окну вот так win.bind('lt;Keygt;', self.triggerBackButton)
. А вот функция обратного вызова.
class Navigator(Validator): def __init__(self, win, renameFrameOBJ): self.win = win self.renameFrameOBJ = renameFrameOBJ self.child_window = None # Initializing List Frame to display file names listFrame = Frame(win, bg='#222222') listFrame.grid(row=1, column=0, sticky='nsew') Grid.columnconfigure(listFrame, 0, weight=1) listFrame.update() width = listFrame.winfo_width() // 16 self.listBox = Listbox(listFrame, width=width, height= 20,justify='center', font=('Flux Regular', 15), fg='white', selectbackground='#375a7f', selectforeground='white', bg='#222222', bd = 0, activestyle='none', highlightthickness=0) self.listBox.grid(ipadx=10, ipady=10) win.bind('lt;Keygt;', self.triggerBackButton) def triggerBackButton(self, event): if event.char in string.ascii_lowercase: files = os.listdir(self.path_history[-1]) for idx in range(len(files)): if files[idx][0].lower() == event.char: self.listBox.curselection(0) self.listBox.activate(idx) break
Логика приведенной выше функции выглядит примерно так. Он принимает себя и событие в качестве входных данных, где событие содержит информацию, например, откуда оно было запущено, какая кнопка его запустила и т. Д.
Если условие подтверждает, что это событие было вызвано кнопками на клавиатуре, содержащими значение между a-z
self.path_history хранит путь к файлам, поэтому здесь я беру последний путь из переменной self.path_history и сохраняю все файлы, присутствующие в этом пути, в переменную files.
Я перебираю список файлов и проверяю, равна ли первая буква этого файла event.char, в которой содержится буква от a-z. Если это так, то я пытаюсь получить доступ к виджету self.ListBox и использовать метод curselection() виджета Listbox. НО я получаю следующую ошибку. Я использовал этот встроенный метод self.ListBox.curselection() несколько раз, но на этот раз он выдает ошибку
Exception in Tkinter callback Traceback (most recent call last): File "/usr/lib/python3.8/tkinter/__init__.py", line 1892, in __call__ return self.func(*args) File "/media/hackytech/Local Disk1/data/python/Project/Bunch File Renamer LINUX/packages/navigator.py", line 104, in triggerBackButton self.listBox.curselection(0) TypeError: curselection() takes 1 positional argument but 2 were given
Большое вам спасибо за вашу помощь
Ответ №1:
На данный момент вызов self.listBox.curselection(0)
отправляет методу два параметра: ссылку на экземпляр класса Listbox (self.ListBox) и целочисленное значение (0). Вы имели в виду self.listBox.curselection()
вместо этого?
Комментарии:
1. О да, это правильно, моя ошибка. Я отредактирую сообщение.