2013-05-30 52 views
4

我已經爲朋友的業務編寫了Python程序,並且正在使用Tkinter作爲接口。到目前爲止,所有功能都已添加到主程序窗口中,但我現在添加了一個打印功能,創建了一個簡單的「文件」菜單,並且希望爲該菜單添加一個「打印」條目,包括顯示相關鍵盤快捷鍵。如何獲得Tkinter菜單中的Mac「命令」符號

在我的Mac上,我希望快捷方式爲Command-P。我發現了Mac的「command」符號的Unicode值,並嘗試過用各種方法創建一個簡單地連接符號和字母「P」的加速器字符串,但沒有任何效果。我在「打印」旁邊的菜單中找到要顯示的符號或字母,但從未同時顯示。

這裏是代碼的全部行,在建立字符串添加菜單項,用最新的嘗試(我相信我發現這個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

+0

''從我的簡短的谷歌搜索..但這可能無法正常工作... –

+0

這是[answer](http:// stackoverflow。com/questions/16379877/how-to-get-tkinter-mac-friendly-menu-shortcuts-cmdkey/16471555#16471555)我的幫助? – martineau

+1

@Joran和@martineau:你的兩條評論都是指對擊鍵事件本身的處理,但那不是我的問題。我想弄清楚如何使用菜單的'add_command'方法的'accelerator'參數來顯示「⌘P」作爲菜單項的鍵盤快捷鍵。我上面列出的解決方案要麼給我「⌘」或「P」,但不能將兩個字符放在一起。 –

回答

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上,這些全部都會自動轉換爲圖形等值。

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 
+0

雖然適用於標籤,但它不適用於菜單,這是我的原始問題。我在進一步的網絡搜索後終於找到了解決方案,並且很快就會發布我的答案。 –