嵌入式系统与单片机|技术阅读
登录|注册

您现在的位置是:嵌入式系统与单片机 > 技术阅读 > 强大的的GUI开发库 - Tkinter详细教程三

强大的的GUI开发库 - Tkinter详细教程三

python GUI编程之Tkinter详细讲解三

内容回顾:

  • GUI编程概述
  • tkinter整体描述
  • 主窗口和布局管理器
  • 内容回顾:

  • 组件用法
  • 文章目录:

    • 5. 事件响应

      • 5.1 事件绑定和触发

      • 5.2 lambda表达式实现传参

    5. 事件响应

    5.1 事件绑定和触发

    • Tkinter 提供一个强大的机制可以让你自由地处理事件,对于每个组件来说,通过 bind() 方法将函数或方法绑定到具体的事件触发上
    • 绑定语法:组件名.bind(event, handler)
    • 当被触发的事件满足该组件绑定的事件时,Tkinter 就会带着事件对象(Event)(事件自动传入给方法函数的参数)去调用 handler() 方法

    事件序列

    • Tkinter 使用一种称为事件序列的机制来允许用户定义事件,事件序列是以字符串的形式表示的,可以表示一个或多个相关联的事件(如果是多个事件,那么对应的方法只有在满足所有事件的前提下才会被调用)
    • 事件序列使用语法描述:<modifier-type-detail>
      • 事件序列是包含在尖括号< >
      • type 部分的内容是最重要的,常用于描述普通的事件类型
      • modifier 部分的内容是可选的,它通常用于描述组合键
      • detail 部分的内容是可选的,它通常用于描述具体的按键

    <Button-1>  用户点击鼠标左键<KeyPress-H>  用户点击 H 按键<Control-Shift-KeyPress-H> 用户同时点击 Ctrl + Shift + H

    type汇总说明表

    type含义
    Activate当组件的状态从“未激活”变为“激活”的时候触发该事件
    Button1. 当用户点击鼠标按键的时候触发该事件
    2. detail 部分指定具体哪个按键:<Button-1>鼠标左键<Button-2>鼠标中键,<Button-3>鼠标右键
    ButtonRelease1. 当用户释放鼠标按键的时候触发该事
    2. 在大多数情况下,比 Button 要更好用,因为如果当用户不小心按下鼠标,用户可以将鼠标移出组件再释放鼠标,从而避免不小心触发事件
    Configure当组件的尺寸发生改变的时候触发该事件
    Deactivate当组件的状态从“激活”变为“未激活”的时候触发该事件
    Destroy当组件被销毁的时候触发该事件
    Enter1. 当鼠标指针进入组件的时候触发该事件
    2. 注意:不是指用户按下回车键
    Expose当窗口或组件的某部分不再被覆盖的时候触发该事件
    FocusIn1. 当组件获得焦点的时候触发该事件
    2. 用户可以用 Tab 键将焦点转移到该组件上(需要该组件的 takefocus 选项为 True)
    3. 你也可以调用 focus_set() 方法使该组件获得焦点
    FocusOut当组件失去焦点的时候触发该事件
    KeyPress1. 当用户按下键盘按键的时候触发该事件
    2. detail 可以指定具体的按键:<KeyPress-键位>
    3. KeyPress 可以简写为 Key
    KeyRelease当用户释放键盘按键的时候触发该事件
    Leave当鼠标指针离开组件的时候触发该事件
    Map1. 当组件被映射的时候触发该事件
    2. 意思是在应用程序中显示该组件的时候,例如调用 grid() 方法
    Motion当鼠标在组件内移动的整个过程均触发该事件
    MouseWheel1. 当鼠标滚轮滚动的时候触发该事件
    Unmap1. 当组件被取消映射的时候触发该事件
    2. 意思是在应用程序中不再显示该组件的时候,例如调用 grid_remove() 方法
    Visibility当应用程序至少有一部分在屏幕中是可见的时候触发该事件

    modifier内容汇总

    modifier含义
    Alt当按下 Alt 按键的时候
    Any任何类型的按键被按下的时候,如 <Any-KeyPress> 表示当用户按下任何按键时触发事件
    Control当按下 Ctrl 按键的时候
    Double后续两个事件被连续触发的时候,如 <Double-Button-1> 表示当用户双击鼠标左键时触发事件
    Lock当打开大写字母锁定键(CapsLock)的时候
    Shift当按下 Shift 按键的时候
    Triple跟 Double 类似,当后续三个事件被连续触发的时候

    Event 对象

    属性含义
    widget产生该事件的组件
    x, y当前的鼠标位置坐标(相对于窗口左上角,像素为单位)
    x_root, y_root当前的鼠标位置坐标(相对于屏幕左上角,像素为单位)
    char按键对应的字符(键盘事件专属)
    keysym按键名,键盘事件专属
    keycode按键码,键盘事件专属
    num按钮数字(鼠标事件专属)
    width, height组件的新尺寸(Configure 事件专属)
    type该事件类型
    from tkinter import *

    def show(event):
        s = event.keysym
        lb.config(text=s)
    root = Tk()
    root.title('按键实验')
    root.geometry('320x240')
    lb = Label(root,text='请按键',font=('黑体',48))
    lb.bind('<Key>',show)
    lb.focus_set()
    lb.pack()
    root.mainloop()

    5.2 lambda表达式实现传参

    • 组件绑定一个执行函数通过属性command = 函数名来实现,但是此方法不能够给函数传递参数
    • 用lambda表达式来实现参数的传递 :command = lambda 参数值列表:表达式

    感谢阅读  若有错误  欢迎指正  !!!