Tkinter 滑鼠鍵盤事件(二)

2022-08-19 17:30:13 字數 2866 閱讀 7704

widget.bind(event,handler)

# encoding: utf-8

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()

# encoding: utf-8

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.focus_set()

frame.bind("", key)

frame.bind("", callback)

frame.pack()

root.mainloop()

type欄位是最重要的,它指出了事件的種類,可以指定為button,key或者enter,configure等等。modifier和detail欄位可以提供一些附加資訊,在大多數情況下可以不指定。還有很多方法可以簡化事件字串,比如:為了匹配乙個鍵盤鍵,你可以省略尖角括號,直接用 鍵 即可。除非它是空格 , 或本身就是尖括號。 

讓我們來看看最常用的事件格式: 

事件格式:

乙個滑鼠點選事件。1代表左鍵,2代表中鍵,3代表右鍵。當你在乙個widget上點選滑鼠按鍵,tkinter會自動捕獲並觸發event,注意,當按鍵被抬起時才會執行handler。滑鼠的位置(相對於widge)x,y會被發往event物件傳入handler。你也可以這樣:,<1>,它們是等價的。我比較喜歡這種方式。

1滑鼠拖動事件。1代表按下左鍵拖動,2代表中鍵,3代表右鍵。同樣的,滑鼠的x,y會以event物件方式被送往handler。

滑鼠按下之後釋放

雙擊滑鼠

注意,這裡是滑鼠指標進入到widget裡,並不是代表按下鍵盤上的enter鍵。

和上面的進入對應,滑鼠離開widget。

這些按鍵都和鍵盤上的一一對應。

隨便乙個按鍵,鍵值會以char的格式放入event物件。

a b c ... 1 2 ... 對應鍵盤上的按鍵

這個關鍵了,如果widget的大小改變了,或者是位置,新的大小(width和height)會打包到event發往handler。

事件物件

事件物件是獨立的python例項,有很多屬性。 

物件屬性:

widget  產生event的例項,不是名字,所有物件擁有

x,y     滑鼠位置,單位:畫素

x_root,y_root       滑鼠相對於螢幕左上角的位置,畫素

char        僅鍵盤事件,string

num     按鈕num,僅滑鼠事件

width,height        widget新大小

type        事件型別

例項繫結和類繫結

上面我們用的繫結方法是繫結到乙個例項物件上,這就意味著,如果新建乙個例項,它是沒有繫結事件的。 

實際上,tkinter允許你將事件繫結到類上,甚至是繫結到程式本身。你可以建立四個層面的繫結:

繫結到widget instance 使用bind方法

繫結到widget的toplevel windows,頂層視窗,也是用bind

繫結到widget class,使用bind_class

比如,你可以使用bind_all來建立乙個f1鍵的繫結,這樣你可以在任何地方開啟幫助。

widget.bind(event,handler)

from tkinter import *

root = tk()

defcallback

(event):

print

"clicked at", event.x, event.y

frame = frame(root, width=100, height=100)

frame.bind("", callback)

frame.pack()

root.mainloop()

189

10

from tkinter import *

root = tk()

defkey

(event):

print

"pressed", repr(event.char)

defcallback

(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()

23

4567

繫結到widget的toplevel windows,頂層視窗,也是用bind

繫結到widget class,使用bind_class

C 自動觸發滑鼠 鍵盤事件

要在c 程式中觸發滑鼠 鍵盤事件必須要呼叫windows函式。一 滑鼠事件的觸發 1.引用windows函式mouse event 滑鼠事件 事件型別 x座標值 0 65535 y座標值 0 65535 滾動值 120乙個單位 不支援 dllimport user32.dll static exte...

通用滑鼠鍵盤

該程式通過並行機制處理滑鼠和鍵盤的訊息,為了簡化程式裁減了一些 該程式可用為基礎在該程式上新增 可用於文字編輯,遊戲和其他滑鼠鍵盤通用的程式.include include include include include union regs regs unsigned size void far ...

滑鼠鍵盤學習

出現問題地方 1 label 和pushbutton上面無法顯示中文,出現亂碼 待解決 在main.cpp中已加入qtext odec setcodecfortr qtextcodec codecforlocale 2 在鍵入兩個函式 void mousemoveevent qmouseevent ...