摘要:已獲原作者授權(quán)原系列地址簡(jiǎn)介一個(gè)應(yīng)用生命周期中的大部分時(shí)間都處在一個(gè)消息循環(huán)中它等待事件的發(fā)生事件可能是按鍵按下鼠標(biāo)點(diǎn)擊鼠標(biāo)移動(dòng)等提供了用以處理相關(guān)事件的機(jī)制處理函數(shù)可以被綁定給各個(gè)控件的各種事件如果相關(guān)事件發(fā)生函數(shù)會(huì)被觸發(fā)事件對(duì)象會(huì)傳遞給
已獲原作者授權(quán). 原系列地址: Python Tkinter簡(jiǎn)介
一個(gè) Tkinter 應(yīng)用生命周期中的大部分時(shí)間都處在一個(gè)消息循環(huán) (event loop) 中. 它等待事件的發(fā)生: 事件可能是 按鍵按下, 鼠標(biāo)點(diǎn)擊, 鼠標(biāo)移動(dòng) 等.
Tkinter 提供了用以處理相關(guān)事件的機(jī)制. 處理函數(shù)可以被綁定給各個(gè)控件的各種事件.
widget.bind(event, handler)
如果相關(guān)事件發(fā)生, handler 函數(shù)會(huì)被觸發(fā), 事件對(duì)象 event 會(huì)傳遞給 handler 函數(shù).
#!/usr/bin/python3 # write tkinter as Tkinter to be Python 2.x compatible from tkinter import * def hello(event): print("Single Click, Button-l") def quit(event): print("Double Click, so let"s stop") import sys; sys.exit() widget = Button(None, text="Mouse Clicks") widget.pack() widget.bind("Button-1", hello) widget.bind("Double-1", quit) widget.mainloop()
讓我們?cè)賹?xiě)一個(gè)例子, 用以處理上面提到的鼠標(biāo)在控件內(nèi)移動(dòng)的事件:
from tkinter import * def motion(event): print("Mouse position: (%s %s)" % (event.x, event.y)) return master = Tk() whatever_you_do = "Whatever you do will be insignificant, but it is very important that you do it. (Mahatma Gandhi)" msg = Message(master, text = whatever_you_do) msg.config(bg="lightgreen", font=("times", 24, "italic")) msg.bind("Motion",motion) msg.pack() mainloop()事件
Tkinter 使用所謂的 事件隊(duì)列 (event sequences) 暴露接口以綁定 handler 到相關(guān)事件. 事件以字符串的形式給出:
modifier-type-detail
type 字段是一個(gè)事件的關(guān)鍵字段. modifer 和 detail 字段則不是必要字段, 很多情況下這兩個(gè)字段都不會(huì)被賦值. 這兩個(gè)字段用以提供 type 所代表的事件的附加信息. type 字段描述事件種類, 比如 鼠標(biāo)點(diǎn)擊, 鍵位按下, 控件獲得焦點(diǎn) 等.
Event | Description |
---|---|
Button | 某個(gè)鼠標(biāo)按鍵在控件上被點(diǎn)擊. detail 指定了哪一個(gè)按鍵被點(diǎn)擊了, 比如, 鼠標(biāo)左鍵點(diǎn)擊為 Button-1, 鼠標(biāo)中鍵點(diǎn)擊為 Button-2, 鼠標(biāo)右鍵點(diǎn)擊為 Button-3, 向上滾動(dòng)滑輪為 Button-4, 向下滾動(dòng)滑輪為 Button-5. 如果在控件上按下鼠標(biāo)的某個(gè)鍵并保持按下, Tkinter 將"抓住"該事件. 之后的鼠標(biāo)事件, 比如 鼠標(biāo)移動(dòng) 或 鼠標(biāo)按鍵釋放 事件, 會(huì)被自動(dòng)發(fā)送給該控件處理, 即使鼠標(biāo)移動(dòng)出該控件時(shí)依然如此. 鼠標(biāo)相對(duì)當(dāng)前控件的位置會(huì)被存儲(chǔ)在 event 對(duì)象中的 x 和 y 字段中傳遞給回調(diào)函數(shù). |
Motion | 鼠標(biāo)在某個(gè)按鍵被按下時(shí)的移動(dòng)事件. 鼠標(biāo)左鍵點(diǎn)擊為 B1-Motion, 鼠標(biāo)中鍵點(diǎn)擊為 B2-Motion, 鼠標(biāo)右鍵點(diǎn)擊為 B3-Motion. 鼠標(biāo)相對(duì)當(dāng)前控件的位置會(huì)被存儲(chǔ)在 event 對(duì)象中的 x 和 y 字段中傳遞給回調(diào)函數(shù). |
ButtonRelease | 按鈕點(diǎn)擊釋放事件. 鼠標(biāo)左鍵點(diǎn)擊為 ButtonRelease-1, 鼠標(biāo)中鍵點(diǎn)擊為 ButtonRelease-2, 鼠標(biāo)右鍵點(diǎn)擊為 ButtonRelease-3. 鼠標(biāo)相對(duì)當(dāng)前控件的位置會(huì)被存儲(chǔ)在 event 對(duì)象中的 x 和 y 字段中傳遞給回調(diào)函數(shù). |
Double-Button | 鼠標(biāo)雙擊事件. 鼠標(biāo)左鍵點(diǎn)擊為 Double-Button-1, 鼠標(biāo)中鍵點(diǎn)擊為 Double-Button-2, 鼠標(biāo)右鍵點(diǎn)擊為 Double-Button-3. Double 和 Triple 都可以被用作前綴. 注意: 如果同時(shí)綁定單擊事件 (Button-1) 和雙擊事件 (Double-Button-1), 則兩個(gè)回調(diào)都會(huì)被調(diào)用. |
Enter | 鼠標(biāo)移入控件事件. 注意: 這個(gè)事件不是 Enter 鍵按下事件, Enter 按下事件是 Return. |
Leave | 鼠標(biāo)移出控件事件. |
FocusIn | 控件或控件的子空間獲得鍵盤焦點(diǎn). |
FocusOut | 控件丟失鍵盤焦點(diǎn) (焦點(diǎn)移動(dòng)到另一個(gè)控件). |
Return | Enter 點(diǎn)擊事件. 鍵盤上的所有鍵位都可以被綁定. 特殊鍵位名稱包括 Cancel, BackSpace, Tab, Return (Enter), Shift_L (任意 Shift), Control_L (任意 Control), Alt_L (任意 Alt), Pause, Caps_Lock, Escape, Prior (Page Up), Next (Page Down), End, Home, Left, Up, Right, Down, Print, Insert, Delete, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, Num_Lock, and Scroll_Lock |
Key | 鍵盤按鍵點(diǎn)擊事件. 鍵值被存儲(chǔ)在 event 對(duì)象中傳遞. (特殊鍵位會(huì)傳遞空鍵值). |
a | "a" 鍵被點(diǎn)擊. 其他字符也可以如此定義. 特殊情況包括 空格 (space) 和 小于號(hào) (less). 注意 "1" 是綁定鍵盤鍵位, 而 1 則是按鈕綁定. |
Shift-Up | 在 shift 被按下時(shí)點(diǎn)擊 up 鍵. 同樣的, 也有 Alt-Up, Control-Up 事件. |
Configure | 控件大小改變事件. 新的控件大小會(huì)存儲(chǔ)在 event 對(duì)象中的 width 和 height 屬性傳遞. 有些平臺(tái)上該事件也可能代表控件位置改變. |
全系列:
[譯][Tkinter 教程01] 入門: Label 控件
[譯][Tkinter 教程02] Message 控件
[譯][Tkinter 教程03] Button 控件
[譯][Tkinter 教程04] Variable 類
[譯][Tinkter 教程05] Radiobutton 控件
[譯][Tkinter 教程06] Checkbox 控件
[譯][Tkinter 教程07] Entry 控件
[譯][Tkinter 教程08] Canvas 圖形繪制
[譯][Tkinter 教程09] Scale 控件
[譯][Tkinter 教程10] Text 控件
[譯][Tkinter 教程11] 對(duì)話框和消息框
[譯][Tkinter 教程12] 布局管理 (Pack Place Grid)
[譯][Tkinter 教程13] Mastermind 游戲
[譯][Tkinter 教程14] menu 菜單
[譯][Tkinter 教程15] event 事件綁定
譯者水平有限, 如有疏漏, 歡迎指正.
已獲得原作者授權(quán). 原文地址: Events and Binds
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41504.html
摘要:已獲原作者授權(quán)原系列地址類有些控件比如控件控件等可以通過(guò)傳入特定參數(shù)直接和一個(gè)程序變量綁定這些參數(shù)包括這種綁定是雙向的如果該變量發(fā)生改變與該變量綁定的控件也會(huì)隨之更新這些控制變量和一般的變量一樣都是用來(lái)保存某個(gè)值的但一般的變量不能被傳遞給或 已獲原作者授權(quán). 原系列地址: Python Tkinter Variable 類 有些控件 (比如 Entry 控件, Radiobutton...
摘要:已獲原作者授權(quán)原系列地址簡(jiǎn)介控件是一種標(biāo)準(zhǔn)控件用來(lái)展現(xiàn)不同樣式的按鈕控件被用以和用戶交互比如按鈕被鼠標(biāo)點(diǎn)擊后某種操作被啟動(dòng)和控件類似按鈕可以展示圖片或者文字不同的是控件可以指定字體控件只能使用單一的字體上的文字可以多行顯示可以將一個(gè)函數(shù)或方 已獲原作者授權(quán). 原系列地址: Python Tkinter 簡(jiǎn)介 Button 控件是一種標(biāo)準(zhǔn) Tkinter 控件, 用來(lái)展現(xiàn)不同樣式的按鈕...
摘要:已獲原作者授權(quán)原系列地址下面我們將以中最簡(jiǎn)單的控件控件開(kāi)始這個(gè)系列的教程在中控件用以顯示文字和圖片通常被用來(lái)展示信息而非與用戶交互譯者注也可以綁定點(diǎn)擊等事件只是通常不這么用程序員的教程怎么能少了我們尊重這個(gè)傳統(tǒng)但我們不說(shuō)讓我們來(lái)秀出吧下面的 已獲原作者授權(quán). 原系列地址: Python Tkinter Hello Tkinter Label 下面我們將以 Tkinter 中最簡(jiǎn)單的控...
摘要:已獲原作者授權(quán)原系列地址單選按鈕是一種可在多個(gè)預(yù)先定義的選項(xiàng)中選擇出一項(xiàng)的控件單選按鈕可顯示文字或圖片顯示文字時(shí)只能使用預(yù)設(shè)字體該控件可以綁定一個(gè)函數(shù)或方法當(dāng)單選按鈕被選擇時(shí)該函數(shù)或方法將被調(diào)用單選按鈕這個(gè)名字來(lái)源于收音機(jī)上的調(diào)頻按鈕這些按 已獲原作者授權(quán). 原系列地址: Python Tkinter Radio Buttons 單選按鈕是一種可在多個(gè)預(yù)先定義的選項(xiàng)中選擇出一項(xiàng)的 T...
摘要:已獲原作者授權(quán)原系列地址簡(jiǎn)介是用來(lái)接收字符串等輸入的控件該控件允許用戶輸入一行文字如果用戶輸入的文字長(zhǎng)度長(zhǎng)于控件的寬度時(shí)文字會(huì)向后滾動(dòng)這種情況下所輸入的字符串無(wú)法全部顯示點(diǎn)擊箭頭符號(hào)可以將不可見(jiàn)的文字部分移入可見(jiàn)區(qū)域如果你想要輸入多行文本就 已獲原作者授權(quán). 原系列地址: Python Tkinter 簡(jiǎn)介 Entry 是 Tkinter 用來(lái)接收字符串等輸入的控件. 該控件允許用戶...
閱讀 3850·2023-04-25 20:41
閱讀 2700·2023-04-25 16:40
閱讀 1481·2021-09-23 11:44
閱讀 1284·2021-09-10 10:51
閱讀 1732·2021-09-07 09:59
閱讀 1763·2019-12-27 12:08
閱讀 607·2019-08-30 15:44
閱讀 3369·2019-08-30 11:08