(Python)tkinter中event对象

1.前言

看了很多博客,关于event对象,大家在用是基本都是直接在主程序使用,或者在函数中使用,几乎没有在类(class)中使用的。在class中使用event有一些注意事项需要注意,这里我以程序为例展开介绍。首先讲一下event对象的使用方法。

2.鼠标和键盘事件

这里列举了常用的事件及其说明,使用方法见程序。
在这里插入图片描述

3.event对象常用属性

属性的调用方法为:event.属性名
在这里插入图片描述

4.示例程序

4.1 定义class

class Application(Frame):

    def __init__(self,master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createwidget()

4.2 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键时,触发事件

4.3绑定的事件函数


    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")

4.4功能测试

首先程序运行后界面显示如下:
在这里插入图片描述
点击canvas区域,程序执行mouseTest函数,结果显示如下:

在这里插入图片描述
拖动鼠标,程序执行testDrag函数,拖动鼠标可以画图,显示如下:
在这里插入图片描述
按下任意键,程序执行keyboardTest函数,按4次键结果
显示如下:
在这里插入图片描述
按下和释放a键结果如下:
在这里插入图片描述

4.5全部代码

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()
  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值