GUI

Pythonでペイントアプリを作ってみる (1) メニューとショートカット

Pythonと「Tkinter」で何回かに分けて、以下のような機能を実装したアプリを開発してみます。

・一般的なメニュー(ショートカットに対応)
・線、円、長方形、多角形などの基本的な図形を描く
・カラーパレットとブラシツールを使って描く

タカ

今回は、メニューとショートカットを実装してみます。

サンプルコードの補足

タカ

サンプルコードでは、メニューの作成、追加、項目の追加、区切り線を追加、ショートカットの設定などを行っています。

メニューの追加部分で、rootのmenuへmenubarの表現が少しクセがあるかもしれません。

self.root.config(menu=menubar)

また、このメニューをメニューバーに追加するところも、add_cascadeを忘れないように注意しましょう。

menubar.add_cascade(label="ファイル", menu=file_menu, underline=0)

サンプルコード

import tkinter as tk


class PaintApp():

    root = None

    def __init__(self, root):
        self.root = root
        self.setup_menu()
        self.bind_shortcut()

    def setup_menu(self):
        menubar = tk.Menu(self.root)
        self.setup_file_menu(menubar)
        self.root.config(menu=menubar)

    def setup_file_menu(self, menubar):
        file_menu = tk.Menu(menubar, tearoff=False)
        file_menu.add_command(label="新規", underline=None,
                              accelerator="Ctrl+N", command=self.new_file)
        file_menu.add_command(label="保存", underline=None,
                              accelerator="Ctrl+S", command=self.save_file)
        file_menu.add_separator()
        file_menu.add_command(label="終了", underline=None)
        menubar.add_cascade(label="ファイル", menu=file_menu, underline=0)

    def bind_shortcut(self):
        self.root.bind('<Control-n>', self.new_file)
        self.root.bind('<Control-s>', self.save_file)

    def new_file(self, event=None):
        print("ファイルを作成")

    def save_file(self, event=None):
        print("ファイルを保存")


if __name__ == '__main__':
    root = tk.Tk()
    app = PaintApp(root)
    root.mainloop()
実行結果