@yanglt7
2018-12-03T12:45:02.000000Z
字数 1575
阅读 784
Tkinter
一个 Tkinter 应用程序大部分时间花费在事件循环中(通过 mainloop() 方法进入。)
事件可以有各种来源,包括用户触发的鼠标、键盘操作和窗口管理器触发的重绘事件(在多数情况下是由用户间接引起的)。
Tkinter提供一个强大的机制可以自由地处理事件,对于每个组件来说,可以通过 bind() 方法将函数或方法绑定到具体的事件上。当被触发的事件满足该组件绑定的事件时,Tkinter 就会带着事件描述去调用 handler() 方法。
例 47
获取鼠标单击的位置。
from tkinter import *
root = Tk()
def callback(event):
print("点击位置:", event.x, event.y)#相对于应用程序左上角的位置
frame = Frame(root, width=200, height=200)
frame.bind("<Button-1>", callback)
frame.pack()
mainloop()
在上面的例子中,使用 Frame 组件的 bind() 方法将鼠标单击事件 () 和自定义的 callback() 方法绑定起来。那么运行后的结果是:当你单击鼠标左键的时候,IDLE 会相应地将鼠标的位置显示出来。
只有当组件获得焦点的时候才能接收键盘事件(Key)。
例 48
用 focus_set() 获得焦点,可以设置 Frame 的 takefocus 选项为 True,然后使用 Tab 将焦点转移上来。
from tkinter import *
root = Tk()
def callback(event):
print("敲击位置:", repr(event.char))
frame = Frame(root, width=200, height=200)
frame.bind("<Key>", callback)
frame.focus_set()
frame.pack()
mainloop()
例 49
捕获鼠标在组件上的运动轨迹。
from tkinter import *
root = Tk()
def callback(event):
print("当前位置:", event.x, event.y)
frame = Frame(root, width=200, height=200)
frame.bind("<Motion>", callback)
frame.pack()
mainloop()
Tkinter 使用一种称为事件序列的机制来允许用户定义事件,用户需使用 bind() 方法将具体的事件序列与自定义的方法绑定。事件序列是以字符串的形式表示,可以表示一个或多个相关联的事件(如果是多个事件,那么对应的方法只有在满足所有事件的前提下才会被调用)。
事件序列使用以下语法描述:
<modifier-type-detail>
摘自《零基础入门学习Python》
参考链接:
An Introduction To Tkinter
Tkinter汇总
Python GUI编程(Tkinter)
Tkinter颜色方案举例
python tkinter可以使用的颜色
tkinter学习-菜单与画布
程序设计思想与方法--第五章
用Python中的tkinter模块作图