【Python】tkinter:右クリックで表示するポップアップメニューを表示する方法

時計 2022.06.03 / 時計

【Python】tkinter:右クリックで表示するポップアップメニューを表示する方法

本記事ではPythontkinterにおける、右クリックで表示するポップアップメニューを表示させる方法について解説していきます。

右クリックで表示されるポップアップメニューはMenuウィジェットを使用します。Menuウィジェットはメニューバーの作成でよく利用されますが、ポップアップメニューの作成にも使用されます。

本記事を通して、Menuウィジェットについて理解を深めていきましょう。

基本的なtkinterでGUIアプリケーションを作成する方法は以下記事をご参照ください。

Menuウィジェット

Menuウィジェットとは

tkinterでは様々なウィジェットを使ってGUIアプリケーションを作成していきます。

IT用語の確認

ウィジェット(widget)とはGUIを作成するための部品のことです。ボタンやラベル、エントリーなど様々なウィジェットを配置してGUIアプリケーションを作成します

tkinterには19種類、ttkにはプラス6種類のウィジェットが用意されています。

たくさんあるウィジェットの1つにMenuウィジェットがあります。Menuウィジェットはアプリケーションに各種メニューを生成するためのウィジェットです。

主にMenuウィジェットを使用する用途は以下の通りです。

  • メインウィンドウへのメニューバーの作成
  • tkiter:メインウィンドウへのメニューバー作成
  • ポップアップメニューの作成
  • tkiter:ポップアップメニューの作成

本記事ではポップアップメニューの作成について解説していきます。メニューバーの作成については以下記事をご参照ください。

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()メソッドについて詳しくは以下記事をご参照ください。

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()
tkinter:右クリックでポップアップメニューを表示するサンプルプログラム

上記サンプルプログラムはメインウィンドウ上を右クリックすると、「Show Day」と「Exit」のメニューを持つポップアップメニューが表示されます。

ぜひこのサンプルを元に、ご自身のtkinterによるGUIアプリケーションにポップアップメニューを追加してみてください。