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

胡金庫 2023年1月30日
  1. Tkinter の基本メニューバー
  2. Tkinter メニューバーコマンド
Tkinter チュートリアル - メニューバー Menubar

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

Tkinter の基本メニューバー

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

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 メニューバーコマンド

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

著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook