tkinter 中的标题栏菜单
Title bar menu in tkinter
我想我们中的大多数人一定都看过命令提示符 (windows) 以及当我们打开它并单击它的图标时它会显示一个菜单。我们可以用 tkinter 做类似的事情吗?这不是普通的菜单栏。
这是一个命令提示符的图示。
这只是一个解决方法的示例,无需您自己完成所有 window 管理。当然它需要改进,但作为一个开始:Popup stolen from
import tkinter as tk
from PIL import Image, ImageTk
def popup(event):
popup_menu.tk_popup(event.x_root, event.y_root, 0)
def set_icon():
global top, popup
top = tk.Toplevel(root)
top.overrideredirect(1)
top.attributes('-topmost',True)
offset = 30
x,y = root.winfo_rootx(),root.winfo_rooty()-offset
width, height = offset,offset
top.geometry("%dx%d+%d+%d" % (width,height, x,y))
my_label = tk.Label(top, image=photo)
my_label.pack(fill='both')
global popup_menu
popup_menu = tk.Menu(top, tearoff=0)
popup_menu.add_command(label="Delete",
command=lambda :print('del'))
popup_menu.add_command(label="Select All",
command=lambda :print('sel'))
top.bind("<Button-1>", popup)
def grab(event):
top.geometry(f'+{event.x+10}+{event.y+2}')
root=tk.Tk()
ico = Image.open('prac_img/p2.png')
photo = ImageTk.PhotoImage(ico)
root.iconphoto(False,photo)
#root.wm_iconphoto(False,photo)
root.bind('<Configure>',grab)
root.update_idletasks()
set_icon()
root.mainloop()
另一种方法是编写您自己的标题栏并使用 overrideredirecr(1)
,这将由您的系统 window 管理器取消装饰您的 window。
我想我们中的大多数人一定都看过命令提示符 (windows) 以及当我们打开它并单击它的图标时它会显示一个菜单。我们可以用 tkinter 做类似的事情吗?这不是普通的菜单栏。
这是一个命令提示符的图示。
这只是一个解决方法的示例,无需您自己完成所有 window 管理。当然它需要改进,但作为一个开始:Popup stolen from
import tkinter as tk
from PIL import Image, ImageTk
def popup(event):
popup_menu.tk_popup(event.x_root, event.y_root, 0)
def set_icon():
global top, popup
top = tk.Toplevel(root)
top.overrideredirect(1)
top.attributes('-topmost',True)
offset = 30
x,y = root.winfo_rootx(),root.winfo_rooty()-offset
width, height = offset,offset
top.geometry("%dx%d+%d+%d" % (width,height, x,y))
my_label = tk.Label(top, image=photo)
my_label.pack(fill='both')
global popup_menu
popup_menu = tk.Menu(top, tearoff=0)
popup_menu.add_command(label="Delete",
command=lambda :print('del'))
popup_menu.add_command(label="Select All",
command=lambda :print('sel'))
top.bind("<Button-1>", popup)
def grab(event):
top.geometry(f'+{event.x+10}+{event.y+2}')
root=tk.Tk()
ico = Image.open('prac_img/p2.png')
photo = ImageTk.PhotoImage(ico)
root.iconphoto(False,photo)
#root.wm_iconphoto(False,photo)
root.bind('<Configure>',grab)
root.update_idletasks()
set_icon()
root.mainloop()
另一种方法是编写您自己的标题栏并使用 overrideredirecr(1)
,这将由您的系统 window 管理器取消装饰您的 window。