第 2 章 サブウィンドウ

◀ 2.21 ウィンドウアイコン   【目  次】  2.23 システムメニュー ▶

999999

 更新日:


 このホームページは Amazon Kindle 本の作成中の草稿です。日々、原稿を見直しているので、内容が変わることに留意して読んで下さい。本が出版され次第、このホームページは削除されます。

2.22 メニューバー(menu、tkinter.Menu、tkinter.Menu.add_command、tkinter.Menu.add_cascade)

 サブウィンドウのタイトルバーの下に、メインウィンドウと同様にアプリケーション独自のメニューバーを設定することができます。1.22 メニューバーを参照して下さい。

 次のプログラムは、サブウィンドウにメニューウィジェット「menu」を作成してサブウィンドウに登録しています。「add_command」メソッドでメニュー項目を設定して、関数を登録しています。関数はメニューテキストを「print」出力するようにしています。

1
import tkinter as tk
2
root = tk.Tk()
3
root.geometry('300x200+100+100')
4
sub = tk.Toplevel(root, width=300, height=200, bg='red')
5
sub.geometry('+140+120')
6
root.update()
7
root.wm_deiconify()
8
sub.wm_deiconify()
9
menu = tk.Menu(sub)
10
sub['menu']=menu
11
def menufunc_1():
12
    print('menu_1')
13
def menufunc_2():
14
    print('menu_2')
15
menu.add_command(label='menu_1', command=menufunc_1)
16
menu.add_command(label='menu_2', command=menufunc_2)
17
root.mainloop()

 プログラムを実行すると、サブウィンドウのタイトルバーの下にメニューが設定されたメニューバーを持つ下図のウィンドウが表示されます。

A002_SubWindow_02-22

 次のプログラムは、メニューウィジェット「menu」に子メニュー「menu_1」と「menu_2」を設定しています。子メニュー「menu_1」に背景色として黄色を、「menu_2」に背景色として青色を設定しています。子メニュー「menu_1」に「add_command」メソッドでメニュー項目を設定して、関数を登録しています。関数はメニューテキストを「print」出力するようにしています。メニューウィジェット「menu」に、メニュー「menu_1」と「menu_2」を「add_cascade」メソッドで子メニューとして設定しています。

1
import tkinter as tk
2
root = tk.Tk()
3
root.geometry('300x200+100+100')
4
sub = tk.Toplevel(root, width=300, height=200, bg='red')
5
sub.geometry('+140+120')
6
root.update()
7
root.wm_deiconify()
8
sub.wm_deiconify()
9
menu = tk.Menu(sub)
10
sub['menu']=menu
11
menu_1 = tk.Menu(menu, bg='yellow')
12
menu_2 = tk.Menu(menu, bg='blue')
13
def menufunc_11():
14
    print('menu_11')
15
def menufunc_12():
16
    print('menu_12')
17
menu_1.add_command(label='menu_11', command=menufunc_11)
18
menu_1.add_command(label='menu_12', command=menufunc_12)
19
menu.add_cascade(label='menu_1', menu=menu_1)
20
menu.add_cascade(label='menu_2', menu=menu_2)
21
root.mainloop()

 プログラムを実行すると、サブウィンドウのタイトルバーの下にメニューが設定されたメニューバーを持つ下図のウィンドウが表示されます。menu_1 のラベルをマウスので左クリックすると子メニューが表示されます。

A002_SubWindow_02-22-1

 子メニューの破線をクリックすると、子メニューは分離して独立のウィンドウとして表示されます。この分離をしないようにするには、メニューの作成時に「tearoff」オプションに「0」を指定します。このオプションについては、「メニューウィジェット」を参照して下さい。