Kivy布尔对象属性不更改复选框

时间:2018-12-02 21:10:23

标签: python kivy kivy-language

因此,我尝试从三个单选按钮中提取值,每个按钮都分配了自己的布尔值,即使我的按钮确实确实更改了自己的值,它们似乎也没有更改{ {1}}属性。

这是处理它的python代码:

let rectangle3 =
    Repeat(2, robo {
        let! _ = Repeat( 3, Forward)
        let! _ = Repeat(90, Left   )
        let! _ = Repeat( 2, Forward)
        return!  Repeat(90, Left   )
    })

我提供了一种用于检查每个值状态的方法

这是代码的Kivy部分:

value:

1 个答案:

答案 0 :(得分:1)

我认为主要问题是您不了解以下含义

value: root.blue

我认为您认为root.blue会更改(如果处于活动状态)会更改,但反之亦然,您要指出的是,每次更改root.blue都会更改Checkbox的状态,显然您从未更改过root.blue,因此将不会更新活动目录。反之亦然:

<CliClicker>:
    blue: checkbox_blue.active
    # ...
    CheckBox:
        id: checkbox_blue
        group: "bg_color"

但是,尽管如此,这是一个坏主意,但最好还是认为每个功能都是一个黑匣子,可以接收输入并获取输出,在这种情况下,输出是颜色,因此我们创建了一个继承自GridLayout的自定义小部件并显示属性颜色:

*。py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

class CliClicker(BoxLayout):
    pass

class MainApp(App):
    def build(self):
        return CliClicker()

if __name__ == '__main__':
    MainApp().run()ç

*。kv

<OptionButton@Button>:
    size_hint: (None,None)
    width: 200
    height: 40

<ColorSelector@GridLayout>:
    cols: 6
    color_sel: (.7,.7,.9,1)
    canvas:
        Color:
            rgba: .9,.9,.9,1
        Rectangle:
            pos: self.pos
            size: self.size
    CheckBox:
        group: "bg_color"
        color: 0,0,0,1
        active: True
        on_active: if self.active: root.color_sel = .7,.7,.9,1
    Label:
        text: 'blue'
        color: 0,0,0,1
    CheckBox:
        group: "bg_color"
        color: 0,0,0,1
        on_active: if self.active: root.color_sel = .9,.7,.7,1
    Label:
        text: 'red'
        color: 0,0,0,1
    CheckBox:
        group: "bg_color"
        color: 0,0,0,1
        on_active: if self.active: root.color_sel = .7,.9,.7,1
    Label:
        text: 'green'
        color: 0,0,0,1

<CliClicker>:
    orientation: "vertical"
    id: cliclicker
    menuoptions: menuopts

    TabbedPanel:
        do_default_tab: False
        height: 200
        id: tabs

        TabbedPanelItem:
            text: "Menu"
            id: menu

            FloatLayout:
                id: menuopts
                color_property:  (.7,.7,.9,1)
                canvas:
                    Color:
                        rgba: self.color_property
                    Rectangle:
                        pos: self.pos
                        size: self.size

                OptionButton:
                    text: 'Option 1'
                    pos_hint: {'right':.63, 'top':.9}

                OptionButton:
                    text: 'Option 1'
                    pos_hint: {'right':.63, 'top':.8}
                ColorSelector:
                    id: selector
                    size_hint: (None, None)
                    pos_hint: {'top': .7, 'right':.69}
                    height: 40
                    width: 300
                    on_color_sel: menuopts.color_property = self.color_sel

permalink

enter image description here

enter image description here