python中的事件属性详解

参考资料(官网文档):http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm

# python中的事件的属性有:
#(1)widget  事件发生的部件(也就是地点)
#(2)x, y    事件的位置(相对于控件来说的相对坐标)
#(3)x_root, y_root  事件的位置(相对于屏幕的左上角的坐标绝对坐标)
#(4)keysym  按键事件的值(如按下f则这个事件的keysym就是f)
#(5)keycode 事件对象的数字码(如按下f的数字码是70,注意大写的F的数字码也是70,从这里可以使用keycode对大小写的F进行监听)
#(6)type    事件的一个类型(例如:键盘为2,鼠标点击为4,鼠标移动为6)
#(7)char    按钮事件的一个字符代码(例如f键盘为’f‘)
#(8)num     鼠标点击的事件数字码(左鼠标点击为1,中间鼠标为2,右边是鼠标为3)
#(9)width, height  (新的部件的大小,在下面的例子中可能你看到的打印是??,因为没有新的部件的产生)

测试代码示例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author  : SundayCoder-俊勇
# @File    : eventthing.py
from Tkinter import *

root = Tk()

def key(event):
    print "pressed at widget%s" % event.widget
    print "pressed", repr(event.char)
    print "event.type is %s"%event.type
    # 按下键盘上的f键的时候执行的事件
    # (注意大写的F与小写的f他们的事件监听是不一样的,这里监听是小写的f)
    print  event.keycode
    # 按下键盘上的f键的时候执行的事件
    if event.keysym=='f':
        print "hello world %s"%repr(event.char)
    # 这里可以使用keycode对大小写的F进行监听
    if event.keycode==70:
        print "这里可以使用keycode对大小写的F进行监听"
def callback(event):
    frame.focus_set()
    print "num is %s"% event.num
    print "width is %s, height is %s"%(event.width,event.height)
    print "clicked at widget%s"% event.widget, event.x, event.y,"root_x,root_y",event.x_root,event.y_root,event.type
def sayhello(event):
    print  "hello world"
frame = Frame(root, width=100, height=100)
frame.bind("<Key>", key)
#button-1是鼠标左键按下,以此类推
#B1-Motion是鼠标左键移动,以此类推
frame.bind("<Button-1>", callback)
frame.bind("<Button-2>", callback)
frame.bind("<Button-3>", callback)
frame.bind("<B1-Motion>", callback)
frame.bind("<B2-Motion>", callback)
frame.bind("<B3-Motion>", callback)
# 注意这里的<Enter>事件不是键盘按下Enter而是鼠标进入到控件时候的事件,相当于java的获得焦点的事件监听
frame.bind("<Enter>",sayhello)
frame.pack()

root.mainloop()

测试部分的运行结果:
这里写图片描述

如果有任何疑问,可以自己测试一下上面的代码行!!!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在 Python ,私有属性是指在类内部使用两个下划线前缀来声明的属性。这些属性不能在类的外部直接访问,只能在类的内部使用。 这种声明方式的目的是为了让类的使用者不能随意修改类内部的状态,从而保证类的正常运行。 例如: ``` class MyClass: def __init__(self): self.__private_attribute = 0 def get_attribute(self): return self.__private_attribute def set_attribute(self, value): self.__private_attribute = value ``` 在上面的代码,`__private_attribute` 是一个私有属性,不能在类的外部直接访问。要访问或者修改这个属性,必须通过类提供的 `get_attribute` 和 `set_attribute` 方法。 注意,在 Python ,私有属性并不是真正意义上的私有,它仍然可以通过 `_ClassName__attribute_name` 的方式在外部访问。但是这种方式并不建议使用,而是应该通过类提供的公共方法来访问和修改类的内部状态。 ### 回答2: Python的私有属性是指以双下划线"__"开头的属性,例如"__name"。私有属性的特点是只能在类的内部访问,无法通过实例对象直接访问。 Python类的私有属性主要有以下几个特点: 1. 访问限制:私有属性只能在类的内部进行访问,无法在类的外部通过实例对象直接访问。这种限制可以保护属性的安全性,防止外部的错误操作。 2. 名字重整:Python解释器会对私有属性的名字进行重整,将"__name"重命名为"_类名__name"。这种重命名的机制是为了在一定程度上绕过访问限制,但不建议直接访问重整后的名字。 3. 编程习惯:私有属性的使用主要是为了约定俗成的编程习惯,用来表示属性是私有的,不应该被外部访问。但实际上,Python并没有严格的访问控制机制,只要知道私有属性的名字,还是可以直接进行访问。 4. getter和setter方法:由于私有属性无法直接访问,所以一般通过定义getter和setter方法来对私有属性进行读取和修改。getter方法用于获取私有属性的值,setter方法用于设置私有属性的值。通过这种方式,可以间接地访问和修改私有属性。 总结来说,Python的私有属性主要是一种约定俗成的编程习惯,用以表示属性是私有的,不应该被外部直接访问。虽然Python并没有严格的访问控制机制,但通过使用私有属性、重整和getter/setter方法等方式,可以在一定程度上实现对私有属性的访问限制和保护。 ### 回答3: Python的私有属性是指以双下划线“__”开头的属性,它们只能在类的内部访问,无法在类的外部直接访问和修改。这种机制是为了保护类的属性,避免外部代码对属性的意外修改和访问。 私有属性可以在类的内部使用,包括在类的方法和其他属性。在方法,可以通过self.__属性名来访问私有属性。私有属性与普通属性的访问方式是一样的,没有特殊的语法或操作。 私有属性的主要作用是封装数据,控制属性的可见性和保护数据安全。通过将属性设置为私有,可以防止外部代码直接访问和修改属性的值,只能通过类提供的方法来操作属性。这样做可以有效控制数据的有效性和一致性。 另外,私有属性也可以用于避免命名冲突。以双下划线开头的属性会自动在属性名前面添加一个类名前缀,这样可以在继承关系避免同名属性的冲突。当子类定义了与父类同名的私有属性时,它们实际上是不同的属性。 需要注意的是,虽然私有属性无法直接访问,但Python并没有严格限制访问私有属性。实际上,通过使用“_类名__属性名”的方式,仍然可以访问到私有属性。但这种操作是不被推荐的,因为它违背了类的封装原则,容易导致代码的混乱和不稳定。 总之,私有属性Python是一种可以实现封装和数据安全的机制。通过将属性设置为私有,可以有效地保护属性的访问和修改,控制数据的有效性和一致性。同时,私有属性还可以用于避免命名冲突,提高代码的可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值