如何解决tkinter画布上的菜单栏
我编写了下面的代码来创建带有菜单栏的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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。