我得到了什么:
我的代码:
self.menu_bar = tk.Menu(self)
...
self.read_menu = tk.Menu(self.menu_bar, tearoff=False)
self.menu_bar.add_cascade(label='Read', underline=0, state=tk.DISABLED, menu=self.read_menu)
self.read_menu.add_command(label='First Page', underline=0, image=self.read_first_image, compound=tk.LEFT,
command=self.menu_read_first, accelerator='Home', state=tk.DISABLED)
self.read_menu.add_command(label='Last Page', underline=1, image=self.read_last_image, compound=tk.LEFT,
command=self.menu_read_last, accelerator='End')
self.read_menu.add_command(label='Next Page', underline=0, image=self.read_next_image, compound=tk.LEFT,
command=self.menu_read_next, accelerator='PgDn')
self.read_menu.add_command(label='Previous Page', underline=0, image=self.read_previous_image, compound=tk.LEFT,
command=self.menu_read_previous, accelerator='PgUp', state=tk.DISABLED)
...
self.menu_bar.add_separator()
self.menu_bar.add_command(command=self.menu_read_first, image=self.read_first_image, state=tk.DISABLED)
self.menu_bar.add_command(command=self.menu_read_previous, image=self.read_previous_image, state=tk.DISABLED)
self.menu_bar.add_command(command=self.menu_read_next, image=self.read_next_image)
self.menu_bar.add_command(command=self.menu_read_last, image=self.read_last_image)
如您所见,分隔符和图标不会显示在top菜单中,但会在子菜单中显示: - (
我是在做错事还是不可能?
答案 0 :(得分:3)
如果您使用Windows,则无法执行您想要的操作。 Tkinter不允许您向菜单栏添加图标。我认为这与底层tk库使用的Windows API中的限制有关。
注意:菜单栏是为菜单设计的,而不是命令。在菜单栏上放置命令可能会使用户感到沮丧,因为他们希望点击某个项目会显示一个菜单。
答案 1 :(得分:1)
无法将图像添加到菜单栏,因此此菜单栏的子菜单将包含图像而不是字符串名称。但是,您可以使用Menubutton
窗口小部件,并将其位置设置为靠近父窗口的左上角,以使视图具有Menu
对象的相同视图。以下是如何实现这一目标的:
from tkinter import *
root = Tk()
root.geometry("500x500-500+50")
imgvar1 = PhotoImage(file='airplane1.png')
mainmenu1 = Menubutton(root, image=imgvar1)
mainmenu1.grid(row=0, column=0)
submenu1 = Menu(mainmenu1)
mainmenu1.config(menu=submenu1)
submenu1.add_command(label="Option 1.1")
submenu1.add_command(label="Option 1.2")
imgvar2 = PhotoImage(file='automobile1.png')
mainmenu2 = Menubutton(root, image=imgvar2)
mainmenu2.grid(row=0, column=1)
submenu2 = Menu(mainmenu2)
mainmenu2.config(menu=submenu2)
submenu2.add_command(label="Option 2.1")
submenu2.add_command(label="Option 2.2")
imgvar = PhotoImage(file='eye.gif')
button = Button(root, image=imgvar)
button.grid(row=0, column=2)
此外,我认为这是Menu
中的一种错误,因为add_cascade
的{{1}}方法有image
选项,因为它不返回任何未知选项错误,但它也没有显示任何图像,它只显示一个字符串:"(图像)"。
答案 2 :(得分:1)
工作案例:
self.MyImage,self.dictImg={},{}
self.ypath='path'
self.dictImg[0]='img0.png'
self.MyImage['Option'] =PhotoImage(file=self.ypath+os.sep+self.dictImg[0])
self.casmenu.choices.wierdones.add_command(label='Option',image=self.MyImage['Option'],compound='left')
请注意:您必须指明compound='left'
的相对选项image=self.MyImage['Option']
。
答案 3 :(得分:0)
import tkinter as tk
from tkinter import *
your_app_name = Tk()
menubar = Menu(your_app_name)
file = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label="Command", menu=file_menu)
icon = PhotoImage(file='your_file.png') # or: (file='./your_file.png')
file_menu.add_command(label='New', image=icon, compound='left', command=some_function)
your_app_name.config(menu=menubar)
your_app_name.mainloop()