2.22 メニューバー(menu、tkinter.Menu、tkinter.Menu.add_command、tkinter.Menu.add_cascade)
サブウィンドウのタイトルバーの下に、メインウィンドウと同様にアプリケーション独自のメニューバーを設定することができます。1.22 メニューバーを参照して下さい。
次のプログラムは、サブウィンドウにメニューウィジェット「menu」を作成してサブウィンドウに登録しています。「add_command」メソッドでメニュー項目を設定して、関数を登録しています。関数はメニューテキストを「print」出力するようにしています。
import tkinter as tk | |
root = tk.Tk() | |
root.geometry('300x200+100+100') | |
sub = tk.Toplevel(root, width=300, height=200, bg='red') | |
sub.geometry('+140+120') | |
root.update() | |
root.wm_deiconify() | |
sub.wm_deiconify() | |
menu = tk.Menu(sub) | |
sub['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.geometry('300x200+100+100') | |
sub = tk.Toplevel(root, width=300, height=200, bg='red') | |
sub.geometry('+140+120') | |
root.update() | |
root.wm_deiconify() | |
sub.wm_deiconify() | |
menu = tk.Menu(sub) | |
sub['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」を指定します。このオプションについては、「メニューウィジェット」を参照して下さい。