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

我不确定如何在画布顶部显示菜单栏,请提供帮助。

解决方法

您的代码中有几个问题:

  1. 您没有在显示画布,请不要忘记在窗口中packgrid

  2. 您创建了一个名为filemenu的子菜单,但是没有将其添加到menubar中。因此menubar为空,这就是为什么您看不到它的原因,尽管window.config(menu=menubar)是在窗口中显示它的正确方法。这是缺少的行:

     menubar.add_cascade(label='File',menu=filemenu)
    
  3. 窗口几何图形中有一个错字: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()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...