С минимальным редактированием вашего кода (Не уверен, что они учили классы или нет в вашем курсе), измените:
def close_window(root):
root.destroy()
на
def close_window():
window.destroy()
, и это должно работать,
Объяснение:
Ваша версия close_window
определена для ожидания одного аргумента, а именно root
.Впоследствии любые вызовы вашей версии close_window
должны иметь этот аргумент, или Python выдаст вам ошибку во время выполнения .
Когда вы создали Button
, вы сказаликнопка для запуска close_window
при нажатии.Однако исходный код для виджета Button выглядит примерно так:
# class constructor
def __init__(self, some_args, command, more_args):
#...
self.command = command
#...
# this method is called when the user clicks the button
def clicked(self):
#...
self.command() # Button calls your function with no arguments.
#...
Как говорится в моем коде, класс Button
будет вызывать вашу функцию без аргументов.Однако ваша функция ожидает аргумент.Таким образом, у вас была ошибка.Итак, если мы уберем этот аргумент, чтобы вызов функции выполнялся внутри класса Button, у нас останется:
def close_window():
root.destroy()
Хотя это не так, потому что root
никогда не бываетприсвоено значение.Это было бы похоже на ввод print(x)
, когда вы еще не определили x
.
Глядя на ваш код, я решил, что вы хотите позвонить destroy
на window
, поэтому я изменил root
на window
.