画布上的 tkinter 菜单栏
Posted
技术标签:
【中文标题】画布上的 tkinter 菜单栏【英文标题】:tkinter Menubar on Canvas 【发布时间】:2020-08-12 09:23:39 【问题描述】:我编写了下面的代码来创建一个带有菜单栏的 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()
我不知道如何在画布顶部显示菜单栏,请帮助了解如何做到这一点。
【问题讨论】:
在您提供的代码中,您没有在窗口中显示canvas1
,您忘记打包或网格化它。
另外,您没有将filemenu
添加到您的menubar
,所以它是空的。
【参考方案1】:
您的代码中有几个问题:
你没有显示你的画布,不要忘记在窗口中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()
【讨论】:
谢谢 j_4321 我弄错了代码现在可以正常工作了以上是关于画布上的 tkinter 菜单栏的主要内容,如果未能解决你的问题,请参考以下文章