В какой-то момент я что-то изменил, и теперь я получаю эту ошибку при попытке закрыть Toplevel () с помощью .destroy () после нажатия кнопки. Я видел одно исправление, в котором использовалась лямбда-функция, но я так и не смог заставить ее работать.
Полный код ошибки:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1702, in __call__
return self.func(*args)
File "<string>", line 61, in login_verification
File "<string>", line 73, in login_success
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 2366, in __init__
Widget.__init__(self, master, 'button', cnf, kw)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 2296, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: bad window path name ".!toplevel"
Строка 61 - это конец дерева if / else, которое вызывает login_success
, строка 73 - это кнопка, которая вызывает функцию delete_popup
. Код, который выдает ошибку (на самом деле есть 3 функции, но все они одинаковы, за исключением некоторого текста метки)
def login_success(self):
popup_screen = Toplevel(main_screen)
popup_screen.title("Success!")
popup_screen.geometry('%dx%d+%d+%d' % (w, h, x, y))
Label(popup_screen, text = "Login was successful.")
Button(popup_screen, text = "Ok", command = self.delete_popup(popup_screen))
def delete_popup(self, x):
x.destroy()