当我在屏幕之间切换时,我想清除选中的复选框。当我切换屏幕时,选中的复选框保持选中状态。
我认为,如果我找到一种在切换到另一个屏幕时更改复选框激活状态的方法,那么我的问题就可以解决。
但是我不知道该怎么做。
我的代码也有一定数量的复选框,我只能选择其中六个。我的主文件中的功能是计算它们。
我的main.py
class SkillChose(Screen):
checkboxvalues = {}
for i in range(1, 21):
checkboxvalues["s{}".format(i)] = -2
def __init__(self,**kwargs):
super(SkillChose,self).__init__(**kwargs)
self.click_count = 0
self.skills=[]
def click_plus(self,check,id):
if check is True:
self.click_count+=1
self.checkboxvalues[id]=1
return True
def click_extraction(self,id):
if self.checkboxvalues[id]==1:self.click_count-=1
self.checkboxvalues[id]=0
return False
def control(self,id):
if id==0:return False
count=0
for open in self.checkboxvalues.values():
if open==1:
count+=1
for i,j in self.checkboxvalues.items():
print(i,j)
if count<6:
return True
else:
return False
my.kv文件
<SkillChose>:
name:"skill"
BoxLayout
ScrollView:
size: self.size
GridLayout:
id: grid
size_hint_y: None
row_default_height: '50sp'
height: self.minimum_height
cols:2
Label:
Label:
Label:
text:"skill1"
CheckBox:
value:"s1"
active:(root.click_plus(self.active,self.value) if root.control(self.value) else False ) if self.active else root.click_extraction(self.value)
Label:
text:"skill2"
CheckBox:
value:"s2"
active:(root.click_plus(self.active,self.value) if root.control(self.value) else False ) if self.active else root.click_extraction(self.value)
Label:
text:"skill3"
CheckBox:
value:"s3"
active:(root.click_plus(self.active,self.value) if root.control(self.value) else False ) if self.active else root.click_extraction(self.value)
答案 0 :(得分:0)
离开屏幕时,需要以下增强功能(kv文件和Python脚本)来清除CheckBox
的属性active
。
使用ScreenManager
on_leave
事件来调用回调,例如reset_checkbox()
<SkillChose>:
name:"skill"
on_leave: root.reset_checkbox()
BoxLayout:
...
from kivy.uix.checkbox import CheckBox
for
循环通过GridLayout:
遍历ids.grid
的子代isinstance()
函数检查CheckBox
小部件class SkillChose(Screen):
...
def reset_checkbox(self):
for child in reversed(self.ids.grid.children):
if isinstance(child, CheckBox):
child.active = False
...