※このページではアフィリエイト広告を利用しています

【Python応用】Tkinterでアプリ作成-Menubarの使用例まとめ-

Python

ここでは、Tkinterでの「Menubar」の使用例をまとめています。

この記事の対象

  • Menubarとは?を知りたい方
  • Menubarの使用例を知りたい方
  • Submenusの使用例を知りたい方
スポンサーリンク
スポンサーリンク

Menubarとは?

Menubarはアプリに階層構造のメニューを実現したい場合に使用します。

サブメニューなども実現でき、アプリ作成では使用する頻度が多いものです。

基本的な型

tk.Menu(root)
root.config(menu=menubar)

ここでは、rootというMainウィンドウとしています。基本的にはMenuを作成して、config関数でMainウィンドウ内のmenubarとして指定しています。

引数は、トップウィンドウを指定しています。

主なoptionは以下の通りです。

Option内容
postcommand表示時に呼び出される関数
tearoffメニューの切り離し設定。0:無し。1:有り
tearoffcommand切り離し時の関数
title切り離しメニューのタイトル設定

Menu操作関数

主に使用する関数です。

項目内容
add_commandサブメニューの追加
add_cascadeメインメニューの追加
add_radiobutton現在選択中のサブメニューにチェックを付与、追加
add_checkbutton選択したらサブメニューにチェックを付与、追加
add_separatorサブメニューの間へ、境界線を挿入
indexメニュー名のindex(位置)を取得
insert_checbutton指定した位置へ選択中のサブメニューにチェックを付与、追加
insert_command指定した位置へサブメニューを追加
insert_cascade指定した位置へメインメニューを追加
insert_radiobutton指定した位置へ選択中のサブメニューにチェックを付与、追加
insert_separator指定した位置の上へ境界線を挿入

Menubarの作成

import tkinter as tk
import tkinter.ttk as ttk

#1---メインウィンドウの作成
root = tk.Tk()
root.title("Test")
root.geometry("600x300")

#2---menubarの作成
menubar = tk.Menu(root)
root.config(menu=menubar)

#3---menubarの設定
set_menu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label='設定', menu=set_menu)

root.mainloop()

結果

以下、解説になります。

#1---メインウィンドウの作成
root = tk.Tk()
root.title("Test")
root.geometry("600x300")

1の部分でウィンドウを作成しています。

#2---menubarの作成
menubar = tk.Menu(root)
root.config(menu=menubar)

次に2の部分では、menubarを作成しています。ここで、menubarとしてconfig関数で作成しています。

#3---menubarの設定
set_menu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label='設定', menu=set_menu)

3の部分では、作成したmenubarに親メニューを設置しています。親メニューは「add_cascade」で設定します。

add_cascadeで主に使用されるオプションは以下の通りです。

Option内容
labelメニューのラベル設定
bitmap メニューのラベルをXBM形式の画像に指定
stateサブメニューの設定。normal,active,disableから選択
imageメインメニューのラベルを画像に指定
menuメインメニューに含むサブメニューの設定を指定

Submenuの作成

import tkinter as tk
import tkinter.ttk as ttk

#1---メインウィンドウの作成
root = tk.Tk()
root.title("Test")
root.geometry("600x300")

#2---menubarの作成
menubar = tk.Menu(root)
root.config(menu=menubar)

#3---menubarの設定
set_menu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label='設定', menu=set_menu)

#4---Submenuの設定
set_menu.add_command(label="SubMenu")

root.mainloop()

結果

以下、解説になります。

1~3はMenubarの作成で解説しているので、省略します。

#4---Submenuの設定
set_menu.add_command(label="SubMenu")

4の部分でサブメニューを追加しています。サブメニューは「add_command」で追加できます。

add_commandで主に使用されるオプションは以下の通りです。

Option内容
labelサブメニューのラベル設定
acceleratorlabelの右側にショートカットキーなどを設定
bitmap サブメニューのラベルをXBM形式の画像に指定
stateサブメニューの設定。normal,active,disableから選択
imageサブメニューのラベルを画像に指定
commandサブメニューを選択したときの実行する関数
font形式とサイズの指定

Radiobuttonのサブメニュー作成

import tkinter as tk
import tkinter.ttk as ttk

#1---メインウィンドウの作成
root = tk.Tk()
root.title("Test")
root.geometry("600x300")

#2---menubarの作成
menubar = tk.Menu(root)
root.config(menu=menubar)

#3---menubarの設定
set_menu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label='設定', menu=set_menu)

#4---Submenuの設定
set_menu.add_command(label="SubMenu")

#5---Radiobuttonの追加
setting_menu.add_radiobutton(label="SubRadio")

root.mainloop()

結果

以下、解説になります。

1~4はSubmenuの作成で解説しているので、省略します。

#5---Radiobuttonの追加
setting_menu.add_radiobutton(label="SubRadio")

5の部分でRadiobuttonを追加しています。

add_radiobuttonで主に使用されるオプションは以下の通りです。

Option内容
labelラベル設定
acceleratorlabelの右側にショートカットキーなどを設定
bitmapラベルをXBM形式の画像に指定
statenormal,active,disableから選択
imageラベルを画像に指定
command選択したとき実行する関数
indicatoronチェック記号の表示有無

新しいウィンドウの作成

import tkinter as tk
import tkinter.ttk as ttk

#5---新しいウィンドウ作成関数
def create_dialog():
    dlg = tk.Toplevel()
    dlg.title("New Dialog")
    dlg.geometry("300x200")

#1---メインウィンドウの作成
root = tk.Tk()
root.title("Test")
root.geometry("600x300")

#2---menubarの作成
menubar = tk.Menu(root)
root.config(menu=menubar)

#3---menubarの設定
set_menu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label='設定', menu=set_menu)

#4---Submenuの設定
set_menu.add_command(label="SubMenu",command = create_dialog)

root.mainloop()

結果

以下、解説になります。

#5---新しいウィンドウ作成関数
def create_dialog():
    dlg = tk.Toplevel()
    dlg.title("New Dialog")
    dlg.geometry("300x200")

5の部分では、コマンドの処理関数になります。Submenuをクリックしたら「Toplevel」メソッドを用いて新しいウィンドウを作成しています。

1~4の部分については、「Submenuの作成」をご参照下さい。

ショートカットキーの有効化

import tkinter as tk

def file_open():
    print("File Open")

def file_save():
    print("File Save")

def exit_app():
    root.destroy()

root = tk.Tk()

#1---メニューバーの作成
menubar = tk.Menu(root)

#2---サブメニューの作成
file_menu = tk.Menu(menubar, tearoff=0)
file_menu.add_command(label="Open", command=file_open, accelerator="Ctrl+O")
file_menu.add_command(label="Save", command=file_save, accelerator="Ctrl+S")
file_menu.add_separator()
file_menu.add_command(label="Exit", command=exit_app, accelerator="Ctrl+Q")
menubar.add_cascade(label="File", menu=file_menu)

#3---ウィンドウにメニューバーを設定
root.config(menu=menubar)

#4---ショートカットキーのバインディング
root.bind('<Control-o>', lambda event: file_open())
root.bind('<Control-s>', lambda event: file_save())
root.bind('<Control-q>', lambda event: exit_app())

root.mainloop()

結果

ショートカットキーを有効化するには、「accelerator」を設定する必要があります。

以下は解説になります。

#1---メニューバーの作成
menubar = tk.Menu(root)

1の部分ではメニューバーの作成を行っています。

#2---サブメニューの作成
file_menu = tk.Menu(menubar, tearoff=0)
file_menu.add_command(label="Open", command=file_open, accelerator="Ctrl+O")
file_menu.add_command(label="Save", command=file_save, accelerator="Ctrl+S")
file_menu.add_separator()
file_menu.add_command(label="Exit", command=exit_app, accelerator="Ctrl+Q")
menubar.add_cascade(label="File", menu=file_menu)

2の部分ではサブメニューを作成しています。「add_command()」関数の引数に「accelerator」を追加しています。

#3---ウィンドウにメニューバーを設定
root.config(menu=menubar)

3の部分ではメニューバーを設定しています。

#4---ショートカットキーのバインディング
root.bind('<Control-o>', lambda event: file_open())
root.bind('<Control-s>', lambda event: file_save())
root.bind('<Control-q>', lambda event: exit_app())

4の部分では特定のキーバインド(この例ではCtrl+O、Ctrl+S、Ctrl+Q)が押されたときに関数を実行するように設定しています。

タイトルとURLをコピーしました