Python Kivy:触摸标签以选中复选框
我正在为MCQ做一个aap。这里我想要一个函数,如果有人甚至点击了对应于复选框的标签,该复选框也必须被选中。。在基维有可能吗?因为Kivy不直接提供与复选框的任何文本关联 这是kv的一部分Python Kivy:触摸标签以选中复选框,python,checkbox,kivy,Python,Checkbox,Kivy,我正在为MCQ做一个aap。这里我想要一个函数,如果有人甚至点击了对应于复选框的标签,该复选框也必须被选中。。在基维有可能吗?因为Kivy不直接提供与复选框的任何文本关联 这是kv的一部分 <MCQCheckBox@CheckBox>: color:0,0,0,1 size_hint: 0.15, 1 group: 'opts' <MCQLabel@Label>: text_size: self.size valign: 'cen
<MCQCheckBox@CheckBox>:
color:0,0,0,1
size_hint: 0.15, 1
group: 'opts'
<MCQLabel@Label>:
text_size: self.size
valign: 'center'
font_size: '13sp'
color: 0,0,0,1
<MCQsGUI>:
BoxLayout:
orientation:'vertical'
size_hint: 0.95, 0.7
spacing: 2
pos_hint: {'center_x': .5, 'center_y': .5}
MCQBoxLayout:
MCQCheckBox:
MCQLabel:
text:"option 1"
MCQBoxLayout:
MCQCheckBox:
MCQLabel:
text:"option 2"
MCQBoxLayout:
MCQCheckBox:
MCQLabel:
text:"option 3"
MCQBoxLayout:
MCQCheckBox:
MCQLabel:
text:"option 4"
我不知道是否有一种直接的/内置的方法可以做到这一点。但这里有一个不使用main.kv文件的临时示例 创建复选框和标签对象时,可以按以下方式手动连接复选框:
import kivy
from kivy.uix.checkbox import CheckBox
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
class Answer(Label):
def __init__(self, text, associate):
Label.__init__(self);
self.text = text;
self.associate = associate;
def on_touch_down(self, touch):
Label.on_touch_down(self, touch);
if self.collide_point(touch.pos[0], touch.pos[1]):
self.associate.active = not self.associate.active;
class Page(GridLayout):
def __init__(self):
GridLayout.__init__(self, rows = 2, cols = 2);
self.check = [CheckBox(), CheckBox()];
self.ans = [Answer(text = 'Choice 1', associate = self.check[0]),\
Answer(text = 'Choice 2', associate = self.check[1])];
for i in self.ans:
self.add_widget(i);
for i in self.check:
self.add_widget(i);
class Example(App):
def build(self):
return Page()
因此,每次按下标签时,它都会执行以下操作:self.associate.active=not self.associate.active,它充当相应复选框的开关
*这只是一种方法,你可以即兴创作,甚至找到更好的方法。这可以吗?您可以仅使用kv languaje和dynamic类来完成: 要使标签的行为类似于按钮,只需使MCQLabel从label和ButtonBehavior类继承即可 要保持组自身的行为,可以在按下关联标签时调用类复选框继承的_do_press方法 试验电压(千伏):
兄弟,非常感谢你,非常非常好。。你能用page.kv来展示一个例子吗,因为我是Kivy的初学者。。用一个非常简单的代码像魅力一样工作。。非常感谢。为了获得复选框的活动状态,以便在程序中使用它,您需要在MCQLabelCheckbox widgetI中的文本:和组:下添加活动:cb.active,而不是组:它应该是组:无,b/c否则,多个MCQLabelCheckBox将始终位于一个组中,并且只能检查其中一个。
<MCQCheckBox@CheckBox>:
color: 0, 0, 0, 1
size_hint: 0.15, 1
<MCQLabel@ButtonBehavior+Label>:
text_size: self.size
valign: 'center'
font_size: '13sp'
color: 0, 0, 0, 1
<MCQLabelCheckBox@BoxLayout>:
text: ''
group: ''
MCQCheckBox:
id: cb
group: root.group
MCQLabel:
on_press: cb._do_press()
text: root.text
<MCQsGUI>:
canvas.before:
Color:
rgba: 1, 1, 1, 1
Rectangle:
pos: self.pos
size: self.size
MCQLabelCheckBox:
text:"option 1"
group: 'opts'
MCQLabelCheckBox:
text:"option 2"
group: 'opts'
MCQLabelCheckBox:
text:"option 3"
group: 'opts'
MCQLabelCheckBox:
text:"option 4"
group: 'opts'
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
class MCQsGUI(BoxLayout):
pass
class TestApp(App):
def build(self):
return MCQsGUI()
if __name__ == '__main__':
TestApp().run()