3

を使用してメニューバーを構築する Tkinter では、コマンドのホットキー バインディングを作成する引数に<menu_item>.add_command()文字列が必要です。accelerator

ユーザーのプラットフォームが Mac かそれ以外かをチェックするメソッドを作成し、そうであればCommand他のキーと組み合わせたキー文字列を返します。

しかし、それは機能しません->メニュー項目をクリックするとメニューが構築されていますが、ホットキーでは機能しません。見えるけど⌘</kbd> + N in the menu..

私の最初の考えは、self.hot_key()引数として渡されたときにメソッドが呼び出されないということです..

import sys
import Tkinter

class app(object):

    def __init__(self):
        self.gui = Tkinter.Tk()
        self.gui.minsize(width=640, height=320)
        menu = Tkinter.Menu(self.gui)
        filemenu = Tkinter.Menu(menu, tearoff=0)
        filemenu.add_command(
            label       = 'New',
            command     = self.New,
            accelerator = self.hot_key('n')
        )
        menu.add_cascade(
            label = 'File',
            menu  = filemenu
        )
        self.gui.config(menu=menu)

        self.text = Tkinter.Text(self.gui)
        self.text.pack(expand=Tkinter.YES, fill=Tkinter.BOTH)

    def hot_key(self, *keys):
        super_key = 'Command' if sys.platform == 'darwin' else 'Control'
        return '{super}+{keys}'.format(super=super_key, keys='+'.join(keys))

    def New(self):
        print "I'm working!"

App = app()
App.gui.mainloop()
4

1 に答える 1

3

このページによると、

「accelerator」オプションは、このメニューに関連付ける必要があるメニュー アクセラレータを示すために使用されます。これは実際にアクセラレータを作成するのではなく、メニュー項目の横にあるものを表示するだけです。アクセラレータのバインディングを自分で作成する必要があります。

したがって、acceleratorキーワード引数は設計どおりに機能します。Command-N 記号がメニューに表示されます。

mgilson がコメントで示唆しているbind_allように、キーボードの組み合わせで実際に何かを実行するために使用できます。

self.gui.bind_all("<Command-n>", lambda event: self.New())
于 2013-06-21T12:28:34.900 に答える