Tkinter チュートリアル - メニューバー Menubar

  1. Tkinter の基本メニューバー
  2. Tkinter メニューバーコマンド

GUI の最も一般的な要素の 1つは、メニューバーです。メニューバーは通常、タイトルバーの下にあり、一連のメニューを表示します。トップレベルのメニューのいずれかをクリックすると、サブメニューが拡張して、関連メニューの要素を表示します。サブメニューは、通常、openclosesave または quit などの特定のコマンドにバインドされている。

Tkinter の基本メニューバー

基本的な Tkinter メニューバーを作成します。この例では、ほとんどのエディターに「ファイル」メニューがあります。簡単にするために OpenSaveQuit サブメニューのみを含めます。

Tkinter Menubar_Basic.py
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()

Tkinter Menubar Basic

menubar = tk.Menu(app)

Menu の指定されたパラメーターは、作成されたメニューの親ウィジェットです。上記のコード行は、メニューウィジェット menubarapp フレームの最上位になることを意味します。

filemenu = tk.Menu(menubar)

同様に、filemenumenubar ウィジェットのメニュー、または app フレームのサブメニューです。

filemenu.add_command(label="Open")

add_command コマンドをメニューfilemenu に追加します。label はサブメニューに表示されるテキストです。

menubar.add_cascade(label="File", menu=filemenu)

コマンド addcade を使って filemenumenuar に追加します。File は、app フレームの最上位に表示されるメニューラベルです。

app.config(menu=menubar)

menubarapp のサブパーツとして作成されましたが、appmenu になるように配置する必要があります。GUI にはメニューバーは表示されません。それ以外の場合、メニューバーは GUI に表示されません。

ファイルのサブメニューをクリックしたら、まったく応答しません。まだコマンドが付加されていませんので。次のセクションでは、命令の追加方法を紹介します。

Tkinter メニューバーコマンド

Tkinter Menubar_Command.py
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 関数を作成しなくてもいいです。

comments powered by Disqus