带 MDCheckbox 的条件语句

Conditional statements with MDCheckbox

我想检查复选框状态是否为 down/normal(True/False) 并执行进一步的代码

我试过了

if self.root.ids.chk_box.active==True:
    print('True')
else:
    print('False')

但是不能正常使用

编辑: 完整代码

from kivy.lang import Builder 
from kivy.factory import Factory 
from kivymd.uix.selectioncontrol import MDCheckbox 

Root="""
#:import F kivy.factory.Factory

<Obj_1@BoxLayout>:
    MDCheckbox:
        id:chk_box
        
BoxLayout:
    id:Layout_1 
    
    MDRectangleFlatButton:
        text:"Add"
        on_press:root.add_widget(F.Obj_1()) 

    MDRectangleFlatButton:
        text:"print state" 
        on_press:app.State()
    

"""

class Main(MDApp):
    def build(self):
        return Builder.load_string(Root)
    

    def State(self):
        self.Obj_1=Factory.Obj_1()
        if self.Obj_1.ids.chk_box.active==True:
            print('True')
        else:
            print("False")
        
Main().run()
        

在上面的代码中,添加按钮将复选框添加到主布局中,然后有一个按钮'print state'知道状态

你可以清楚地看到即使Checkbox状态为True它也一直在打印False

如果 MDCheckbox 没有放在 Factory 对象中,同样的事情也能正常工作

注意:这是为了了解复选框的状态,我肯定知道 on_active: 功能,但我不能使用那个

您的代码有几个问题:

  • 在您的 State() 方法中,代码 self.Obj_1=Factory.Obj_1() 正在创建 Obj_1 的新实例。该新实例与出现在您的 GUI 中的实例没有任何关系,因此检查其状态是没有用的。
  • 同样在您的 State() 方法中,代码:if self.Obj_1.ids.chk_box==True: 未检查 state(或 active 属性) 18=].
  • kv 中的代码:on_press:root.add_widget(F.Obj_1()) 创建了 Obj_1 的新实例,但不保留对该实例的引用。这使得很难访问 Obj_1 实例来检查它的 state.

这是解决上述问题的代码修改版本:

from kivy.lang import Builder
from kivy.factory import Factory
from kivymd.app import MDApp

Root = """
#:import F kivy.factory.Factory

<Obj_1@BoxLayout>:
    MDCheckbox:
        id:chk_box

BoxLayout:
    id:Layout_1 

    MDRectangleFlatButton:
        text:"Add"
        # on_press:root.add_widget(F.Obj_1()) 
        on_press: app.add_Obj()  # call a method of the App, rather than creating the Obj_1 instance here

    MDRectangleFlatButton:
        text:"print state" 
        on_press:app.State()
"""


class Main(MDApp):
    def build(self):
        return Builder.load_string(Root)

    def add_Obj(self):
        # create a new instance of `Obj_1` and save a reference to it
        self.Obj_1 = Factory.Obj_1()
        self.root.add_widget(self.Obj_1)

    def State(self):
        # self.Obj_1 = Factory.Obj_1()
        if self.Obj_1.ids.chk_box.active == True:  # Check the `active` property of the `Obj_1` instance
            print('True')
        else:
            print("False")


Main().run()