问题描述
我编写了下面的代码来创建带有菜单栏的tkinter表单,我正在使用画布小部件来排列所有按钮和标签,但是我无法在画布上显示菜单栏 下面是我为此编写的代码:
from tkinter import *
import tkinter as tk
window = Tk()
window.title("test")
window.geometry("500*500")
canvas1 = Canvas(window,width= 500,height= 500,bg = 'midnight blue')
menubar = tk.Menu(window)
filemenu = tk.Menu(menubar,tearoff=0)
filemenu.add_command(label="New",command=dosomething)
filemenu.add_command(label="Edit",command=dosomething)
button1 = tk.Button(window,text="Say Hello")
window.config(menu = menubar)
canvas1.create_window(100,100,window = button1)
window.mainloop()
解决方法
您的代码中有几个问题:
-
您没有在显示画布,请不要忘记在窗口中
pack
或grid
。 -
您创建了一个名为
filemenu
的子菜单,但是没有将其添加到menubar
中。因此menubar
为空,这就是为什么您看不到它的原因,尽管window.config(menu=menubar)
是在窗口中显示它的正确方法。这是缺少的行:menubar.add_cascade(label='File',menu=filemenu)
-
窗口几何图形中有一个错字:
window.geometry("500*500")
应该是window.geometry("500x500")
。 -
线条
from tkinter import * import tkinter as tk
是多余的,您要导入
tkinter
两次。我建议您删除from tkinter import *
(请参见此处的说明:Why is "import *" bad?,What exactly does "import *" import?)
这是完整的代码:
import tkinter as tk
def dosomething():
print('do something')
window = tk.Tk()
window.title("test")
window.geometry("500x500")
canvas1 = tk.Canvas(window,width=500,height=500,bg='midnight blue')
menubar = tk.Menu(window)
filemenu = tk.Menu(menubar,tearoff=0)
filemenu.add_command(label="New",command=dosomething)
filemenu.add_command(label="Edit",command=dosomething)
menubar.add_cascade(label='File',menu=filemenu)
button1 = tk.Button(window,text="Say Hello")
window.config(menu=menubar)
canvas1.create_window(100,100,window=button1)
canvas1.pack()
window.mainloop()