画布上的 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】:

您的代码中有几个问题:

    你没有显示你的画布,不要忘记在窗口中packgrid它。

    您创建了一个名为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 菜单栏的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 3 和 tkinter 模块从右到左对齐菜单栏中的项目?

Tkinter 菜单栏

如何在 Tkinter 中创建垂直菜单栏?

Tkinter实现窗口菜单栏

如何为 pygame 创建这个 tkinter 菜单栏

Python中tkinter中控件的使用(7,Menu顶层菜单栏)