add_cascade()缺少1个必需的位置参数:self(Python:Tkinter错误)

时间:2019-01-27 00:43:06

标签: python tkinter

我正在尝试学习如何在Python中使用菜单制作基本的GUI。

我一直在关注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()

P.S。我知道我不必放“ ​​tkinter”。到处都是,但我似乎无法从“ Tkinter import *”为我工作。

如何解决以下错误?

2 个答案:

答案 0 :(得分:2)

我相信您想要做的是:

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实例的对象。您做到了,但是没有使用它来添加级联。

编辑:

我修复了“ sep e rator”:D不能正确地表示为“ sep a rator”;)

答案 1 :(得分:1)

您正在从Menu类而不是从用add_cascade实例化的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)