Еще одна проблема с исключением в обратном вызове tkinter - PullRequest
0 голосов
/ 21 апреля 2020

Я попытался создать окно с меню, и я хотел бы открыть дочернее окно из этого меню. Когда я запускаю программу, появляются следующие исключения:

Exception in Tkinter callback 
Traceback (most recent call last):
File "\lib\tkinter__init__.py", line 1705, in call return self.func(*args) 
File "\menu_child.py", line 19, in child_wnd win = Toplevel(self) 
File "\lib\tkinter__init__.py", line 2342, in init BaseWidget.init(self, master, 'toplevel', cnf, {}, extra) 
File \lib\tkinter__init__.py", line 2292, in init BaseWidget._setup(self, master, cnf) 
File "\lib\tkinter__init__.py", line 2269, in _setup if master._last_child_ids is None: 
AttributeError: 'MainWindow' object has no attribute '_last_child_ids'

Код выглядит так:

from tkinter import *


class MainWindow():
    def __init__(self):
        self.tk = Tk()

        self.menu = Menu(self.tk)
        self.tk.config(menu=self.menu)

        self.main_menu = Menu(self.menu, tearoff=0)
        self.main_menu.add_command(label="New Window", command=self.child_wnd)
        self.main_menu.add_command(label="Empty")
        self.main_menu.add_command(label="Useless")
        self.menu.add_cascade(label="Main", menu=self.main_menu )


    def child_wnd(self):
        win = Toplevel(self)

if __name__ == '__main__':

main = MainWindow()
mainloop()

Может кто-нибудь объяснить мне, что происходит не так? Честно говоря, я понятия не имею, что делать. Спасибо

1 Ответ

0 голосов
/ 21 апреля 2020

Вы не можете использовать self в Toplevel(self). Первый аргумент должен быть виджетом, а self не является виджетом. В этом конкретном случае c вы можете сделать Toplevel(self.tk).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...