【完全独学Python】TkinterのMenuはこれだけ覚えて!

デスクトップアプリ

こんにちは!ゆーや(@yuyamanm118712)です。

こちらのページでは完全独学でWebプログラマとなった私が

デスクトップアプリには必須!!Tkinter

Menuウィジェットの使い方オプション実際に動作するサンプルコードを用いて、初心者でもわかりやすく解説します!

ゆーや
ゆーや

Tkinterの基本的な使い方は以下の記事を見てね!

この記事を読むと

  • TkinterでMenuが作成できる!
  • TkinterでMenuの基本的な使い方について理解できる!
  • TkinterでMenuのオプションについて理解できる!

Menuウィジェットとは

Menuウィジェットはアプリケーションのメニューバーを作成するのに非常に便利です!

ゆーや
ゆーや

ここから実際に動くコードで
Menuがどういうものか理解していこう!

Menuの基本

Menu作成までのサンプルコード

import tkinter as tk

root = tk.Tk()
root.title("Menu-完全独学Python")
root.geometry("400x300")

# メニューバーの作成
menubar = tk.Menu(root)
root.config(menu=menubar)

# ファイルメニューの作成
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="New")
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)

# 編集メニューの作成
editmenu = tk.Menu(menubar, tearoff=0)
editmenu.add_command(label="Cut")
editmenu.add_command(label="Copy")
editmenu.add_command(label="Paste")
menubar.add_cascade(label="Edit", menu=editmenu)

root.mainloop()
ゆーや
ゆーや

これはよく見るメニューバーだね!

最初にMenu(root)でメニューバーを作り、
root.config(menu=menubar)で作ったメニューを画像のように表示できる!

メニューバーに乗せたいMenuウィジェットは

Menu(menubar, tearoff=0)と書き方が違うことに注意!

ここから詳しく説明していくよ!

Menuのオプション

メニューにコマンドを追加(add_command)

import tkinter as tk

root = tk.Tk()
root.title("Menu-完全独学Python")
root.geometry("400x300")

# メニューバーの作成
menubar = tk.Menu(root)
root.config(menu=menubar)

# ファイルメニューの作成
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="New")
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_command(label="追加")
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)

# 編集メニューの作成
editmenu = tk.Menu(menubar, tearoff=0)
editmenu.add_command(label="Cut")
editmenu.add_command(label="Copy")
editmenu.add_command(label="Paste")
menubar.add_cascade(label="Edit", menu=editmenu)

root.mainloop()
ゆーや
ゆーや

add_commandlabelを設定すれば好きな項目を追加できるよ!

もちろん日本語でも大丈夫!

メニューに区切り線を追加(add_separator)

import tkinter as tk

root = tk.Tk()
root.title("Menu-完全独学Python")
root.geometry("400x300")

# メニューバーの作成
menubar = tk.Menu(root)
root.config(menu=menubar)

# ファイルメニューの作成
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="New")
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_separator()
filemenu.add_separator()
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)

# 編集メニューの作成
editmenu = tk.Menu(menubar, tearoff=0)
editmenu.add_command(label="Cut")
editmenu.add_command(label="Copy")
editmenu.add_command(label="Paste")
menubar.add_cascade(label="Edit", menu=editmenu)

root.mainloop()

add_separator境界線を追加できるよ!

項目を分類して配置できるね!

メニューを他のメニューに追加(add_cascade)

import tkinter as tk

root = tk.Tk()
root.title("Menu-完全独学Python")
root.geometry("400x300")

# メニューバーの作成
menubar = tk.Menu(root)
root.config(menu=menubar)

# ファイルメニューの作成
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="New")
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
#menubar.add_cascade(label="File", menu=filemenu)

# 編集メニューの作成
editmenu = tk.Menu(menubar, tearoff=0)
editmenu.add_command(label="Cut")
editmenu.add_command(label="Copy")
editmenu.add_command(label="Paste")
menubar.add_cascade(label="Edit", menu=editmenu)

root.mainloop()
ゆーや
ゆーや

add_cascadeコメントアウトすると、メニューバーに表示されないのがわかる!
作ったMenuウィジェットをメニューバーに表示する時は、忘れずに!

メニューをウィンドウから切り離して独立したウィンドウとして表示(tearoff)

import tkinter as tk

root = tk.Tk()
root.title("Menu-完全独学Python")
root.geometry("400x300")

# メニューバーの作成
menubar = tk.Menu(root)
root.config(menu=menubar)

# ファイルメニューの作成
filemenu = tk.Menu(menubar, tearoff=1)
filemenu.add_command(label="New")
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)

# 編集メニューの作成
editmenu = tk.Menu(menubar, tearoff=0)
editmenu.add_command(label="Cut")
editmenu.add_command(label="Copy")
editmenu.add_command(label="Paste")
menubar.add_cascade(label="Edit", menu=editmenu)

root.mainloop()

切り取り線表示

切り取り線押下

ゆーや
ゆーや

あまり使うことはないかもしれないけど、tearoff=1とすると、

切り取り線が出てくるよ!

クリックすると切り取れてウィンドウから切り離すことができる!

応用

イベント付メニューバー

import tkinter as tk

root = tk.Tk()
root.title("Menu-完全独学Python")
root.geometry("400x300")

def new_file():
    print("New File Created")

def open_file():
    print("File Opened")

def save_file():
    print("File Saved")

def cut_text():
    print("Cut Text")

def copy_text():
    print("Copy Text")

def paste_text():
    print("Paste Text")

def select_radio():
    print(f"Selected Option: {radio_var.get()}")

def toggle_check():
    print(f"Check Status: {check_var.get()}")

# メニューバーの作成
menubar = tk.Menu(root)
root.config(menu=menubar)

# ファイルメニューの作成
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="New", command=new_file)
filemenu.add_command(label="Open", command=open_file)
filemenu.add_command(label="Save", command=save_file)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)

# 編集メニューの作成
editmenu = tk.Menu(menubar, tearoff=0)
editmenu.add_command(label="Cut", command=cut_text)
editmenu.add_command(label="Copy", command=copy_text)
editmenu.add_command(label="Paste", command=paste_text)
menubar.add_cascade(label="Edit", menu=editmenu)

# ビューメニューの作成
viewmenu = tk.Menu(menubar, tearoff=0)
check_var = tk.BooleanVar()
viewmenu.add_checkbutton(label="Show Line Numbers", variable=check_var, command=toggle_check)
menubar.add_cascade(label="View", menu=viewmenu)

# オプションメニューの作成
optionmenu = tk.Menu(menubar, tearoff=0)
radio_var = tk.StringVar()
optionmenu.add_radiobutton(label="Option 1", variable=radio_var, value="1", command=select_radio)
optionmenu.add_radiobutton(label="Option 2", variable=radio_var, value="2", command=select_radio)
optionmenu.add_radiobutton(label="Option 3", variable=radio_var, value="3", command=select_radio)
menubar.add_cascade(label="Options", menu=optionmenu)

# ヘルプメニューの作成
helpmenu = tk.Menu(menubar, tearoff=0)
helpmenu.add_command(label="About", command=lambda: print("About This App"))
menubar.add_cascade(label="Help", menu=helpmenu)

root.mainloop()
ゆーや
ゆーや

各項目にイベントを紐づける際のサンプルコードだよ!
試しに項目を押してみると、コンソールに値が表示されるはず!
試してみよう!

まとめ

本記事では、Menuを使って、Tkinterで画面にメニューバーを表示するボタンを表示する方法を紹介しました!

ポイントは以下の7つです!

① Tkinterで画面にメニューバーを表示するには「Menu」を使う
② 「add_command」オプションは、メニューにコマンドを追加
③ 「add_separator」オプションは、メニューに区切り線を追加
④ 「add_cascade」オプションは、メニューを他のメニューに追加
⑤ 「tearoff」オプションは、メニューをウィンドウから切り離して独立したウィンドウとして表示

ゆーや
ゆーや

まとめの内容を見て、もう頭に浮かべば完璧!
今日もお疲れ様です!

コメント

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