Python: Events and Bindings

原文來自FishC

一個Tkinter應用程序大部分時間花費在事件循環中(mainloop());事件可以有各種來源:用戶觸發鼠標,鍵盤操作,窗口管理器觸發的重繪事件;

對於每個組件來說,可以通過bind()方法將函數或方法綁定到具體的事件上;

widget.bind(event,handler)

當被觸發的事件滿足該組件綁定的事件時,Tkinter就會帶着事件對象(event)去調用handler()方法;

from tkinter import *

root=Tk()

def callback(event):
    print("Click Pos: ",event.x,event.y)
    #print("Press Pos: ",repr(event.char))

frame=Frame(root,width=200,height=200)
frame.bind("<Motion>",callback)
#frame.bind("<Button-1>",callback)
#frame.bind("<Key>",callback)
#frame.focus_set()
frame.pack()

mainloop()

上面展示的是捕獲鼠標在組件上的運動軌跡,關注的是<Motion>事件;

事件序列

Tkinter使用一種稱爲事件序列的機制來容許用戶定義事件,用戶需要使用bind()方法將具體的事件序列與自定義的方法綁定。事件序列是以字符串得形式表示的,可以表示一個或多個相關聯的事件(如果是多個事件,那麼對應的方法只有在滿足所有事件的前提下才會被調用);

事件序列使用以下語句描敘:

        “<modifier-type-detail>”

1)事件序列是包含在尖括號(<...>)中

2)type部分的內容最重要的,它通常用於描敘普通的事件類型,如鼠標點擊或鍵盤點擊

3)modifier部分內容可選,它通常用於描敘組合鍵,如Ctrl+c,Shift+鼠標左鍵點擊

4)detail部分內容可選,它通常用於描敘具體的按鍵,如Button-1表示鼠標左鍵

實例如下:

事件序列含義
<Button-1>用戶點擊鼠標左鍵
<KeyPress-H>用戶點擊H按鍵
<Control-Shift-KeyPress-H>用戶同時點擊Ctrl+Shift+H
Event對象

當Tkinter去回調我們定義的函數時,都會帶着Event對象(作爲參數)去調用,Event對象有以下這些屬性:

屬性含義
widget產生該事件的組件
x,y當前鼠標位置座標(相對於窗口左上角,pixel)
x_root,y_root當前鼠標位置座標(相對於屏幕左上角,pixel)
char按鍵對應的字符(鍵盤事件)
keysym按鍵名(鍵盤事件)
keycode按鍵碼(鍵盤事件)
num按鈕數字(鼠標事件)
width,height組件的新尺寸(Configure事件)
type該事件類型


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章