top

9. tkinterのアプリにキー入力をバインドする

トップページ
Pythonで簡単にアプリを作ることができる「tkinter」についてインストールから実用例までを複数章に分けて解説していく。(2020年12月10日 更新)

目次




バインド

  • バインドとは

  • バインド(bind())とは特定の入力と特定の動作を結び付けるものだ。ボタンを例に挙げる。

    def func(event):
        ~~何かの機能~~

    but = t.Button()
    but.bind( '<Button-1>', func )

    この場合、Button-1 = 左クリックと関数funcを結び付け、押したら機能を実行するボタンを実現している。


  • 代表的なキーワード

  • キーワード 意味
    Button-1 左クリック
    Button-3 右クリック
    Return エンターキー*
    Key キーボード入力
    Key-a Aキー
    Control-Key-s Ctrl + s
    Motion マウスポインタが動いた
    Enter マウスポインタが領域内に入った
    Leave マウスポインタが領域外に出た
    Double-○○ ○○が2回押された

    *エンターキーはEnterではなくReturnなので混同注意

    その他、詳しいキーワードに関しては下記リンク先などをご参照いただきたい。
    Tkinter の bind とイベントシーケンス(http://www.rouge.gr.jp/~fuku/tips/python-tkinter/bind.shtml)


  • 具体的な例

  • 例えばテキストの中にマウスポインタが入ったときにfuncを実行するときは

    tex = t.Text()

    tex.bind( '<Enter>', func )


    Ctrl + q が押されたときにfuncを実行したければ
    app = t.Tk()

    app.bind( '<Control-Key-q>', func )


    ここで、マウスポインタが動いたときにアプリの背景色をランダムに変更するプログラムを記載する。 また、そのまま実行したところあまりに点滅が激しかったのでtime.sleep(0.2)で0.2秒間のディレイを入れてある。  ※ 明滅にご注意ください


     実行例
    import tkinter as t, random, time

    def func(event):
        #hex()は10進数を16進数に変換する関数、hex(16) = '0x10' となるので'0x'を取り除くために[2:]を入れている
        clr = [ hex( random.randint( 0, 255 ) )[2:] for i in range(3) ]

        #カラーコードは(2桁)×(赤緑青3色)=6桁なのでそれに合わせて、1桁の数字を2桁に変換している。
        new = [ clr[k] if( len( clr[k] ) > 1 ) else '0' + clr[k] for k in range(3) ]

        app[ 'background' ] = '#{}{}{}'.format( new[0], new[1], new[2] )
        time.sleep( 0.2 )

    app = t.Tk()
    app.title( 'テスト' )
    app.geometry( '200x120' )

    app.bind( '<Motion>', func )

    app.mainloop()

     実行結果(gif画像)
     ※ 明滅にご注意ください