tkinterでボタンをクリックしたときに処理を実行させる【PythonでGUIアプリ開発】

tkinterでボタンをクリックしたときに処理を実行させる【PythonでGUIアプリ開発】 プログラミング

この記事は、PythonでGUIアプリを作成するための内容となります。
tkinterを用いて、ボタンを押したときに処理を実行させていきます。

本記事の内容

  • PythonでGUIアプリの基本画面を作成する
  • ボタンをクリックしたときに処理を実行させる
  • bind関数のイベント指定(sequence)

それでは、上記に沿って解説していきます。

PythonでGUIアプリの基本画面を作成する

本記事では、tkinterを用いて以下の基本画面を作成できることを前提とします。

作成できない場合は、次の記事をご覧ください。
記事を参考にすれば、上記画面を作成できるようになります。

基本画面を作成できるようになったら、以下を読み進めてください。

ボタンをクリックしたときに処理を実行させる

「ボタンをクリックしたときに処理を実行させる」

このことを専門的に表現すると、次のようになります。
「ボタンのイベントに対してコールバック関数を紐付ける」

これをもっと短くすると、「ボタンに関数をbindする」でしょうかね。
そのbindしているコードを確認しましょう。

import tkinter

def fnc_do_1(event):
    print(1)

# 画面作成
window = tkinter.Tk()
window.geometry("400x300")
window.title("ボタンを表示する")

# ボタン作成
btn = tkinter.Button(window, text="ボタン")

# ボタン表示
btn.place(x=125, y=230, width=150, height=40)

# ボタンに関数をbind
btn.bind("<Button-1>", fnc_do_1)

# 画面表示(常駐)
window.mainloop()

ボタンを押すと、「1」が表示するだけのプログラムです。
早速、bindが出てきましたね。

fnc_do_1関数をボタン(btn)にbindをしたことを理解できると思います。
ただ、 <Button-1>が意味不明でしょう。

実は、これがイベントを表しています。
JavaScriptなどで言えば、「click」になります。

ここでbind関数の構文と引数を確認します。

ウィジェット名.bind(sequence, func, add)

以下の3つが引数です。

  • sequence:イベント
  • func:コールバック関数
  • add:値

とりあえず、addは無視しておいてください。
多分、あまり使わないと思います。

sequenceに若干の謎は残りつつも、bindする方法に関しては理解できたはずです。
とりあえず、「ボタンをクリックしたときに処理を実行させる」はこれで終了とします。

以下では、sequence「<Button-1>」の謎を詳しくみていきましょう。

bind関数のイベント(sequence)

イベント(sequence)に指定できるタイプは、以下。

タイプ(type)イベント
Buttonマウスボタンを押す
ButtonPressマウスボタンを押す
ButtonReleaseマウスボタンを離す
Keyキーを押す
KeyPressキーを押す
KeyReleaseキーを離す
Motionマウスを移動
Enterマウスカーソルが入る
Leaveマウスカーソルが出る

そのまま指定できるのは、Motion、Enter、Leaveぐらいでしょうか。
基本的には、上記の3つ以外は他に指定が必要です。

先ほどの<Button-1>が、まさにそうですね。
左クリックの場合、<Button-1>となります。
中央クリックの場合、<Button-2>となります。
右クリックの場合、<Button-3> となります。

マウスのどのボタンを押したのか?
どのキーを押したのか?

つまり、「どの」を指定する必要があるということです。
このように説明していますが、実際は結構適当な感じです。

Enterキーを押すことは、両方で指定可能です。

  • <Key-Return>
  • <Return>

個人的には、必ずtypeは先頭につけるようにします。
Enterキーを押すなら、「<Key-Return>」と指定するということです。

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