I’m having an error while creating a menu in Python using Tkinter. What am I doing wrong? My code and complete error traceback are given below.
My code:
JavaScript
x
39
39
1
from tkinter import *
2
3
4
root = Tk()
5
root.title("FoodU")
6
root.geometry("1600x2560+0+0")
7
8
9
#main BEGIN
10
11
main = Frame(root, bg="light coral")
12
main.pack(fill=BOTH)
13
14
#main END
15
16
17
#navigation BEGIN
18
19
navigation = Frame(main, bg="floral white")
20
navigation.grid(padx=20)
21
22
23
nav = Menu(navigation)
24
navigation.config(menu=nav)
25
26
27
navcuisine = Menu(nav)
28
nav.add_casacde(label="Cuisines", menu=navcuisine)
29
navcuisine.add_command(label="Indian")
30
navcuisine.add_command(label="Chinese")
31
navcuisine.add_command(label="Japanese")
32
navcuisine.add_command(label="Italian")
33
navcuisine.add_command(label="Thai")
34
35
36
#navigation END
37
38
root.mainloop()
39
The error:
JavaScript
1
9
1
Traceback (most recent call last):
2
File <file path>, line 52, in <module>
3
navigation.config(menu=nav)
4
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 1482, in configure
5
return self._configure('configure', cnf, kw)
6
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 1473, in _configure
7
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
8
_tkinter.TclError: unknown option "-menu"
9
What does this error mean? What am I doing wrong, and how can I fix it?
Thank you so much!!
Advertisement
Answer
JavaScript
1
7
1
navigation = Frame(main, bg="floral white")
2
navigation.grid(padx=20)
3
4
5
nav = Menu(navigation)
6
navigation.config(menu=nav)
7
This is a problem. Frame objects do not support the menu
configuration option. As far as I know, only Toplevel widgets allow menu
. One possible solution is to make nav
a menu of root
instead.
JavaScript
1
3
1
nav = Menu(root)
2
root.config(menu=nav)
3
Additionally, nav.add_casacde(label="Cuisines", menu=navcuisine)
misspells “cascade”. Try nav.add_cascade(label="Cuisines", menu=navcuisine)
instead.