带parti的Kivy Python回调函数

2024-06-25 05:43:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从我的Arduino在Raspberry上的kivy中“提取”一些值,它通过无线NRF24模块连接。我正在使用this库和python wrapper

在纯Python中,代码运行得很好,现在我想把它集成到Kivy中。在

为此,我在zimmerwetter.py中创建了两个函数:

一个用于设置无线电设备并返回无线电对象(应在应用程序启动后运行):

def radiosetup():
    radio = RF24(RPI_BPLUS_GPIO_J8_22, RPI_BPLUS_GPIO_J8_24, BCM2835_SPI_SPEED_8MHZ)

    # doing setup stuff...

    return radio

另一个功能是向Arduino发送一个请求,它提供一些环境数据(温度、湿度等)。在

^{pr2}$

getenvironment函数应该在以后每隔x秒从kivy应用程序调用一次,部分函数按照the kivy clock module中的建议使用

from zimmerwetter import *

class PyowmApp(App):
    def build(self):
        radio = radiosetup()
        Clock.schedule_interval(partial(getenviroment,radio), 10)

错误是:

   File "/home/pi/pyscripts/pyowm/zimmerwetter.py", line 83, in getenviroment
     radio.stopListening()
 AttributeError: 'float' object has no attribute 'stopListening'

我想知道为什么返回一个float对象,当我用help(radio)打印radio对象时,它返回class RF24(Boost.Python.instance),并且函数stoplistening()存在。在


Tags: 对象函数py应用程序gpiodefrpiarduino
2条回答

Clock.schedule_interval调用的函数将在通过partial的参数之后接收dt作为参数。函数的签名是getenviroment(self,radio),因此radio将被分配给self,而{}将被分配给{}。在

相反,请使用lambda

Clock.schedule_once(lambda dt: self.getenviroment(radio), 10)

我自己发现的,把计划表改成

Clock.schedule_interval(partial(getenviroment,radio=radio), 10)

成功了。在

相关问题 更多 >