我正在尝试学习如何在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 *”为我工作。
如何解决以下错误?
答案 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)
。