赞
踩
看了很多博客,关于event对象,大家在用是基本都是直接在主程序使用,或者在函数中使用,几乎没有在类(class)中使用的。在class中使用event有一些注意事项需要注意,这里我以程序为例展开介绍。首先讲一下event对象的使用方法。
这里列举了常用的事件及其说明,使用方法见程序。
属性的调用方法为:event.属性名
class Application(Frame):
def __init__(self,master=None):
super().__init__(master)
self.master = master
self.pack()
self.createwidget()
createwidget()函数创建了画布,并绑定了一系列事件
def createwidget(self):
# global c1
self.c1 = Canvas(self, width=200, height=200, bg="green") #创建画布
self.c1.pack()
self.c1.bind("<Button-1>", self.mouseTest) # 当鼠标左键点击时,触发事件
self.c1.bind("<B1-Motion>", self.testDrag) # 当按住鼠标左键并拖动时, 触发事件
self.master.bind("<KeyPress>", self.keyboardTest) # 当按下键盘时就触发
self.master.bind("<KeyPress-a>", self.press_a_test) # 按下a键时,触发事件
self.master.bind("<KeyRelease-a>", self.release_a_test) # 释放a键时,触发事件
def mouseTest(self, event): # 显示鼠标点击点相对于c1的位置 print("鼠标左键单击位置(相对于父容器)为:{}{}".format(event.x, event.y)) # 显示鼠标点击点相对于屏幕的位置 print("鼠标左键单击位置(相对于屏幕)为:{}{}".format(event.x_root, event.y_root)) # 显示事件触发的控件 print("事件绑定的组件:{}".format(event.widget)) def testDrag(self, event): # 在鼠标当前位置与当前位置+2的位置创建一个椭圆,拖动较慢时实现的是画图功能 self.c1.create_oval(event.x, event.y, event.x+2, event.y+2,fill="black") def keyboardTest(self, event): print("键的keycode:{},键的char:{},键的keysym:{}" .format(event.keycode, event.char, event.keysym)) def press_a_test(self, event): print("press a") def release_a_test(self, event): print("release a")
首先程序运行后界面显示如下:
点击canvas区域,程序执行mouseTest函数,结果显示如下:
拖动鼠标,程序执行testDrag函数,拖动鼠标可以画图,显示如下:
按下任意键,程序执行keyboardTest函数,按4次键结果
显示如下:
按下和释放a键结果如下:
from tkinter import * class Application(Frame): def __init__(self,master=None): super().__init__(master) self.master = master self.pack() self.createwidget() def createwidget(self): # global c1 self.c1 = Canvas(self, width=200, height=200, bg="green") #创建画布 self.c1.pack() self.c1.bind("<Button-1>", self.mouseTest) # 当鼠标左键点击时,触发事件 self.c1.bind("<B1-Motion>", self.testDrag) # 当按住鼠标左键并拖动时, 触发事件 self.master.bind("<KeyPress>", self.keyboardTest) # 当按下键盘时就触发 self.master.bind("<KeyPress-a>", self.press_a_test) # 按下a键时,触发事件 self.master.bind("<KeyRelease-a>", self.release_a_test) # 释放a键时,触发事件 def mouseTest(self, event): # 显示鼠标点击点相对于c1的位置 print("鼠标左键单击位置(相对于父容器)为:{}{}".format(event.x, event.y)) # 显示鼠标点击点相对于屏幕的位置 print("鼠标左键单击位置(相对于屏幕)为:{}{}".format(event.x_root, event.y_root)) # 显示事件触发的控件 print("事件绑定的组件:{}".format(event.widget)) def testDrag(self, event): # 在鼠标当前位置与当前位置+2的位置创建一个椭圆,拖动较慢时实现的是画图功能 self.c1.create_oval(event.x, event.y, event.x+2, event.y+2,fill="black") def keyboardTest(self, event): print("键的keycode:{},键的char:{},键的keysym:{}" .format(event.keycode, event.char, event.keysym)) def press_a_test(self, event): print("press a") def release_a_test(self, event): print("release a") if __name__ == '__main__': root = Tk() root.title("event测试") root.geometry("300x300") app = Application(root) root.mainloop()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。