python tkinterチュートリアル-イベントバインド
6421 ワード
Tkinterは主にmainloopプロセスを走っています.Eventsは、ボタン、マウス、またはシステムイベントなど、複数の場所から来ている可能性があります.Tkinterは、これらのイベントを処理するための豊富な方法を提供しています.各コントロールWidgetについて、そのバインド方法functionを使用できます.
対応するeventが発生するとhandlerがイベントを処理するように呼び出されます.たとえば、マウスクリックイベントをキャプチャします.
ここではframeのbindメソッドを使用してcallbackメソッドをイベントにバインドします.つまり、マウスの左ボタンをクリックし、クリックするたびにコンソールに現在クリックしている座標x,yを印刷します.キーボードイベントが現在フォーカスされているwidgetに送信され、focus_setメソッドwidgetのフォーカスを設定する:キーボードイベントをキャプチャする:
このプログラムを実行すると、現在のウィンドウでフォーカスを取得した場合にのみ、キーボードキーを押すとキャプチャされ、印刷されます.
≪イベント|Events|ldap≫
イベントは文字列で定義され、特殊な構文規則があります.
typeフィールドは最も重要で、Button、Key、Enter、Configureなどに指定できるイベントの種類を示しています.modifierフィールドとdetailフィールドは、ほとんどの場合、指定しなくてもよい追加情報を提供します.キーボードキーに一致するために、角カッコを省略してキーを直接使用するなど、イベント文字列を簡略化する方法もたくさんあります.スペースでない限り、またはそれ自体がカッコではありません.最も一般的なイベントフォーマット:イベントフォーマット:
1つのマウスがイベントをクリックします.1は左ボタン、2は中ボタン、3は右ボタンを表します.widgetでマウスボタンをクリックすると、tkinterはイベントを自動的にキャプチャしてトリガーします.ボタンが持ち上げられるとhandlerが実行されることに注意してください.マウスの位置(widgeに対して)xでは、yはeventオブジェクトに送られてhandlerに渡されます.あなたもこのようにすることができます:,<1>、それらは等価です.私はこの方法が好きです.
イベントをマウスでドラッグします.1は左ボタンを押してドラッグし、2は中ボタン、3は右ボタンを表します.同様に,マウスのx,yはeventオブジェクト方式でhandlerに送られる.
マウスを押して放します
ダブルクリック
ここでは、マウスポインタがwidgetに入っているので、キーボードのEnterキーを押すわけではありません.
上の入力に対応して、マウスはwidgetを離れます.
これらのボタンはキーボードの一つ一つに対応しています.
任意のキーを押すと、キー値はchar形式でeventオブジェクトに挿入されます.
キーボードのキーに対応
このキーは、widgetのサイズが変わったり、位置が変わったりすると、新しいサイズ(widthとheight)がeventにパッケージされてhandlerに送られます.
イベントオブジェクト
イベントオブジェクトは独立したpythonインスタンスであり、多くのプロパティがあります.オブジェクトのプロパティ:
インスタンスバインドとクラスバインド
上記のバインド方法は、インスタンスオブジェクトにバインドされています.これは、新しいインスタンスを作成すると、バインドイベントがないことを意味します.実際、tkinterでは、イベントをクラスにバインドしたり、プログラム自体にバインドしたりすることができます.4つのレベルのバインドを作成できます. widget instanceにバインドbindメソッド を使用 widgetにバインドされたtoplevel windows、最上位ウィンドウもbind で widget classにバインドbind_を使用class
例えばbind_を使うことができますallはF 1キーのバインドを作成し、どこでもヘルプを開くことができます.
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 ,
char ,string
num num,
width,height widget
type
インスタンスバインドとクラスバインド
上記のバインド方法は、インスタンスオブジェクトにバインドされています.これは、新しいインスタンスを作成すると、バインドイベントがないことを意味します.実際、tkinterでは、イベントをクラスにバインドしたり、プログラム自体にバインドしたりすることができます.4つのレベルのバインドを作成できます.
例えばbind_を使うことができますallはF 1キーのバインドを作成し、どこでもヘルプを開くことができます.