4
4

More than 3 years have passed since last update.

【Python/Tkinter】Menuにキーボード・ショートカットを結びつける

Posted at

はじめに

TkinterのMenuでは,コマンド付きのメニューボタンを加える際にacceleratorオプションを指定することでいい感じの見た目で表示させることができますが,実際にはこれだけでキーボード・ショートカットを有効にすることができません。メソッドと紐付ける作業が必要となります。そのためのサンプルを示します。

サンプル

import tkinter as tk
from tkinter import ttk


class Application(tk.Frame):
    def __init__(self,master):
        super().__init__(master)
        self.pack()
        self.master.geometry("300x300")
        self.master.title("Menubar Sample")
        self.create_menubar()

    def create_menubar(self):
        menubar = tk.Menu(self)
        file_menu = tk.Menu(menubar, tearoff=0)
        menubar.add_cascade(label="File", menu=file_menu)
        file_menu.add_command(label="Open", command=self.onOpen, accelerator="Ctrl+O")
        self.master.config(menu=menubar)
        self.bind_all("<Control-o>", self.onOpen)

    def onOpen(self, event=None):
        print("onOpen")


def main():
    root = tk.Tk()
    app = Application(master=root)
    app.mainloop()


if __name__ == "__main__":
    main()

self.bind_allでアプリケーションにonOpenを紐付けています。キーボード・ショートカットでonOpenを実行する際はeventが引数として渡されますが,直接メニューボタンをクリックした際には渡されません。そのため,後者に対応すべくeventの初期値をNoneにしています。これが面倒な場合は別途定義しましょう。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4