Python 中的事件
Manav Narula
2023年1月30日
事件处理创建了一个响应式应用程序,可以检测并生成响应操作。
事件是对象检测到的响应或动作。在 Python 中,事件处理是使用类完成的。
在 Python 中使用 tkinter
模块创建 GUI 应用程序
tkinter
模块用于创建 GUI 应用程序,这些应用程序等待用户的响应并在图形界面中执行功能。
使用 Python 处理事件的主要类
publisher
类生成一个事件。subscriber
类接收这些事件。
class sample_event(object):
def __init__(self):
self.__eventhandler_sample = []
def __iadd__(self, Eventhandler):
self.__eventhandler_sample.append(Eventhandler)
return self
def __isub__(self, Eventhandler):
self.__eventhandler_sample.remove(Eventhandler)
return self
def __call__(self, *args, **keywargs):
for eventhandler_sample in self.__eventhandler_sample:
eventhandler_sample(*args, **keywargs)
class MessToDisplay(object):
def __init__(self, val):
self.val = val
def PrintM(self):
print("Message for an event with value ", self.val)
class sample_class(object):
def __init__(self):
self.ob = sample_event()
def EHnew(self):
self.ob()
def anotherevent(self, objMeth):
self.ob += objMeth
def seq():
newsample = sample_class()
displayamess = MessToDisplay(5)
newsample.anotherevent(displayamess.PrintM)
newsample.EHnew()
seq()
输出:
Message for an event with value 5
seq()
函数定义了不同事件的流程,以打印出消息、附加消息和删除消息。
Python 中有不同类型的事件。例如检测按键
、光标移动
、鼠标点击
,甚至基于计时器
的事件。
使用 pynput.keyboard
模块检测 Python 中的按键
from pynput.keyboard import Key, Listener
def press_key(k):
print(k)
def release_key(k):
if k == Key.space:
return False
with Listener(on_press=press_key, on_release=release_key) as listener:
listener.join()
输出:
'b'
Key.space
Listener()
函数通过执行 press_key
和 release_key
函数来检测这些事件
需要按下空格键来停止这些事件的流动,因为它返回 false
并将停止 Listener()
函数。
作者: Manav Narula
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn