如何在kivy中通过不同的类或根小部件传递变量?

时间:2017-12-06 20:25:49

标签: python kivy kivy-language

我正在创建一个应用程序,我在一个类中确定一个变量,并需要将它转移到另一个类。我想使用id,但这对于不同的根小部件不起作用。然后我发现了工厂,它看起来很有前景,似乎有点工作但是当我更新PopupColor类中的变量时,它在我的DrawScreen类中没有更新。

这是代码。

吡啶:

class PopupColor(Popup):
    color = [0,0,0,1]
    def on_press_dismiss(self, colorpicker, *args):
        print(self.color)
        self.dismiss()
        self.color = colorpicker.color
        print(self.color)

class DrawScreen(Screen):
    def testy(self):
        self.color = Factory.PopupColor().color
        print(self.color)

KV:

<PopupColor>:
    title: 'Pick a Color'
    size_hint: 0.75, 0.75
    id: popupcolor

    BoxLayout:
        padding: 5
        spacing: 5
        orientation: 'vertical'

        ColorPicker:
            id: colorpicker
            size_hint: 1.0, 1.0

        Button:
            text: 'Choose Color'
            size_hint: 1, 0.2
            on_release: popupcolor.on_press_dismiss(colorpicker)

<DrawScreen>: 

    Button:
        size_hint: 0.2,0.1
        font_size: 30
        text: "Back"
        on_release: Factory.PopupColor().open()

    ColorButton:
        text: "Test"
        pos_hint:{"center_x":0.5, "y":0.1}
        on_release: root.testy()

那我怎么能这样做,我离我有多远?

编辑:所以看起来这个错误并不是真正的工厂部分,但更多的是PopupColor中的变量不会永久改变。

1 个答案:

答案 0 :(得分:1)

问题在于,当您更改属性时,使用self,它引用此实例 但是,由于您创建了一个新的PopupColor对象,因此每次打开弹出窗口时,都需要将color视为共享变量。
所以你可以这样改变颜色:

PopupColor.color = colorpicker.color

这样您就可以将属性color视为与所有PopupColor个对象共享。