「Python3」Tkinter Ver.8.6(Menuの作成と設定)

Tkinter Python

Menuとは?

Menuは、ButtonやEntryと同じようにTkのウィジェットとして実装されています。各Menuウィジェットは、Menu内のさまざまな項目から構成されています。

Menuの実装

<ソースコード>
from tkinter import *
from tkinter import ttk

#メインウィンドウ生成
root = Tk()
#ウィンドウのタイトル
root.title('Application')
#ウィンドウの最小サイズ
root.minsize(300, 200)
#ウィンドウのグリッドを 1x1 にする
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)

#メニューバー作成
menubar = Menu(root)
#fileメニュー追加
filemenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label='file', menu=filemenu)
filemenu.add_command(label='new')
filemenu.add_command(label='open')
filemenu.add_separator()
filemenu.add_command(label='exit')
#editメニュー追加
editmenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label='edit', menu=editmenu)
editmenu.add_command(label='copy')
#menubar表示
root.config(menu = menubar)
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
root.grid()

#Frame生成
s1 = ttk.Style()
s1.configure('MyFrame.TFrame', background='white')
frame1 = ttk.Frame(root, style='MyFrame.TFrame')
#ウィンドウ内にFrameを表示
frame1.grid(sticky=(N,W,S,E))

#ウィンドウ表示
root.mainloop()
<出力結果>

Menu 説明01

“add_cascade(label=’file’, menu=filemenu)”で、メニューを追加します。
“add_command(label=’new’)”で、メニュー項目を追加します。
“add_separator()”で、メニュー項目の間に境界線を作成します。

ページ切り替え

<ソースコード>
from tkinter import *
from tkinter import ttk

def changePage(page):
    # Pageを上位層にする
    page.tkraise()

#メインウィンドウ生成
root = Tk()
#ウィンドウのタイトル
root.title('Application')
# ウィンドウの大きさを決定
root.geometry("600x400")
#ウィンドウの最小サイズ
root.minsize(300, 200)
#ウィンドウのグリッドを 1x1 にする
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
#メニューバー作成
menubar = Menu(root)
#fileメニュー追加
filemenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label='file', menu=filemenu)
filemenu.add_command(label='Page 1', command=lambda : changePage(frame1))
filemenu.add_command(label='Page 2', command=lambda : changePage(frame2))
filemenu.add_separator()
filemenu.add_command(label='exit')
#editメニュー追加
editmenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label='edit', menu=editmenu)
editmenu.add_command(label='copy')
#menubar表示
root.config(menu = menubar)

#ウィジェット作成
frame1 = ttk.Frame(root)
label1 = ttk.Label(frame1, text="Page 1")
frame2 = ttk.Frame(root)
label2 = ttk.Label(frame2, text="Page 2")
#ウィジェット表示
label1.grid() 
frame1.grid(row=0, column=0, sticky=(N,W,S,E))
label2.grid() 
frame2.grid(row=0, column=0, sticky=(N,W,S,E))

#frame1を上位層にする
frame1.tkraise()
#ウィンドウ表示
root.mainloop()
<出力結果>

(メニューから”Page 1″を選択した場合)
Menu 説明02

(メニューから”Page 2″を選択した場合)
Menu 説明03

上のプログラムは、メニューのfileの項目”Page 1″を押すと、”frame1″を上位層にして画面に表示、メニューのfileの項目”Page2″を押すと、”frame2″を上位層にして画面に表示するようになっています。

コメント

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