Форум сайта python.su
0
#!/usr/bin/python3.5 # -*- coding: utf-8 -*- from tkinter import * from tkinter import messagebox as mb def programm_exit(): print("exit") answer = mb.askyesno(title="Завершение работы программы", message="Выйти из программы?") if answer == True: root.destroy() root = Tk() root.title("Python") root.bind('<Destroy>', programm_exit) root.mainloop() >>> Exception in Tkinter callback Traceback (most recent call last): File "/usr/lib64/python3.5/tkinter/__init__.py", line 1558, in __call__ return self.func(*args) TypeError: programm_exit() takes 0 positional arguments but 1 was given
>>> exit Exception in Tkinter callback Traceback (most recent call last): File "/usr/lib64/python3.5/tkinter/__init__.py", line 1558, in __call__ return self.func(*args) File "/home/user/py/test_window/test2.py", line 10, in programm_exit answer = mb.askyesno(title="Завершение работы программы", message="Выйти из программы?") File "/usr/lib64/python3.5/tkinter/messagebox.py", line 104, in askyesno s = _show(title, message, QUESTION, YESNO, **options) File "/usr/lib64/python3.5/tkinter/messagebox.py", line 72, in _show res = Message(**options).show() File "/usr/lib64/python3.5/tkinter/commondialog.py", line 44, in show w = Frame(self.master) File "/usr/lib64/python3.5/tkinter/__init__.py", line 2592, in __init__ Widget.__init__(self, master, 'frame', cnf, {}, extra) File "/usr/lib64/python3.5/tkinter/__init__.py", line 2147, in __init__ (widgetName, self._w) + extra + self._options(cnf)) _tkinter.TclError: this isn't a Tk applicationunable to create widget ".140512013776544"
Отредактировано nick789 (Фев. 14, 2019 07:31:54)
Офлайн
294
nick789вы то внимательно читали что там написано? где там root.bind('<Destroy>'..)?? root.bind('<Destroy>'…) не перехватывает закрытие, чтобы перехватить закрытие корневого окна, нужно использовать метод protocol http://effbot.org/zone/tkinter-window-destroy.htm
http://python.su/forum/topic/3571/?page=1#post-23046
# # -*- coding: utf-8 -*- from tkinter import * from tkinter import messagebox as mb def confirm_exit(): print('ask to exit') answer = mb.askyesno(title="Завершение работы программы", message="Выйти из программы?") if answer == True: print('exiting program') root.destroy() def programm_exit(event): print("destroy", event.widget) root = Tk() root.title("Python") root.bind('<Destroy>', programm_exit) root.protocol('WM_DELETE_WINDOW', confirm_exit) root.mainloop()
[code python][/code]
Отредактировано PEHDOM (Фев. 14, 2019 10:19:48)
Офлайн