如何创建上下文/快捷菜单(任务栏图标的右键单击菜单)并添加命令列表,例如创建新窗口、列出打开的旧文件等?重要提示:我想要任务栏/扩展坞中的图标菜单,而不是右键单击窗口。此外,如果 PyInstaller 应用程序必须使用某些文件来保留列表中的某些项目(例如过去打开的文件(请参阅 Mac 的停靠菜单上的 VS Code)),这对我来说也非常重要。必须可以用 Python 完成。
所需菜单图片:
在 macOS 上,应用程序的 Dock 图标通常不支持显示上下文菜单,就像您在应用程序窗口中看到的那样。您需要使用 Swift 或 Objective-C 来创建自己的或编辑此类选项。
您可以编辑 Dock 图标以显示不同的图像,而不是 python 启动器的标准火箭。本教程 https://clay-atlas.com/us/blog/2021/09/06/pyqt5-en-mac-os-display-icon-dock/ 或者这可能适用于该问题 设置 tkinter 图标Mac 操作系统.
您可以做的是编辑始终显示在左上角的菜单栏。这个问题 编辑应用程序“关于”菜单 MacOSX(使用 tkinter) 可能会有所帮助,但我也提供了自己的代码。以下代码中使用的方法的文档可以在以下位置找到:https://oooutlk.github.io/tk/platform_menus.html。 希望有帮助!
from tkinter import *
import tkinter as tk
class Tutorial:
def __init__(self, root):
self.root = root
self.create_menu()
self.create_contextual_menu()
self.labell = tk.Label(root, text="Try copying this text", justify="center")
self.labell.pack()
def create_menu(self):
self.menu_bar = Menu(self.root)
# File menu
self.file_menu = Menu(self.menu_bar, tearoff=0)
self.file_menu.add_command(label="New", command=self.dummy_command)
self.file_menu.add_command(label="Open", command=self.dummy_command)
self.file_menu.add_separator()
self.file_menu.add_command(label="Save", command=self.dummy_command)
self.file_menu.add_command(label="Save As", command=self.dummy_command)
self.file_menu.add_separator()
self.file_menu.add_command(label="Exit", command=self.root.quit)
self.menu_bar.add_cascade(label="File", menu=self.file_menu)
# Edit menu
self.edit_menu = Menu(self.menu_bar, tearoff=0)
self.edit_menu.add_command(label="Cut", command=self.dummy_command)
self.edit_menu.add_command(label="Copy", command=self.dummy_command)
self.edit_menu.add_command(label="Paste", command=self.dummy_command)
self.menu_bar.add_cascade(label="Edit", menu=self.edit_menu)
# Help menu
self.help_menu = Menu(self.menu_bar, tearoff=0)
self.help_menu.add_command(label="About", command=self.dummy_command)
self.menu_bar.add_cascade(label="Help", menu=self.help_menu)
# Set the menu
self.root.config(menu=self.menu_bar)
def create_contextual_menu(self):
self.context_menu = Menu(self.root, tearoff=0)
self.context_menu.add_command(label="Cut", command=self.dummy_command)
self.context_menu.add_command(label="Copy", command=self.dummy_command)
self.context_menu.add_command(label="Paste", command=self.dummy_command)
# Bind the context menu to the root window
self.root.bind("<Button-2>", self.show_context_menu)
# might be Button-3 see:
# https://stackoverflow.com/questions/59696557/tkinter-button-different-commands-on-right-and-left-mouse-click
def show_context_menu(self, event):
# Display the context menu at the event location
self.context_menu.post(event.x_root, event.y_root)
def dummy_command(self):
print("This is a dummy command.")
if __name__ == "__main__":
root = tk.Tk()
app = Tutorial(root)
root.mainloop()