Python/Kivy传递变量

Python/Kivy传递变量,python,python-3.x,kivy,kivy-language,Python,Python 3.x,Kivy,Kivy Language,正在努力将变量传递给kivy window。我在各地都读过类似的文章,但似乎没有一个补丁适合我。我相信这对了解tiny的人来说很简单,不幸的是我不知道 main.py import kivy from kivy.uix.togglebutton import ToggleButton from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.clock import Clock from kivy.

正在努力将变量传递给kivy window。我在各地都读过类似的文章,但似乎没有一个补丁适合我。我相信这对了解tiny的人来说很简单,不幸的是我不知道

main.py

import kivy
from kivy.uix.togglebutton import ToggleButton
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.app import App
kivy.require('1.10.0')
from phue import Bridge
import nest
b = Bridge('xxx.xxx.x.xxx')
b.connect()
b.get_api()
lights = b.lights

class Controller(GridLayout):

    print("launching")


    def __init__(self):
            super(Controller, self).__init__()

    def KitchenSpot1(self,state):
        lights[0].name
        lights[0].on = state

    def update(dt):
        if b.get_light(1, 'on')== True:
            #print("down") # When this line is commented out I get an continuous accurate update on the status of the light, showing that its working.
            return 'down' # This is the part I want passed to the state criteria in the ivy window
        else:
            #print("up")# When this line is commented out I get an continuous accurate update on the status of the light, showing that its working.
            return 'down' # This is the part I want passed to the state criteria in the ivy window



class ActionApp(App):

    def build(self):

        Clock.schedule_interval(Controller.update, 1.0 / 60.0)
        return Controller()

myApp = ActionApp()
myApp.run()
动作1.kv

<Controller>:
    cols: 4
    rows: 3
    spacing: 10

    ToggleButton:
        id: KitchenSpot1Toggle
        text: "Kitchen Spot 1"
        on_press: root.KitchenSpot1(True) 

        #on_release: root.KitchenSpot1(False)
        #state1 = app.update.h
        state: Controller.update # This is the part that is throwing up the error.

提前感谢任何能帮助我的人。

更新
作为一个实例方法,并使用
StringProperty
来更新kv中的
状态
属性:

main.py:

import kivy
kivy.require('1.10.0')
from kivy.app import App
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.properties import StringProperty
from kivy.uix.gridlayout import GridLayout
from kivy.uix.togglebutton import ToggleButton
from phue import Bridge
import nest



b = Bridge('xxx.xxx.x.xxx')
b.connect()
b.get_api()
lights = b.lights


class Controller(GridLayout):
    state = StringProperty('normal')                        # <<<<<<<<<<<<

    def __init__(self, **kwargs):
        super(Controller, self).__init__(**kwargs)
        Clock.schedule_interval(self.update, 1.0 / 60.0)

    def KitchenSpot1(self,state):
        lights[0].name
        lights[0].on = state

    def update(self, dt):
        if b.get_light(1, 'on'):
            self.state = 'down'                           # <<<<<<<<<<<<
        else:
            self.state = 'normal'                         # <<<<<<<<<<<<


class ActionApp(App):
    def build(self):
        return Controller()


if __name__ == "__main__":
    myApp = ActionApp()
    myApp.run()
<Controller>:
    cols: 4
    rows: 3
    spacing: 10
    state: "normal"                                      # <<<<<<<<<<<<

    ToggleButton:
        id: KitchenSpot1Toggle
        text: "Kitchen Spot 1"
        on_press: root.KitchenSpot1(True)

        #on_release: root.KitchenSpot1(False)
        #state1 = app.update.h
        state: root.state                                # <<<<<<<<<<<<
导入kivy
kivy.require('1.10.0')
从kivy.app导入应用程序
从kivy.clock导入时钟
从kivy.lang导入生成器
从kivy.properties导入StringProperty
从kivy.uix.gridlayout导入gridlayout
从kivy.uix.togglebutton导入togglebutton
从富进口桥
进口鸟巢
b=桥('xxx.xxx.x.xxx')
b、 连接()
b、 get_api()
灯光
类控制器(GridLayout):

state=StringProperty('normal')#这里是一个更通用的简化答案,请查找名为“关键字参数和init()”的部分,因为还有其他一些方法可以实现

下面的代码将myvar传递给MyApp的build()方法。它通过调用App.init()的新init()超越Kivy App类的init()来实现这一点,然后继续进行您想要的任何额外初始化。然后,您可以将变量存储在MyApp类实例中,并在build()中使用它们


您尝试过root.update而不是Controller.update吗?当我复制代码时,会出现以下错误:回溯(上次调用):文件“main1.py”,第17行,类内控制器(GridLayout):文件“main1.py”,第18行,处于控制器状态=StringProperty('down')NameError:名称“StringProperty”未定义Js iMac:Python程序johngoodwin$显然无法格式化注释。错误:“StringProperty”未定义检查我的导入,您必须从kivy导入
StringProperty
。属性导入StringProperty
您是魔术师!通过放置root.state,我可以跳回控制器类吗?您知道当按钮取消切换时,我如何让按钮设置root.KitchenSpot1(False)?
<Controller>:
    cols: 4
    rows: 3
    spacing: 10
    state: "normal"                                      # <<<<<<<<<<<<

    ToggleButton:
        id: KitchenSpot1Toggle
        text: "Kitchen Spot 1"
        on_press: root.KitchenSpot1(True)

        #on_release: root.KitchenSpot1(False)
        #state1 = app.update.h
        state: root.state                                # <<<<<<<<<<<<
from kivy.app import App
from kivy.uix.label import Label

myvar = 'Hello Kivy'

class MyApp(App):

    def __init__(self, myvar, **kwargs):
        super(MyApp, self).__init__(**kwargs)
        self.myvar = myvar

    def build(self):
        widget = Label(text=self.myvar)
        return widget

if __name__ == '__main__':
    MyApp(myvar).run()