带有 MDCheckbox 的条件语句

Posted

技术标签:

【中文标题】带有 MDCheckbox 的条件语句【英文标题】:Conditional statements with MDCheckbox 【发布时间】:2021-11-13 01:34:08 【问题描述】:

我想检查复选框状态是否为关闭/正常(真/假)并执行更多代码

我试过了

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()
        

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

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

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

注意:这是为了知道复选框的状态,我肯定知道on_active:函数,但我不能使用它

【问题讨论】:

请发帖minimal reproducible example。 用完整代码更新了它 【参考方案1】:

你的代码有几个问题:

在您的State() 方法中,代码self.Obj_1=Factory.Obj_1() 正在创建Obj_1 的新实例。该新实例与您的 GUI 中出现的实例没有任何关系,因此检查其状态是没有用的。 同样在您的State() 方法中,代码:if self.Obj_1.ids.chk_box==True: 未检查MDCheckBoxstate(或active 属性)。 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()

【讨论】:

以上是关于带有 MDCheckbox 的条件语句的主要内容,如果未能解决你的问题,请参考以下文章

带有单管道“|”的 Javascript 条件语句

带有条件语句的 Redux useSelector

带有 SSE 的条件语句

带有条件语句的 NodeJS 顺序异步

使用带有多个语句的 data.table 进行条件过滤

带有条件赋值的嵌套否定 if 语句