Python libavg自定义事件处理程序
我试图找到一种从嵌入式串行输出中使用libavg事件处理程序的方法。我的理解是,我需要创建自己的发布服务器,在处理串行命令时调用它。所有我需要的是一种方法,创建10个不同的触发器给定不同的串行输入。我尝试做的一个类比就是使用libavg的键盘处理来处理不同的键盘输入 我希望自定义发布服务器获得10个串行输出,并将event.serialid参数传递给各个订阅者,类似于event.keystring所做的操作 这里是一些我拥有的非功能代码,我认为这些代码具有需要完成的基本功能Python libavg自定义事件处理程序,python,embedded,raspberry-pi,libavg,Python,Embedded,Raspberry Pi,Libavg,我试图找到一种从嵌入式串行输出中使用libavg事件处理程序的方法。我的理解是,我需要创建自己的发布服务器,在处理串行命令时调用它。所有我需要的是一种方法,创建10个不同的触发器给定不同的串行输入。我尝试做的一个类比就是使用libavg的键盘处理来处理不同的键盘输入 我希望自定义发布服务器获得10个串行输出,并将event.serialid参数传递给各个订阅者,类似于event.keystring所做的操作 这里是一些我拥有的非功能代码,我认为这些代码具有需要完成的基本功能 #!/usr/bin
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from libavg import avg, statemachine, player
class Test():
PRESSED = avg.Publisher.genMessageID()
RELEASED = avg.Publisher.genMessageID()
def __init__(self, parent=None, **kwargs):
self.registerInstance(self, parent)
self.publish(self.PRESSED)
self.publish(self.RELEASED)
def isActive(self):
self.notifySubscribers(Test.PRESSED, [])
def isInactive(self):
self.notifySubscribers(Test.RELEASED, [])
def onKeyDown(event):
global node
if event.serialid == '1':
#serialid isn't implemented anywhere but this is what ideally I would like to have happen
node.color = "FF8000"
def onKeyUp(event):
global node
node.color = "FFFFFF"
player = avg.Player.get()
canvas = player.createMainCanvas(size=(640,480))
rootNode = player.getRootNode()
node = avg.WordsNode(pos=(10,10), font="arial", text="Hello World", parent=rootNode)
vbutton=Test()
node.subscribe(vbutton.PRESSED, onKeyDown)
node.subscribe(vbutton.RELEASED, onKeyUp)
player.play()
自定义发布者的示例来自:
您可以通过发布-订阅接口传递任意参数。参数作为列表传递:
self.notifySubscribers(Test.PRESSED, [serialID])
在处理程序中:
def onKeyDown(serialID):
global node
if serialid == '1':
node.color = "FF8000"
谢谢你的回复,我刚刚有机会测试一下。现在,我在构建测试发布者类时遇到了问题。有关于如何编写的文档吗?self.registerInstance返回“测试实例没有属性‘registerInstance’”,self.publish也会返回同样的结果。您需要从Publisher派生。
def onKeyDown(serialID):
global node
if serialid == '1':
node.color = "FF8000"