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 的顶部显示菜单栏,请帮助如何做到这一点。
您的代码中存在几个问题:
你没有显示你的 canvas,不要忘记 pack
或 grid
它在 window.
您创建了一个名为 filemenu
的 sub-menu,但您没有将其添加到您的 menubar
中。因此 menubar
是空的,这就是您看不到它的原因,即使 window.config(menu=menubar)
是在 window 中显示它的正确方式。这是缺少的行:
menubar.add_cascade(label='File', menu=filemenu)
window 几何中有一个拼写错误: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()
我写了下面的代码来创建一个带有菜单栏的 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 的顶部显示菜单栏,请帮助如何做到这一点。
您的代码中存在几个问题:
你没有显示你的 canvas,不要忘记
pack
或grid
它在 window.您创建了一个名为
filemenu
的 sub-menu,但您没有将其添加到您的menubar
中。因此menubar
是空的,这就是您看不到它的原因,即使window.config(menu=menubar)
是在 window 中显示它的正确方式。这是缺少的行:menubar.add_cascade(label='File', menu=filemenu)
window 几何中有一个拼写错误:
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()