Принимает 1 позиционный аргумент, но 2 были даны Python Tkinter

#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. О да, это правильно, моя ошибка. Я отредактирую сообщение.