带有 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:
未检查MDCheckBox
的state
(或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 的条件语句的主要内容,如果未能解决你的问题,请参考以下文章