Canvas 上的 tkinter 菜单栏

tkinter Menubar on Canvas

我写了下面的代码来创建一个带有菜单栏的 tkinter 表单,我正在使用 canvas 小部件来排列所有按钮和标签,但是我无法在canvas 下面是我为此编写的代码:

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()

我不知道如何在 canvas 的顶部显示菜单栏,请帮助如何做到这一点。

您的代码中存在几个问题:

  1. 你没有显示你的 canvas,不要忘记 packgrid 它在 window.

  2. 您创建了一个名为 filemenu 的 sub-menu,但您没有将其添加到您的 menubar 中。因此 menubar 是空的,这就是您看不到它的原因,即使 window.config(menu=menubar) 是在 window 中显示它的正确方式。这是缺少的行:

     menubar.add_cascade(label='File', menu=filemenu)
    
  3. window 几何中有一个拼写错误:window.geometry("500*500") 应该是 window.geometry("500x500")

  4.  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()