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

时间:2013-05-30 23:38:02

标签: python macos unicode tkinter accelerator

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

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

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

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

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

accelerator=u"\u2318\u0050"
accelerator=u"\u2318" + "P"
accelerator=u"\u2318" + u"P"
accelerator=u"\u2318P"
accelerator=u"".join([u"\u2318", u"P"])

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

Python 2.7.3,Mac OS X 10.8.3

2 个答案:

答案 0 :(得分:1)

实际上这很简单,我所做的只是使用string formatting来连接text="%s%s" % (u"\u2318","P")

以下是Tkinter App示例,显示屏很小但显示了您需要的内容。

import Tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.label = tk.Label(text="%s%s" % (u"\u2318","P"))
        self.label.pack(padx=10, pady=10)

app = SampleApp()
app.mainloop()

输出:

⌘P

答案 1 :(得分:1)

在进一步在线搜索后,我终于找到了具有解决方案的a page。我很惊讶(并且有点恼火)这个解决方案与我迄今为止引用的Tkinter 8.4的PDF文档中概述的解决方案不同(新墨西哥技术公司发布的解决方案)。我找到了Tkinter 8.5文档的链接,但是他们也列出了错误的过程。

无论如何,它比我想象的要简单得多,并且类似于用于键绑定的语法,但略有不同。 Tkinter不是直接在加速器字符串中包含命令符号,而是使用文字“Command”(或缩写为“Cmd”),并在内部将其转换为菜单中的可显示字符“⌘”。所以我的结果是:

sub_menu.add_command(label="Print", command=self.print_, accelerator="Command-P")

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

Print ⌘P

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