溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python?Tkinter中事件處理的示例分析

發(fā)布時(shí)間:2022-01-20 13:39:16 來(lái)源:億速云 閱讀:231 作者:清風(fēng) 欄目:開發(fā)技術(shù)

本文將為大家詳細(xì)介紹“Python Tkinter中事件處理的示例分析”,內(nèi)容步驟清晰詳細(xì),細(xì)節(jié)處理妥當(dāng),而小編每天都會(huì)更新不同的知識(shí)點(diǎn),希望這篇“Python Tkinter中事件處理的示例分析”能夠給你意想不到的收獲,請(qǐng)大家跟著小編的思路慢慢深入,具體內(nèi)容如下,一起去收獲新知識(shí)吧。

事件處理,是 GUI 程序中不可或缺的重要組成部分,相比來(lái)說(shuō),控件只是組成一臺(tái)機(jī)器的零部件, 而事件處理則是驅(qū)動(dòng)這臺(tái)機(jī)器“正?!边\(yùn)轉(zhuǎn)的關(guān)鍵所在,它能夠?qū)⒘悴考g“優(yōu)雅”的貫穿起來(lái),因此“事件處理”可謂是 GUI 程序的“靈魂”,同時(shí)它也是實(shí)現(xiàn)人機(jī)交互的關(guān)鍵。

對(duì)于“事件”這一名詞,在講解控件時(shí)也偶爾提及過(guò),在本節(jié)我們將對(duì) Tkinter 中的事件處理機(jī)制做更為詳細(xì)的介紹。

在一款 GUI 程序中,我們將用戶對(duì)軟件的操作統(tǒng)稱為“事件”,比如鼠標(biāo)點(diǎn)擊按鈕、鍵盤輸入文本以及窗口管理器觸發(fā)的重繪事件等,這些事件有一個(gè)共同的特點(diǎn),即都是由用戶自身直接或者間接觸發(fā)的。

事件綁定方法

Tkinter 提供的事件處理機(jī)制允許我們?yōu)椤翱丶苯壎ㄏ鄳?yīng)的事件和事件處理函數(shù)(即 callback函數(shù)),從而實(shí)現(xiàn)控件與用戶的交互,其語(yǔ)法格式如下:

widget.bind("<event>",func)

上述語(yǔ)法中,widget 代表控件的實(shí)例對(duì)象,之后,采用 bind() 方法進(jìn)行事件綁定,該函數(shù)有兩個(gè)參數(shù):

  • <event>:一個(gè)字符串參數(shù),表示事件的類型,并使用“尖括號(hào)”的形式進(jìn)行包裹;

  • func:表示事件的處理函數(shù)(callback,即回調(diào)函數(shù)),當(dāng)觸發(fā)事件時(shí),Tk 會(huì)攜帶事件對(duì)象(Event)去調(diào)用 func 方法。

注意:bind() 方法可以完成事件與處理函數(shù)綁定,而使用 unbind() 方法可以將事件與處理函數(shù)解綁。

常用事件類型

事件類型(也稱事件碼)是 Tkinter 模塊規(guī)定的,主要包括鼠標(biāo)、鍵盤、光標(biāo)等相關(guān)事件,Tkinter 為其規(guī)定了相應(yīng)的語(yǔ)法格式:

<modifier-type-detail>

上述語(yǔ)法由三部分組成,說(shuō)明如下:

  • <>:事件類型必須包含在“尖括號(hào)”內(nèi);

  • modifier:可選項(xiàng),事件類型的修飾符,通常用于描述組合鍵、雙擊<Double-Button-1>、大寫鎖定鍵<Lock>以及<Alt-Shift>等;

  • type:是必不可少的一項(xiàng),表示事件的具體類型;

  • detail:可選項(xiàng),通常用于描述具體的哪個(gè)按鍵,比如 <Button-1> 表示鼠標(biāo)左鍵;

這里有必要對(duì)經(jīng)常使用的 modifier 修飾符做簡(jiǎn)單的介紹,修飾符可以修改事件的激活條件,比如雙擊鼠標(biāo)或者需要同時(shí)按下某個(gè)鍵才觸發(fā)事件,常用的修飾符如下:

修飾符說(shuō)明
Control事件發(fā)生時(shí)需按下 Control 鍵
Alt事件發(fā)生時(shí)需按下 Alt 鍵
Shift事件發(fā)生時(shí)需按下 Shift 鍵
Lock事件發(fā)生時(shí)需處于大寫鎖定狀態(tài)
Double事件連續(xù)發(fā)生兩次,比如雙擊鼠標(biāo)
Triple事件連續(xù)發(fā)生三次
Quadruple事件連續(xù)發(fā)生四次

下述表格中介紹了 Tkinter 中經(jīng)常使用的事件類型,如下所示:

事件碼說(shuō)明
<ButtonPress-1>單擊鼠標(biāo)左鍵,簡(jiǎn)寫為<Button-1>,后面的數(shù)字可以是1/2/3,分別代表左鍵、中間滑輪、右鍵
<ButtonRelease-1>釋放鼠標(biāo)左鍵,后面數(shù)字可以是1/2/3,分別代表釋放左鍵、滑輪、右鍵
<B1-Motion>按住鼠標(biāo)左鍵移動(dòng),<B2-Motion>和<B3-Motion>分別表示按住鼠標(biāo)滑輪移動(dòng)、右鍵移動(dòng)
<MouseWheel>轉(zhuǎn)動(dòng)鼠標(biāo)滑輪
<Double-Button-1>雙擊鼠標(biāo)左鍵
<Enter>鼠標(biāo)光標(biāo)進(jìn)入控件實(shí)例
<Leave>鼠標(biāo)光標(biāo)離開控件實(shí)例
<Key>按下鍵盤上的任意鍵
<KeyPress-字母>/<KeyPress-數(shù)字>按下鍵盤上的某一個(gè)字母或者數(shù)字鍵
<KeyRelease>釋放鍵盤上的按鍵
<Return>回車鍵,其他同類型鍵有<Shift>/<Tab>/<Control>/<Alt>
<Space>空格鍵
<UP>/<Down>/<Left>/<Right>方向鍵
<F1>...<F12>常用的功能鍵
<Control-Alt>組合鍵,再比如<Control-Shift-KeyPress-T>,表示用戶同時(shí)點(diǎn)擊 Ctrl + Shift + T
<FocusIn>當(dāng)控件獲取焦點(diǎn)時(shí)候觸發(fā),比如鼠標(biāo)點(diǎn)擊輸入控件輸入內(nèi)容,可以調(diào)用 focus_set() 方法使控件獲得焦點(diǎn)
<FocusOut>當(dāng)控件失去焦點(diǎn)時(shí)激活,比如當(dāng)鼠標(biāo)離開輸入框的時(shí)候
<Configure >控件的發(fā)生改變的時(shí)候觸發(fā)事件,比如調(diào)整了控件的大小等
<Deactivate>當(dāng)控件的狀態(tài)從“激活”變?yōu)椤拔醇せ睢睍r(shí)觸發(fā)事件
<Destroy>當(dāng)控件被銷毀的時(shí)候觸發(fā)執(zhí)行事件的函數(shù)
<Expose>當(dāng)窗口或組件的某部分不再被覆蓋的時(shí)候觸發(fā)事件
<Visibility>當(dāng)應(yīng)用程序至少有一部分在屏幕中是可見狀態(tài)時(shí)觸發(fā)事件

Event事件對(duì)象

當(dāng)事件觸發(fā)后,Tkinter 會(huì)自動(dòng)將事件對(duì)象交給回調(diào)函數(shù)進(jìn)行下步的處理,Event 對(duì)象包含了以下常用屬性:

屬性說(shuō)明
widget發(fā)生事件的是哪一個(gè)控件
x,y相對(duì)于窗口的左上角而言,當(dāng)前鼠標(biāo)的坐標(biāo)位置
x_root,y_root相對(duì)于屏幕的左上角而言,當(dāng)前鼠標(biāo)的坐標(biāo)位置
char用來(lái)顯示所按鍵相對(duì)應(yīng)的字符
keysym按鍵名,比如 Control_L 表示左邊的 Ctrl 按鍵
keycode按鍵碼,一個(gè)按鍵的數(shù)字編號(hào),比如 Delete 按鍵碼是107
num1/2/3中的一個(gè),表示點(diǎn)擊了鼠標(biāo)的哪個(gè)按鍵,按鍵分為左、中、右
width,height控件的修改后的尺寸,對(duì)應(yīng)著 <Configure>事件
type事件類型

下面看一組關(guān)于“鍵盤事件”的使用示例:

from tkinter import *
# 定義事件函數(shù),必須用event參數(shù)
def show_key(event):
    # 查看觸發(fā)事件的按鈕
    s=event.keysym
    # 將其顯示在按鈕控件上
    lb.config(text=s)
root=Tk()
root.config(bg='#87CEEB')
root.title("C語(yǔ)言中文網(wǎng)")
root.geometry('450x350+300+200')
root.iconbitmap('C:/Users/Administrator/Desktop/C語(yǔ)言中文網(wǎng)logo.ico')
# 添加一個(gè)按鈕控件
lb=Label(root,text='請(qǐng)按鍵',fg='blue',font=('微軟雅黑',15))
# 給按鈕控件綁定事件,按下任意鍵,然后調(diào)用事件處理函數(shù)。注意,此處需要在英文狀態(tài)下進(jìn)行輸入
lb.bind('<Key>',show_key)
# 設(shè)置按鈕獲取焦點(diǎn)
lb.focus_set()
lb.pack()
# 顯示窗口
root.mainloop()

程序運(yùn)行結(jié)果如下:

Python?Tkinter中事件處理的示例分析

圖1:Tkinter事件處理

注意:在上述示例中,只有當(dāng) Label 控件獲取焦點(diǎn)后才能接收鍵盤事件,因此在給控件綁定事件和回調(diào)函數(shù)后,需要使用 focus_set() 方法來(lái)獲取焦點(diǎn)。

下面再看一組關(guān)于“鼠標(biāo)事件”的相關(guān)示例:

# 定義事件函數(shù)
from tkinter import *
def handleMotion(event):
    lb1['text'] = '你移動(dòng)了光標(biāo)的所在位置'
    lb2['text'] = '目前光標(biāo)位置:x ='+ str(event.x)+';y='+str(event.y)
    print('光標(biāo)當(dāng)前位置',event.x,event.y)
# 創(chuàng)建主窗口
win = Tk()
win.config(bg='#87CEEB')
win.title("C語(yǔ)言中文網(wǎng)")
win.geometry('450x350+300+200')
win.iconbitmap('C:/Users/Administrator/Desktop/C語(yǔ)言中文網(wǎng)logo.ico')
# 創(chuàng)建一個(gè)窗體容器frame
frame = Frame (win, relief=RAISED, borderwidth=2, width=300,height=200)
frame.bind('<Motion>',handleMotion)
lb1 = Label(frame,text='沒(méi)有任何事件觸發(fā)', bg='purple', )
# 使用place進(jìn)行位置布局,下一節(jié)會(huì)介紹
lb1.place (x=20,y=20)
lb2 = Label(frame,text='')
lb2.place (x=16,y=60)
frame.pack(side=TOP)
# 顯示窗口
win.mainloop()

程序運(yùn)行結(jié)果如下:

Python?Tkinter中事件處理的示例分析

圖2:Tkinter鼠標(biāo)移動(dòng)事件

python的數(shù)據(jù)類型有哪些?

python的數(shù)據(jù)類型:1. 數(shù)字類型,包括int(整型)、long(長(zhǎng)整型)和float(浮點(diǎn)型)。2.字符串,分別是str類型和unicode類型。3.布爾型,Python布爾類型也是用于邏輯運(yùn)算,有兩個(gè)值:True(真)和False(假)。4.列表,列表是Python中使用最頻繁的數(shù)據(jù)類型,集合中可以放任何數(shù)據(jù)類型。5. 元組,元組用”()”標(biāo)識(shí),內(nèi)部元素用逗號(hào)隔開。6. 字典,字典是一種鍵值對(duì)的集合。7. 集合,集合是一個(gè)無(wú)序的、不重復(fù)的數(shù)據(jù)組合。

感謝您能讀到這里,小編希望您對(duì)“Python Tkinter中事件處理的示例分析”這一關(guān)鍵問(wèn)題有了從實(shí)踐層面最深刻的體會(huì),具體使用情況還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想閱讀更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI