如何让kivy复选框传递它的状态

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

问题描述

Main.py

def if_active(self, state):
    If state is true:
        print "True"
    else:
        print "False"

main.kv

CheckBox
    on_state: root.if_active(self.state)

Ignoring all the classes and .run() and that stuff, It should be obvious what I'm trying to do here What am I doing wrong?

解决方案

The solution is as follow. Please refer to the example below for details.

Snippets

main.kv

CheckBox:
    on_active: root.if_active(self.active)

main.py

def if_active(self, state):
    if state:
        print "True"
    else:
        print "False"

Example

main.py

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


class CheckBoxDemo(BoxLayout):
    def on_checkbox_active(self, value):
        if value:
            print("The checkbox is active because value={}".format(value))
        else:
            print("The checkbox is inactive because value={}".format(value))

    def on_radiobutton_active(self, value):
        if value:
            print("The radiobutton is active because value={}".format(value))
        else:
            print("The radiobutton is inactive because value={}".format(value))


class TestApp(App):
    Window.size = (360, 360)
    title = "Kivy Checkbox & RadioButton Demo"

    def build(self):
        return CheckBoxDemo()


if __name__ == "__main__":
    TestApp().run()

test.kv

#:kivy 1.10.0

<CheckBoxDemo>:
    orientation: "vertical"
    Label:
        size_hint: 1, 0.2
        text: "Checkbox"

    GridLayout:
        cols: 2

        CheckBox:
            on_active: root.on_checkbox_active(self.active)
        CheckBox:

        CheckBox:
            group: "radiobutton1"
            on_active: root.on_radiobutton_active(self.active)
        CheckBox:
            group: "radiobutton1"
            on_active: root.on_radiobutton_active(self.active)

        CheckBox:
            group: "radiobutton2"
        CheckBox:
            group: "radiobutton2"

Output

相关文章