почему Меню в Ткинтере выдает ошибку - PullRequest
0 голосов
/ 16 марта 2020
class Create(Tk):

    def __init__(self, parent, controller):

        tk.Frame.__init__(self, parent)

        self.menubar = Menu(master = self)
        self.menubar.add_command(label = "A", command= lambda: self.show_frame(A) )
        self.menubar.add_command(label = "B", command= lambda: self.show_frame(B) )
        self.menubar.add_command(label = "C", command= lambda: self.show_frame(C) )
        self.menubar.add_command(label = "D", command= lambda: self.show_frame(D) )

        self.config(menu=self.menubar)

global app
app = MainClass()
app.mainloop()  

Для справки: MainClass делает много вещей, но также вызывает Create, в рамках этого у меня есть несколько кадров, которые я подниму, чтобы показать пользователю, все это работает без меню, однако я продолжаю получать сообщение об ошибке:

self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))_tkinter.TclError: unknown option "-menu"

Я искал это и нашел еще один вопрос переполнения стека (ссылка ниже), в котором говорилось, что вам нужно сделать так, чтобы ваш класс наследовал от Tk, а не от Frame, однако у меня все еще есть проблемы с этой ошибкой.

Чего мне не хватает? (Я использую python версия 3.8.1)

Неизвестная опция Tkinter -menu

1 Ответ

2 голосов
/ 16 марта 2020

Проблема в том, что вы передаете экземпляр класса Create в Frame.__init__. Create было унаследовано от Tk.

Попробуйте выполнить следующее:

class Create(Tk):

    def __init__(self, parent, controller):

        Tk.__init__(self)

        self.menubar = Menu(master = self)
        self.menubar.add_command(label = "A", command= lambda: self.show_frame(A) )
        self.menubar.add_command(label = "B", command= lambda: self.show_frame(B) )
        self.menubar.add_command(label = "C", command= lambda: self.show_frame(C) )
        self.menubar.add_command(label = "D", command= lambda: self.show_frame(D) )

        self.config(menu=self.menubar)

Недостатком является то, что даже если вы правильно унаследовали от Tk, 2 windows будет отображаться, а также Menu не будет иметь виджет Frame в качестве мастера.

...