'''
Tk的事件.py

Ref:
http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm

'''
from tkinter import *

窗= Tk()
布= Canvas(窗)
布.pack()

事件列表=[
    '<Enter>', # 鼠入窗
    '<Leave>', # 鼠離窗
    
    '<Button-1>',        # 鼠鈕1(左)單擊
    '<Double-Button-1>', # 鼠鈕1(左)雙擊
    '<Triple-Button-1>', # 鼠鈕1(左)三擊
    '<ButtonRelease-1>', # 鼠鈕1(左)釋放
    '<B1-Motion>',       # 鼠鈕1(左)移動

    '<FocusIn>', # 窗聚焦(鼠點擊窗內),
    '<FocusOut>',# 窗失焦(鼠點擊窗外)
    '<Key>',     # 鍵盤按鍵

    '<Configure>' # 調整窗大小
    ]

for 事件 in 事件列表:
    
    def 萬用函數(e, ef= 事件):

        #
        # 可查看 event 中,有什麼 attribute 可用。
        #
        a= dir(e)
        #print(a)
             
        print(ef, end='')
        '''
        for x in a:
            if x[0]!='_':
                print(x, eval('e.'+x))
        '''
        
        if ef in ['<Button-1>', '<B1-Motion>']:
            print(e.x, e.y)
            x,y= e.x, e.y
            布.create_oval(x,y,x+10,y+10,fill= 'red')

        elif ef in ['<Key>']: 
            print(e.char, e.keysym, hex(e.keysym_num))
            if e.keysym in ['Delete']:
                布.delete('all')

            else:
                x,y, 字= e.x, e.y, e.char
                布.create_text(x, y, text= 字)


        elif ef in ['<Configure>']:
            print(e.width, e.height)
            布['width']=  e.width  -4   # -4 is necessary
            布['height']= e.height -4   # 要不然,窗會被布 擠大 或 縮小!

        else:
            pass

    窗.bind(事件, 萬用函數)

窗.mainloop()