当前位置:   article > 正文

(Python)tkinter中event对象_tkinter event

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/124961
推荐阅读
相关标签
  

闽ICP备14008679号