add_cascade () отсутствует 1 обязательный позиционный аргумент: self (Python: ошибка Tkinter) - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь узнать, как создать базовый графический интерфейс на Python с меню.

Я следую учебному пособию с 2014 года (https://www.youtube.com/watch?v=PSm-tq5M-Dc),, но, похоже, некоторые вещи были обновлены с тех пор, какУчебное пособие было опубликовано.

Хотя я нашел обходные пути для некоторых из моих проблем, была пара, которую я не смог выяснить.

Самая большая проблема, которая является "TypeError: add_cascade() missing 1 required positional argument: 'self'" ошибкой.

Все, что я могу найти, похоже, имеет синтаксис, похожий на мой код, однако я не могу его запустить. Я думаю, что это, вероятно, разница в версиях Python (I am running python 3.7), хотя, скорее всего, я просто что-то упустилв учебнике.

import tkinter

def doNothing():
    print("DO SOMTHING USEFULL... please")

root=tkinter.Tk()
menu=tkinter.Menu(root)
root.config(menu=menu)

subMenu=tkinter.Menu(menu, tearoff=0)
tkinter.Menu.add_cascade(label="file", menu=subMenu)
subMenu.add_command(label="New Project...", command=doNothing)
subMenu.add_command(label="New...", command=doNothing)
subMenu.add_seperator()
subMenu.add_command(label="Exit", command=doNothing)

editMenu=tkinter.Menu(menu)
tkinter.Menu.add_cascade(label="Edit", menu=editMenu)
editMenu.add_command(label="Redo", command=doNothing)

root.mainloop()

PS Я знаю, что не нужно везде ставить "tkinter.", но я не могу заставить "из импорта Tkinter *" работать на меня.

Как мне решить следующую ошибку?

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Вы вызываете метод add_cascade из класса Menu, а не из объекта menu, для которого вы создали экземпляр menu=tkinter.Menu(root).

, поэтому tkinter.Menu.add_cascade(label="file", menu=subMenu) должно быть menu.add_cascade(label="file", menu=subMenu), а tkinter.Menu.add_cascade(label="Edit", menu=editMenu) должно быть menu.add_cascade(label="Edit", menu=editMenu).

0 голосов
/ 27 января 2019

Я считаю, что вы хотите сделать следующее:

import tkinter

def doNothing():
    print("DO SOMTHING USEFULL... please")
"TypeError: add_cascade() missing 1 required positional argument: 'self'" error.
root=tkinter.Tk()
menu=tkinter.Menu(root)
root.config(menu=menu)

subMenu=tkinter.Menu(menu, tearoff=0)
menu.add_cascade(label="file", menu=subMenu)
subMenu.add_command(label="New Project...", command=doNothing)
subMenu.add_command(label="New...", command=doNothing)
subMenu.add_separator()
subMenu.add_command(label="Exit", command=doNothing)

editMenu=tkinter.Menu(menu)
menu.add_cascade(label="Edit", menu=editMenu)
editMenu.add_command(label="Redo", command=doNothing)

root.mainloop()

"TypeError: add_cascade () отсутствует 1 обязательный позиционный аргумент: ошибка" self "". означает, что add_cascade должен использоваться на экземпляре tkinter.Menu, а не на самом классе, поэтому сначала вам нужно создать объект, который будет экземпляром tkinter.Menu, вы сделали это, но не использовали его для добавления к нему каскада.

edit:

Я исправил "sep e rator": D неверно как "sep a rator";)

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