【Python】Tkinterのbindメソッドでイベント検出

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク

TkinterはPythonの標準ライブラリに含まれているGUI(グラフィカルユーザーインターフェース)ツールです。

Tkinterはシンプルで使いやすく、設定画面、ファイル選択ダイアログなど小規模なアプリケーションを作成するのに適しています。

一方で、ボタンやテキストボックスなど簡易的なウィジェットばかりで大規模なアプリを作成することにはあまり適していないです。

しかし、bindメソッドを使用すれば、Tkinterウィンドウをキーボードのキーやマウスクリック、カーソルを操作した時に処理をトリガーとして実行することができます。

本記事では、bindメソッドを使い方を紹介します。

本記事は次の人におすすめ
  • Pythonでデスクトップアプリケーションを作れるようになりたい
  • bindメソッドの使い方を知りたい
  • Pythonで画像トリミングする方法を知りたい
スポンサーリンク

bindメソッド

Pythonにおけるbindメソッドは、ウィジェットにイベントハンドラを関連付けるために使用されます。

イベントハンドラとは

特定のイベントが発生した時に実行するよう定められた処理のこと。
一般的にイベントを一対一に処理を結び付けたものをハンドラ、一つのイベントに対して複数の処理を結び付けたものをリスナという。

参考:「イベントハンドラ(イベントリスナ)とは

具体的にbindメソッドを使用すれば、ユーザーがボタンクリックやキーボード、マウスを操作した際にそれに応じた動作したり、カスタムイベントを作成し、アクションを実行したりできます。

また、特定の条件が満たされたときにボタンを無効化、有効化にするような動的な制御ができます。

ユーザーインタラクション

ユーザーによる処理の例として、ボタンクリックをします。

ボタンクリックはdefで定義した処理をボタンのcommandに紐づけて実行する方法があります。

上記の記事で紹介したスクリプトを参考にして、ボタンを押すとターミナルに「アリッシアの朝」と表示するようにしました。

#クリックしたときに実行する関数
def button_click():
    print("アリッシアの朝")

#ボタンを作成
button = tkinter.Button(root, text="Click", command=button_click)
button.pack()

実行結果は以下のようになります。

bindメソッドでcommandオプションと同じ処理をするには、コードを以下のように書き換えます。

import tkinter

def button_click(event):
    print("アリッシアの朝") 

root = tkinter.Tk()
button = tkinter.Button(root, text="Click")
button.pack()

# ボタンがクリックされたときに関数 on_button_click を呼び出す
button.bind("<Button-1>", button_click)

root.mainloop()

実行結果は先ほどと同じで、ボタンとクリックするとウィジェットにイベントハンドラを関連付けられて文字が出力されます。

カスタムイベント

カスタムイベントは、イベント駆動型プログラミングの一部として使用されて、特定の条件やユーザーの操作に応答するためにプログラム内で定義します。主に、プログラムの複雑性を管理、特定のタスクやイベントを追跡に役立ちます。

先ほど、使用しました<Button-1>は左クリックを意味しています。そこにコントロールキーを押しながら左クリックをすると処理されるようにするには、コードを次のようにします。

import tkinter

def custom_event(event):
    print("アリッシアの朝")

def left_click(event):
    if event.state == 4:  # Controlキー
        root.event_generate("<<CustomEvent>>")

root = tkinter.Tk()

# カスタムイベントを定義
root.event_add("<<CustomEvent>>", "<Button-1>")

# カスタムイベントとハンドラを関連付け
root.bind("<<CustomEvent>>", custom_event)

# 左クリックイベントを監視
root.bind("<Button-1>", left_click)

root.mainloop()

left_click 関数は、左クリックイベントが発生したときに実行されるイベントハンドラです。この関数では、Controlキーが押されている場合にのみ <> カスタムイベントを発生させるように設定します。

root.event_add(“<>”, “”) を使用して、<> というカスタムイベントを定義し、左クリックイベント と関連付けます。

root.bind(“<>”, custom_event) により、カスタムイベントと custom_event 関数を関連付けます。つまり、カスタムイベントがトリガーされると、custom_event関数が実行します。

root.bind(“”, left_click) により、左クリックイベントとleft_click関数を関連付けます。左クリックが発生した場合、left_click 関数が実行されます。

このスクリプトを実行すると、コントロールキーを押しながら左クリックすると、文字が表示されます。

動的な制御

ボタンを押すと文字が出てきて、もう一度押すとテキストが変化する。さらにボタンを押下すると元のテキストに戻る操作をします。

import tkinter

def toggle_text(event):
    if label.cget("text") == "こんにちは":
        new_text = "ありがとう"
    else:
        new_text = "こんにちは"
    label.config(text=new_text)

root = tkinter.Tk()

label = tkinter.Label(root)
label.pack(pady=20)

button = tkinter.Button(root, text="Click")
button.pack()

# ボタンにクリックイベントとイベントハンドラを関連付け
button.bind("<Button-1>", toggle_text)

root.mainloop()

このスクリプトを実行すると、テキストが切り替わります。

Pythonの学習進め方

Pythonでできることは多岐に渡ります。

Pythonでできること
  • 機械学習・人工知能
  • データ解析・統計分析
  • ファイル操作・システム管理
  • GUIアプリ開発

Pythonは強力で柔軟なプログラミング言語ですが、常に情報がアップデートされるので、
新しいライブラリやフレームワークを独学で学び続けることは困難です。

Udemyは動画で目的に応じた講座を受講できるのでレベルを合わせて学習できます。
購入した講座は再生・停止・スキップなどが可能なオンデマンド形式なので、
専門的な内容を自分のペースで独学できます。

Udemyの特徴
  • プロのエンジニアによる講習が受けられる
  • 自分のペースで学習を進められる
  • オンデマンド形式だから何度でも視聴可能
  • 不満足なコースは視聴していても返金可能返金ポリシー

Pythonでデータサイエンスや人工知能、GUIを学びたい人はUdemy学習を取り入れましょう。
数多くある講座の中から特におすすめな講座を5つ紹介します。

Pythonをインストールから環境設定、基本文法が学習できる。さらに、モジュールの使い方やファイル操作の他に暗号化、並列化、インフラ自動化、キューイングシステム、非同期処理についても学べます。

Pythonの基礎を押さえつつ、人口知能やニューラルネットワーク、機械学習を取り扱う。機械学習ライブラリで文字認識や株価分析などを行う。

データサイエンティストになるために必要なツールについて学ぶことができる。統計分析、NumpyやPandasなどを使ったPythonのプログラミング、機械学習の実装、ディープラーニングの実装を学習できる。

PythonでGUIを作成する方法を取り扱う。Tkinterの発展的な操作まで学習できる。翻訳アプリ、家計簿アプリ、電卓アプリ、音楽再生アプリなど作成して、exeファイル化する。

イベント一覧

bindメソッドで使用可能なイベントは以下の通りです。

表では-1を例にしています。

-1は左クリック、-2:ホイールクリック、-3:右クリックと変更ができます。

イベント処理
<Button-1>・<1>・<ButtonPress>マウスの左クリック
<ButtonRelease-1>マウスの左クリック離したとき
<Double-1>マウスの左をダブルクリック
<KeyPress-A>、<a>aキー入力
<Control>ctrlキー入力
<Control-c>ctrlキーとcキー同時入力
<Enter>マウスカーソルがウィジェットに入ったとき
<Leave>マウスカーソルがウィジェットから出たとき
<Motion>マウスカーソルがウィジェットで動いたとき

まとめ

Tkinterはシンプルで使いやすいですが、簡易的なウィジェットばかりなので小規模なアプリケーションを作成するのに適しています。

しかし、bindメソッドを使用すれば、Tkinterウィンドウをキーボードのキーやマウスクリック、カーソルを操作した時に処理を実行することができます。

bindメソッドは、ウィジェットにイベントハンドラを関連付けるために使用されます。

bindメソッドを使用すれば、ユーザーインタラクション、カスタムイベント、また特定の条件が満たされたとき実行する動的な制御ができます。

この記事を書いた人

プロフィール

アリッシア

                 

大学4年間で何か胸を張れるスキルを身に着けたくて当サイト運営を始めました。
現在、大学院に進学するか就職するか迷いながら勉強しています。
詳しいプロフィールはこちら

Contact icon

contact

X icon

X

Instagram icon

Instagram

Note icon

Note

スポンサーリンク
Python
フォローする
タイトルとURLをコピーしました