5

我为朋友的业务编写了一个 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

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

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

4

2 回答 2

2

在网上进一步搜索后,我终于找到了一个有解决方案的页面。我很惊讶(也有点恼火)这个解决方案与我迄今为止参考的 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 上,这些都自动翻译成它们的图形等效项。

于 2013-06-03T16:10:03.873 回答
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
于 2013-06-03T02:03:45.460 回答