【Python】tkinter:右クリックで表示するポップアップメニューを表示する方法
2022.06.03 /
本記事ではPythonのtkinterにおける、右クリックで表示するポップアップメニューを表示させる方法について解説していきます。
右クリックで表示されるポップアップメニューはMenuウィジェットを使用します。Menuウィジェットはメニューバーの作成でよく利用されますが、ポップアップメニューの作成にも使用されます。
本記事を通して、Menuウィジェットについて理解を深めていきましょう。
基本的なtkinterでGUIアプリケーションを作成する方法は以下記事をご参照ください。
【Python】tkinterを使ったGUIアプリケーションの作成方法
Menuウィジェット
Menuウィジェットとは
tkinterでは様々なウィジェットを使ってGUIアプリケーションを作成していきます。
ウィジェット(widget)とはGUIを作成するための部品のことです。ボタンやラベル、エントリーなど様々なウィジェットを配置してGUIアプリケーションを作成します
tkinterには19種類、ttkにはプラス6種類のウィジェットが用意されています。
たくさんあるウィジェットの1つにMenuウィジェットがあります。Menuウィジェットはアプリケーションに各種メニューを生成するためのウィジェットです。
主にMenuウィジェットを使用する用途は以下の通りです。
- メインウィンドウへのメニューバーの作成
- ポップアップメニューの作成
本記事ではポップアップメニューの作成について解説していきます。メニューバーの作成については以下記事をご参照ください。
【Python tkinter】メニューバー(Menu)の作成方法
Menuウィジェットの生成
Menuウィジェットの生成は以下構文の通りです。
tkinter.Menu(master, option)
masterには親ウィジェットを指定し、optionにはMenuに用意されているオプションを指定します。
Menuウィジェットのオプション
Menuウィジェットで指定できるオプションは次の通りです。
オプション | 説明 |
---|---|
activebackground | マウスをホバーしたときの背景色 |
activeborderwidth | マウスをホバーしたときのボーダー長(デフォルト:1px) |
activeforeground | マウスをホバーしたときの文字色 |
bg | マウスを乗せてない時の背景色 |
bd | すべての選択肢のボーダー長(デフォルト:1) |
cursor | マウスホバー時のカーソル |
font | デフォルトフォント |
fg | マウスを乗せてない時の文字色 |
postcommand | メニューが表示されたときに呼び出す関数 |
relief | 外観 |
image | メニューボタンに表示する画像 |
tearoff | 切り離しの設定 |
title | 切り離されたメニューのタイトル |
tkinter:右クリックでポップアップメニューを表示させる
tkinterで作成したGUIアプリケーションに右クリックでポップアップメニューを表示させるには以下のメソッドを使用します。
- bind()メソッド
- add_command()メソッド
- post()メソッド
それぞれのメソッドについて見ていきましょう。
bind()メソッド
bind()メソッドはウィジェットに特定のイベントが発生したときに実行される関数(コールバック関数)を指定できるメソッドです。
widget.bind(イベント, コールバック関数, addオプション)
bind()メソッドの第一引数にはコールバック関数を実行するトリガーとなるイベント(操作)を指定し、第二引数に実行する関数を指定します。
本記事では右クリックをイベントに指定するので、右クリックを意味する
bind()メソッドについて詳しくは以下記事をご参照ください。
【Python tkinter】クリックされたボタンを関数内で判別しテキスト情報などを取得する(bind,event)
add_command()メソッド
add_command()メソッドは表示するメニューに選択肢を追加するためのメソッドです。
Menuウィジェット.add_command(options)
optionsには基本的にlabel(選択肢の名前)とcommand(実行する関数)を指定します。
post()メソッド
post()メソッドは指定された座標にメニューを表示するメソッドです。
Menuウィジェット.post(x, y)
引数に表示するx座標とy座標を指定します。座標の取得にはx_rootとy_rootを使用することが多いです。
サンプルプログラム
以下にtkinterで右クリック時にポップアップメニューを表示するサンプルプログラムを記します。
import tkinter
import tkinter.messagebox
import datetime
def showDay():
now = datetime.datetime.now()
msg = 'Today is: {}'.format(now.strftime('%A'))
tkinter.messagebox.showinfo("Information", msg)
def showMenu(e):
pmenu.post(e.x_root, e.y_root)
root = tkinter.Tk()
root.title('ポップアップメニュー')
pmenu = tkinter.Menu(root, tearoff=0)
pmenu.add_command(label="Show Day", command=showDay)
pmenu.add_command(label="Exit", command=root.quit)
root.bind("<Button-3>", showMenu)
root.geometry('300x150')
root.mainloop()
上記サンプルプログラムはメインウィンドウ上を右クリックすると、「Show Day」と「Exit」のメニューを持つポップアップメニューが表示されます。
ぜひこのサンプルを元に、ご自身のtkinterによるGUIアプリケーションにポップアップメニューを追加してみてください。