资讯专栏INFORMATION COLUMN

[译][Tkinter 教程15] event 事件绑定

zhkai / 2966人阅读

摘要:已获原作者授权原系列地址简介一个应用生命周期中的大部分时间都处在一个消息循环中它等待事件的发生事件可能是按键按下鼠标点击鼠标移动等提供了用以处理相关事件的机制处理函数可以被绑定给各个控件的各种事件如果相关事件发生函数会被触发事件对象会传递给

已获原作者授权. 原系列地址: Python Tkinter
简介

一个 Tkinter 应用生命周期中的大部分时间都处在一个消息循环 (event loop) 中. 它等待事件的发生: 事件可能是 按键按下, 鼠标点击, 鼠标移动 等.
Tkinter 提供了用以处理相关事件的机制. 处理函数可以被绑定给各个控件的各种事件.
widget.bind(event, handler)
如果相关事件发生, handler 函数会被触发, 事件对象 event 会传递给 handler 函数.

#!/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()

让我们再写一个例子, 用以处理上面提到的鼠标在控件内移动的事件:

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 使用所谓的 事件队列 (event sequences) 暴露接口以绑定 handler 到相关事件. 事件以字符串的形式给出:

modifier-type-detail

type 字段是一个事件的关键字段. modiferdetail 字段则不是必要字段, 很多情况下这两个字段都不会被赋值. 这两个字段用以提供 type 所代表的事件的附加信息. type 字段描述事件种类, 比如 鼠标点击, 键位按下, 控件获得焦点 等.

Event Description
Button 某个鼠标按键在控件上被点击. detail 指定了哪一个按键被点击了, 比如, 鼠标左键点击为 Button-1, 鼠标中键点击为 Button-2, 鼠标右键点击为 Button-3, 向上滚动滑轮为 Button-4, 向下滚动滑轮为 Button-5. 如果在控件上按下鼠标的某个键并保持按下, Tkinter 将"抓住"该事件. 之后的鼠标事件, 比如 鼠标移动 或 鼠标按键释放 事件, 会被自动发送给该控件处理, 即使鼠标移动出该控件时依然如此. 鼠标相对当前控件的位置会被存储在 event 对象中的 x 和 y 字段中传递给回调函数.
Motion 鼠标在某个按键被按下时的移动事件. 鼠标左键点击为 B1-Motion, 鼠标中键点击为 B2-Motion, 鼠标右键点击为 B3-Motion. 鼠标相对当前控件的位置会被存储在 event 对象中的 x 和 y 字段中传递给回调函数.
ButtonRelease 按钮点击释放事件. 鼠标左键点击为 ButtonRelease-1, 鼠标中键点击为 ButtonRelease-2, 鼠标右键点击为 ButtonRelease-3. 鼠标相对当前控件的位置会被存储在 event 对象中的 x 和 y 字段中传递给回调函数.
Double-Button 鼠标双击事件. 鼠标左键点击为 Double-Button-1, 鼠标中键点击为 Double-Button-2, 鼠标右键点击为 Double-Button-3. Double 和 Triple 都可以被用作前缀. 注意: 如果同时绑定单击事件 (Button-1) 和双击事件 (Double-Button-1), 则两个回调都会被调用.
Enter 鼠标移入控件事件. 注意: 这个事件不是 Enter 键按下事件, Enter 按下事件是 Return.
Leave 鼠标移出控件事件.
FocusIn 控件或控件的子空间获得键盘焦点.
FocusOut 控件丢失键盘焦点 (焦点移动到另一个控件).
Return Enter 点击事件. 键盘上的所有键位都可以被绑定. 特殊键位名称包括 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 键盘按键点击事件. 键值被存储在 event 对象中传递. (特殊键位会传递空键值).
a "a" 键被点击. 其他字符也可以如此定义. 特殊情况包括 空格 (space) 和 小于号 (less). 注意 "1" 是绑定键盘键位, 而 1 则是按钮绑定.
Shift-Up 在 shift 被按下时点击 up 键. 同样的, 也有 Alt-Up, Control-Up 事件.
Configure 控件大小改变事件. 新的控件大小会存储在 event 对象中的 width 和 height 属性传递. 有些平台上该事件也可能代表控件位置改变.

全系列:
[译][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] 对话框和消息框
[译][Tkinter 教程12] 布局管理 (Pack Place Grid)
[译][Tkinter 教程13] Mastermind 游戏
[译][Tkinter 教程14] menu 菜单
[译][Tkinter 教程15] event 事件绑定
译者水平有限, 如有疏漏, 欢迎指正.
已获得原作者授权. 原文地址: Events and Binds

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41504.html

相关文章

  • [][Tkinter 教程04] Variable 类

    摘要:已获原作者授权原系列地址类有些控件比如控件控件等可以通过传入特定参数直接和一个程序变量绑定这些参数包括这种绑定是双向的如果该变量发生改变与该变量绑定的控件也会随之更新这些控制变量和一般的变量一样都是用来保存某个值的但一般的变量不能被传递给或 已获原作者授权. 原系列地址: Python Tkinter Variable 类 有些控件 (比如 Entry 控件, Radiobutton...

    zilu 评论0 收藏0
  • [][Tkinter 教程03] Button 控件

    摘要:已获原作者授权原系列地址简介控件是一种标准控件用来展现不同样式的按钮控件被用以和用户交互比如按钮被鼠标点击后某种操作被启动和控件类似按钮可以展示图片或者文字不同的是控件可以指定字体控件只能使用单一的字体上的文字可以多行显示可以将一个函数或方 已获原作者授权. 原系列地址: Python Tkinter 简介 Button 控件是一种标准 Tkinter 控件, 用来展现不同样式的按钮...

    googollee 评论0 收藏0
  • [][Tkinter 教程01] 入门: Label 控件

    摘要:已获原作者授权原系列地址下面我们将以中最简单的控件控件开始这个系列的教程在中控件用以显示文字和图片通常被用来展示信息而非与用户交互译者注也可以绑定点击等事件只是通常不这么用程序员的教程怎么能少了我们尊重这个传统但我们不说让我们来秀出吧下面的 已获原作者授权. 原系列地址: Python Tkinter Hello Tkinter Label 下面我们将以 Tkinter 中最简单的控...

    Sike 评论0 收藏0
  • [][Tinkter 教程05] Radiobutton 控件

    摘要:已获原作者授权原系列地址单选按钮是一种可在多个预先定义的选项中选择出一项的控件单选按钮可显示文字或图片显示文字时只能使用预设字体该控件可以绑定一个函数或方法当单选按钮被选择时该函数或方法将被调用单选按钮这个名字来源于收音机上的调频按钮这些按 已获原作者授权. 原系列地址: Python Tkinter Radio Buttons 单选按钮是一种可在多个预先定义的选项中选择出一项的 T...

    shusen 评论0 收藏0
  • [][Tkinter 教程07] Entry 控件

    摘要:已获原作者授权原系列地址简介是用来接收字符串等输入的控件该控件允许用户输入一行文字如果用户输入的文字长度长于控件的宽度时文字会向后滚动这种情况下所输入的字符串无法全部显示点击箭头符号可以将不可见的文字部分移入可见区域如果你想要输入多行文本就 已获原作者授权. 原系列地址: Python Tkinter 简介 Entry 是 Tkinter 用来接收字符串等输入的控件. 该控件允许用户...

    levy9527 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<