Я пытался транскрибировать код .py в .py-.kv, но безуспешных попыток я достиг всего, что увидел экран и компоненты, но не выполнил необходимую мне основную функцию.Я искал несколько недель в Интернете, и то, что я нашел, не помогло мне, я ценю любую поддержку, чтобы заставить код работать.
Исходный код с этого сайта (пример кода № 7 «Список флажков»):
https://www.reddit.com/r/kivy/wiki/snippets#wiki_checkbox_list
Это четыре «TextCheckBox» с функцией «on_press»", которые показывают в виджете сделанный выбор:
'Пожалуйста, сделайте выбор.'
'Вы выбрали: Программное обеспечение' (если вы выбираете только один элемент)
'ВыВыбрано: Программное обеспечение, Оборудование '(если вы выберете оба элемента)
Я уточняю, что термин "активный" исходного кода, используемого в .py и .kv, не был принят Ninja IDE, и мне пришлосьзамените его на слово «on_press».
Мне удалось увидеть только виджет, я могу сделать выбор в обоих TextCheckBox, но функция показа того, что выделено, не выполняется.
Código .py:
from kivy.app import App
from kivy.lang import Builder
from kivy.clock import Clock
from kivy.factory import Factory
Builder.load_file('ejemplo.kv')
class CheckBoxList(Factory.BoxLayout):
values = Factory.ListProperty()
def __init__(self, **kwargs):
self._trigger = Clock.create_trigger(self._do_update)
super(CheckBoxList, self).__init__(**kwargs)
self.bind(x=self._trigger, y=self._trigger)
def add_widget(self, widget, index=0):
super(CheckBoxList, self).add_widget(widget, index=index)
widget.bind(on_press=self._trigger)
def remove_widget(self, widget):
super(CheckBoxList, self).remove_widget(widget)
widget.unbind(on_press=self._trigger)
def _do_update(self, *largs):
self.values = [tcb.text for tcb in self.children if tcb.on_press]
class TextCheckBox(Factory.ButtonBehavior, Factory.BoxLayout):
text = Factory.StringProperty()
on_press = Factory.BooleanProperty(False)
class MyApp(App):
def build(self):
return CheckBoxList()
if __name__ == '__main__':
MyApp().run()
...........................
código .kv:
<CheckBoxList>:
id: cblist
TextCheckBox:
text: 'Software'
TextCheckBox:
text: 'Hardware'
BoxLayout:
orientation: 'horizontal'
width: 500
size_hint: None, None
pos_hint:{'center_x':.1,'center_y':.50}
Label:
text: cblist.values and 'You Selected: {}'.format( ', '.join(cblist.values)) or 'Please make selection.'
<TextCheckBox>:
orientation: 'horizontal'
on_press: cb.on_press
on_press: root.on_press= not root.on_press
CheckBox:
id: cb
on_press: root.on_press
Label:
id: lbl
text: root.text
Ожидаемые результаты состоят в том, что код .py-.kv показывает выбор, сделанный из одного или обоих параметров TextCheckBox.