Kivy Python-带有部分

Kivy Python-带有部分,python,kivy,raspberry-pi3,Python,Kivy,Raspberry Pi3,我想从Raspberry上kivy的Arduino中“提取”一些值,它通过无线NRF24模块连接。我正在用一个图书馆 在纯Python中,代码运行良好,现在我想将其集成到Kivy中 为此,我在zimmerwetter.py中创建了两个函数: 一个用于设置无线电设备并返回无线电对象(应在应用程序启动后运行): 另一个功能是向Arduino发送请求,Arduino提供一些环境数据(温度、湿度等) 稍后,应从kivy应用程序每隔x秒调用一次GetEnvironment函数,部分函数如中所示使用 错误是

我想从Raspberry上kivy的Arduino中“提取”一些值,它通过无线NRF24模块连接。我正在用一个图书馆

在纯Python中,代码运行良好,现在我想将其集成到Kivy中

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

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

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

稍后,应从kivy应用程序每隔x秒调用一次GetEnvironment函数,部分函数如中所示使用

错误是:

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

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

我自己发现了它,将schedule语句改为

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

成功了

Clock.schedule\u interval调用的函数将在通过
partial
的参数之后接收
dt
作为参数。函数的签名是
getEnvironment(self,radio)
,因此
radio
将分配给
self
,而
dt
将分配给
radio

相反,请使用
lambda

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

将语句更改为
Clock.schedule\u一次(lambda dt:getEnvironment(radio),10)
并从函数中删除自参数也在起作用(函数未在应用程序范围内声明)@Triscus问题没有说明
getEnvironment
是在哪里定义的,所以我假设
PyownApp
。用具有
getenvironment
的类的正确实例替换
self
。或者考虑更改参数<代码>自身>代码>。函数没有在类内定义,只有用<代码> DEF语句。我想我应该习惯OOP了,谢谢你的帮助inspiration@Triscus这很好,但是在这种情况下,
getenvironment
的第一个参数不应该是
self
…这样就行了,但不太清楚:这里发生的是通过
partial
schedule\u interval
dt
)传递的位置参数分配给
getenvironment
self
)中的第一个参数<代码>自我以后不会使用,因此没有问题。然后,
radio
将按名称和预期值进行分配。因此,如果
self
实际上具有某种意义,那么这种方法将不起作用,并产生意外的结果/错误。我只是想指出…
   File "/home/pi/pyscripts/pyowm/zimmerwetter.py", line 83, in getenviroment
     radio.stopListening()
 AttributeError: 'float' object has no attribute 'stopListening'
Clock.schedule_interval(partial(getenviroment,radio=radio), 10)
Clock.schedule_once(lambda dt: self.getenviroment(radio), 10)