1.22 メニューバー(menu、tkinter.Menu、tkinter.Menu.add_command、tkinter.Menu.add_cascade)
ウィンドウのタイトルバーの下に、アプリケーション独自のメニューを配置したメニューバーを設定することができます。「固有オプション」の「menu」にメニューウィジェットを登録します。メニューウィジェットは下記の「tkinter.Menu」クラスを用いて作成します。詳細は「メニューウィジェット」を参照して下さい。
引数 master にメニューバーを設定するウィンドウを指定します。
「menu」にメニューウィジェットを登録しただけではメニューバーは表示されません。メニュー項目を設定することでデフォルトでメニューバーにメニューが表示されます。メニュー項目の設定はメニューウィジェットの下記の「add_command」メソッドを用います。詳細は「メニューウィジェット」を参照して下さい。
引数の「label」オプションにメニュー項目として表示するテキストを、「command」オプションにメニューをマウスの左クリックしたときに実行する関数を指定します。メニューバーにメニュー項目として表示するテキストは、システムによって管理されるため、他のオプション設定はできません。タスクバーメニューの子メニューとして作成するメニューは他のオプション設定ができます。
メニューオブジェクトに子メニューを設定するには下記の「add_cascade」メソッドを用います。詳細は「メニューウィジェット」を参照して下さい。
引数の「label」オプションにメニュー項目として表示するテキストを、「menu」オプションに設定する子メニューオブジェクトを指定します。子メニューのオプションは全て反映されます。
次のプログラムは、メニューウィジェット「menu」を作成してウィンドウに登録しています。「add_command」メソッドでメニュー項目を設定して、関数を登録しています。関数はメニューテキストを「print」出力するようにしています。
import tkinter as tk | |
root = tk.Tk() | |
root.config(width=300, height=200) | |
menu = tk.Menu(root) | |
root['menu']=menu | |
def menufunc_1(): | |
print('menu_1') | |
def menufunc_2(): | |
print('menu_2') | |
menu.add_command(label='menu_1', command=menufunc_1) | |
menu.add_command(label='menu_2', command=menufunc_2) | |
root.mainloop() |
プログラムを実行すると、タイトルバーの下にメニューが設定されたメニューバーを持つ下図のウィンドウが表示されます。
次のプログラムは、メニューウィジェット「menu」に子メニュー「menu_1」と「menu_2」を設定しています。子メニュー「menu_1」に背景色として黄色を、「menu_2」に背景色として青色を設定しています。子メニュー「menu_1」に「add_command」メソッドでメニュー項目を設定して、関数を登録しています。関数はメニューテキストを「print」出力するようにしています。メニューウィジェット「menu」に、メニュー「menu_1」と「menu_2」を「add_cascade」メソッドで子メニューとして設定しています。
import tkinter as tk | |
root = tk.Tk() | |
root.config(width=300, height=200) | |
menu = tk.Menu(root) | |
root['menu']=menu | |
menu_1 = tk.Menu(menu, bg='yellow') | |
menu_2 = tk.Menu(menu, bg='blue') | |
def menufunc_11(): | |
print('menu_11') | |
def menufunc_12(): | |
print('menu_12') | |
menu_1.add_command(label='menu_11', command=menufunc_11) | |
menu_1.add_command(label='menu_12', command=menufunc_12) | |
menu.add_cascade(label='menu_1', menu=menu_1) | |
menu.add_cascade(label='menu_2', menu=menu_2) | |
root.mainloop() |
プログラムを実行すると、タイトルバーの下にメニューが設定されたメニューバーを持つ下図のウィンドウが表示されます。menu_1 のラベルをマウスので左クリックすると子メニューが表示されます。
子メニューの破線をクリックすると、子メニューは分離して独立のウィンドウとして表示されます。この分離をしないようにするには、メニューの作成時に「tearoff」オプションに「0」を指定します。このオプションについては、「メニューウィジェット」を参照して下さい。