python tkinterチュートリアル-イベントバインド

6421 ワード

Tkinterは主にmainloopプロセスを走っています.Eventsは、ボタン、マウス、またはシステムイベントなど、複数の場所から来ている可能性があります.Tkinterは、これらのイベントを処理するための豊富な方法を提供しています.各コントロールWidgetについて、そのバインド方法functionを使用できます.
widget.bind(event,handler)

対応するeventが発生するとhandlerがイベントを処理するように呼び出されます.たとえば、マウスクリックイベントをキャプチャします.
from Tkinter import *

root = Tk()
def callback(event):
    print "clicked at", event.x, event.y
frame = Frame(root, width=100, height=100)
frame.bind("", callback)
frame.pack()

root.mainloop()

ここではframeのbindメソッドを使用してcallbackメソッドをイベントにバインドします.つまり、マウスの左ボタンをクリックし、クリックするたびにコンソールに現在クリックしている座標x,yを印刷します.キーボードイベントが現在フォーカスされているwidgetに送信され、focus_setメソッドwidgetのフォーカスを設定する:キーボードイベントをキャプチャする:
from Tkinter import *

root = Tk()

def key(event):
    print "pressed", repr(event.char)

def callback(event):
    print "clicked at", event.x, event.y

frame = Frame(root, width=100, height=100)
frame.bind("", key)
frame.bind("", callback)
frame.pack()

root.mainloop()

このプログラムを実行すると、現在のウィンドウでフォーカスを取得した場合にのみ、キーボードキーを押すとキャプチャされ、印刷されます.
≪イベント|Events|ldap≫
イベントは文字列で定義され、特殊な構文規則があります.
type-detail>

typeフィールドは最も重要で、Button、Key、Enter、Configureなどに指定できるイベントの種類を示しています.modifierフィールドとdetailフィールドは、ほとんどの場合、指定しなくてもよい追加情報を提供します.キーボードキーに一致するために、角カッコを省略してキーを直接使用するなど、イベント文字列を簡略化する方法もたくさんあります.スペースでない限り、またはそれ自体がカッコではありません.最も一般的なイベントフォーマット:イベントフォーマット:
<Button-1>

1つのマウスがイベントをクリックします.1は左ボタン、2は中ボタン、3は右ボタンを表します.widgetでマウスボタンをクリックすると、tkinterはイベントを自動的にキャプチャしてトリガーします.ボタンが持ち上げられるとhandlerが実行されることに注意してください.マウスの位置(widgeに対して)xでは、yはeventオブジェクトに送られてhandlerに渡されます.あなたもこのようにすることができます:,<1>、それらは等価です.私はこの方法が好きです.
<B1-Motion>

イベントをマウスでドラッグします.1は左ボタンを押してドラッグし、2は中ボタン、3は右ボタンを表します.同様に,マウスのx,yはeventオブジェクト方式でhandlerに送られる.
<ButtonRelease-1>

マウスを押して放します
<Double-Button-1>

ダブルクリック
<Enter>

ここでは、マウスポインタがwidgetに入っているので、キーボードのEnterキーを押すわけではありません.
<Leave>

上の入力に対応して、マウスはwidgetを離れます.
<FocusIn> <FocusOut>
<Return> <Cancel> <BackSpace> <Tab> <Shift_L> <Control_L>
<Alt_L> <Home> <Left> <Up> <Right> <Down> <Delete> <F1> <F2>

これらのボタンはキーボードの一つ一つに対応しています.
<Key>

任意のキーを押すと、キー値はchar形式でeventオブジェクトに挿入されます.
a b c ... 1 2 ... 

キーボードのキーに対応
<Configure>

このキーは、widgetのサイズが変わったり、位置が変わったりすると、新しいサイズ(widthとheight)がeventにパッケージされてhandlerに送られます.
イベントオブジェクト
イベントオブジェクトは独立したpythonインスタンスであり、多くのプロパティがあります.オブジェクトのプロパティ:
widget    event   ,    ,      
x,y         ,  :  
x_root,y_root                    ,  
charstring
num       num,     
width,height        widget   
type            

インスタンスバインドとクラスバインド
上記のバインド方法は、インスタンスオブジェクトにバインドされています.これは、新しいインスタンスを作成すると、バインドイベントがないことを意味します.実際、tkinterでは、イベントをクラスにバインドしたり、プログラム自体にバインドしたりすることができます.4つのレベルのバインドを作成できます.
  • widget instanceにバインドbindメソッド
  • を使用
  • widgetにバインドされたtoplevel windows、最上位ウィンドウもbind
  • widget classにバインドbind_を使用class

  • 例えばbind_を使うことができますallはF 1キーのバインドを作成し、どこでもヘルプを開くことができます.