Tkinter チュートリアル - メニューバー Menubar
GUI の最も一般的な要素の 1つは、メニューバーです。メニューバーは通常、タイトルバーの下にあり、一連のメニューを表示します。トップレベルのメニューのいずれかをクリックすると、サブメニューが拡張して、関連メニューの要素を表示します。サブメニューは、通常、open
、close
、save
または quit
などの特定のコマンドにバインドされています。
Tkinter の基本メニューバー
基本的な Tkinter メニューバーを作成します。この例では、ほとんどのエディターにファイル
メニューがあります。簡単にするために Open
、Save
と Quit
サブメニューのみを含めます。
import tkinter as tk
app = tk.Tk()
app.geometry("300x200")
app.title("Basic Menu Bar")
menubar = tk.Menu(app)
filemenu = tk.Menu(menubar)
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_command(label="Exit")
menubar.add_cascade(label="File", menu=filemenu)
app.config(menu=menubar)
app.mainloop()
menubar = tk.Menu(app)
Menu
の指定されたパラメーターは、作成されたメニューの親ウィジェットです。上記のコード行は、メニューウィジェット menubar
が app
フレームの最上位になることを意味します。
filemenu = tk.Menu(menubar)
同様に、filemenu
は menubar
ウィジェットのメニュー、または app
フレームのサブメニューです。
filemenu.add_command(label="Open")
add_command
コマンドをメニューfilemenu
に追加します。label
はサブメニューに表示されるテキストです。
menubar.add_cascade(label="File", menu=filemenu)
コマンド addcade
を使って filemenu
を menuar
に追加します。File
は、app
フレームの最上位に表示されるメニューラベルです。
app.config(menu=menubar)
menubar
は app
のサブパーツとして作成されましたが、app
の menu
になるように配置する必要があります。GUI にはメニューバーは表示されません。それ以外の場合、メニューバーは GUI に表示されません。
ファイルのサブメニューをクリックしたら、まったく応答しません。まだコマンドが付加されていませんので。次のセクションでは、命令の追加方法を紹介します。
Tkinter メニューバーコマンド
import tkinter as tk
from tkinter import filedialog
def onOpen():
print(
filedialog.askopenfilename(
initialdir="/",
title="Open file",
filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
)
)
def onSave():
print(
filedialog.asksaveasfilename(
initialdir="/",
title="Save as",
filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
)
)
app = tk.Tk()
app.geometry("300x200")
app.title("Menu Bar Command")
menubar = tk.Menu(app)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="Open", command=onOpen)
filemenu.add_command(label="Save", command=onSave)
filemenu.add_command(label="Exit", command=app.quit)
menubar.add_cascade(label="File", menu=filemenu)
app.config(menu=menubar)
app.mainloop()
filemenu = tk.Menu(menubar, tearoff=0)
tearoff
はデフォルトの値を 1
に設定されており、上部の点線をクリックすると、メインウィンドウからメニューが切り離されてフローティングメニューが作成されます。ここで 0
を設定すると、このフロート機能を無効にします。
filemenu.add_command(label="Open", command=onOpen)
onOpen
関数はメニューOpen
にバインドされており、Open
がクリックされると呼び出されます。
def onOpen():
print(
filedialog.askopenfilename(
initialdir="/",
title="Open file",
filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
)
)
この関数は、開いているダイアログを表示し、選択したファイル名を返します。この例では実際にファイルを開くのではなく、ファイル名を出力しています。
tkfiledialog
は 3つの機能があります。
関数 | パラメーター | 説明 |
---|---|---|
.askopenfilename |
Directory, Title, Extension | ファイルを開くには:既存のファイルの選択を要求するダイアログ。 |
.asksaveasfilename |
Directory, Title, Extension | ファイルを保存するには:ファイルの作成または置換を要求するダイアログ。 |
.askdirectory |
なし | ディレクトリを開くには |
filemenu.add_command(label="Exit", command=app.quit)
Tkinter には、GUI を終了する内部関数 quit
があります。この関数を簡単に Exit
に結びつけて、他の exit
関数を作成しなくてもいいです。