Переписать код kivy.py в kivy.py - .kv (TextCheckBox) - PullRequest
0 голосов
/ 23 сентября 2019

Я пытался транскрибировать код .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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...