如何在 Tkinter 菜单中获取 Mac“命令”符号

Jus*_*ett 5 python unicode macos tkinter accelerator

我为朋友的生意编写了一个 Python 程序,并使用 Tkinter 作为界面。到目前为止,所有功能都已添加到主程序窗口中,但我现在添加打印功能,创建了一个简单的“文件”菜单,并希望向该菜单添加“打印”条目,包括显示相关的键盘快捷键。

在我的 Mac 上,我希望快捷键是 Command-P。我找到了 Mac“命令”符号的 Unicode 值,并尝试了各种方法来创建一个简单地连接该符号和字母“P”的加速器字符串,但没有任何效果。我会在“打印”旁边的菜单中显示符号或字母,但不会同时显示两者。

以下是添加菜单项的完整代码行,以及构建字符串的最新尝试(我相信我unicode.join在 Stack Overflow 的其他地方找到了此选项):

sub_menu.add_command(label="Print", command=self.print_, accelerator=unicode.join(u"\u2318", u"P"))
// Only the "P" displays
Run Code Online (Sandbox Code Playgroud)

以下是我尝试过的一些其他选项(为了清楚起见,行被截断)。对于每个选项,仅显示“命令”符号:

accelerator=u"\u2318\u0050"
accelerator=u"\u2318" + "P"
accelerator=u"\u2318" + u"P"
accelerator=u"\u2318P"
accelerator=u"".join([u"\u2318", u"P"])
Run Code Online (Sandbox Code Playgroud)

到目前为止,我还不需要了解太多有关 Unicode 字符串的知识,所以也许我在这方面做错了。然而,我所做的所有尝试都是在这里和其他地方进行各种搜索的结果,但到目前为止没有任何效果。任何有关如何完成这项工作的见解都将受到欢迎!

Python 2.7.3、Mac OS X 10.8.3

Jus*_*ett 2

经过网上进一步查找,终于找到了一个有解决方案的页面。我很惊讶(有点恼火),这个解决方案与我迄今为止引用的 Tkinter 8.4 PDF 文档中概述的解决方案(新墨西哥理工学院发布的)不同。我找到了 Tkinter 8.5 文档的链接,但它们也列出了不正确的过程。

\n\n

不管怎样,它比我想象的要简单得多,并且与用于键绑定的语法类似,但略有不同。Tkinter 没有直接在加速器字符串中包含命令符号,而是采用字面单词“Command”(或缩写“Cmd”),并在内部将其转换为菜单中的可显示字符“\xe2\x8c\x98”。所以我的结果是:

\n\n
sub_menu.add_command(label="Print", command=self.print_, accelerator="Command-P")\n
Run Code Online (Sandbox Code Playgroud)\n\n

...我在完整菜单项中得到的是:

\n\n
Print \xe2\x8c\x98P\n
Run Code Online (Sandbox Code Playgroud)\n\n

如上面链接的页面所示,其他修饰键也存在类似的快捷键,并且在 Mac OS X 上,这些快捷键都会自动转换为其图形等效项。

\n