Обратный вызов Tkinter с OOP appoach - PullRequest
1 голос
/ 24 января 2020

У меня есть класс с методом обратного вызова, который вызывает несколько других методов, потому что, если я правильно понимаю, вы не можете передавать аргументы нажатию кнопки.

Это мой метод обратного вызова:

class MainApplication(tk.Frame):

....
def callback(self):
    browsed_path = self.browse_button()
    if(os.path.isdir(browsed_path)):
        self.download_file_from_server(local_path=browsed_path, multiple_folders = v.get())
        self.processing(local_path = browsed_path, tk=tk)
        self.wrong_files(local_path = browsed_path)
....

Я использую эту кнопку следующим образом:

button1 = tk.Button(text='Wähle einen Pfad und starte Download', command = MainApplication.callback, bg='brown', fg='white', font=('helvetica', 9, 'bold'))
canvas1.create_window(300, 140, window=button1)

Это дает мне следующую ошибку:

callback() missing 1 required positional argument: 'self'

Ну, я думаю, я должен использовать self в качестве другого аргумента сослаться на мой фактический класс.

1 Ответ

2 голосов
/ 24 января 2020

Ошибка не требует пояснений. Если вы вызываете функцию класса из-за пределов класса, вам нужно сначала создать ее экземпляр:

main_app = MainApplication()
button1 = tk.Button(text='...', command=main_app.callback, ...)

Если вы используете ее из класса, используйте ее как command=self.callback

И вы МОЖЕТЕ ОПРЕДЕЛЕННО передать аргументы нажатию кнопки, используя lambda:

command = lambda: self.callback(list of arguments)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...