Kivy:如何将复选框设置为在启动时选中

2022-01-15 00:00:00 python kivy checkbox

问题描述

How can I set the status of the checkbox with the id set to blue to be checked on start up. I use python 3.6 and Kivy 1.9.2.dev0. I thought the lines blue = ObjectProperty(True) in .py and value: root.blue in .kv would do that but apparently I am misunderstanding how ObjectProperty works

import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.core.window import Window

class SampBoxLayout(BoxLayout):

    # For radio buttons
    blue = ObjectProperty(True)
    red = ObjectProperty(False)

class SimpleApp(App):
    def build(self):
        Window.clearcolor = (1, 1, 1, 1)
        return SampBoxLayout()

sample_app = SimpleApp()
sample_app.run()

The .kv:

#: import CheckBox kivy.uix.checkbox


<SampBoxLayout>
    orientation: "vertical"
    padding: 10
    spacing: 10
    BoxLayout:
        orientation: "horizontal"
        size_hint_x: .55
        Label:
            text: "Favorite Color:"
            color: 0, 0, 0, 1
            size_hint_x: .265
        Label:
            text: "Blue"
            color: 0, 0, 0, 1
            size_hint_x: .15
        CheckBox:
            group: "fav_color"
            id : blue
            value: root.blue
            size_hint_x: .05
        Label:
            text: "Red"
            color: 0, 0, 0, 1
            size_hint_x: .15
        CheckBox:
            group: "fav_color"
            value: root.red
            size_hint_x: .05

Edit: why use value and not active?

def on_checkbox_active(checkbox, value):
    if value:
        print('The checkbox', checkbox, 'is active')
    else:
        print('The checkbox', checkbox, 'is inactive')

解决方案

No you did not misunderstand it. You just used the wrong attribute name.
Set the active attribute instead of value:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.lang import Builder


root = Builder.load_string('''

<MyWidget>:
    CheckBox:
        id: blue
        active: root.blue
    CheckBox:
        id: red
        active: root.red
''')

class MyWidget(BoxLayout):
    blue = ObjectProperty(True)
    red = ObjectProperty(False)

class MyApp(App):

    def build(self):
        return MyWidget()

MyApp().run()

相关文章