Kivy - Использование события on_release в родительском виджете - PullRequest
0 голосов
/ 09 мая 2019

В настоящее время я пытаюсь вызвать событие on_release пользовательской кнопки, вложенной в динамический класс. Чтобы быть более конкретным. Это пример файла kv моей текущей реализации:

#:kivy 1.10.1
#:include gui/components.kv

<MiddleSectionMain@AnchorLayout>:
    anchor_x: 'center'
    anchor_y: 'center'

    lb_text: ''
    text: spinner_1.text
    stateb1: button_1.state 

    BoxLayout:
        orientation: 'horizontal'
        Label:
            text: root.lb_text
            size_hint_x: 0.3
        Spinner:
            id: spinner_1
            text: 'Select'
        IconButtonSmall:
            id: button_1
            icon_source: 'icons/add_32.png'
        IconButtonSmall:
            id: button_2
            icon_source: 'icons/edit_32.png'


<MainScreen>:
    orientation: 'vertical'

    Label:
        font_size: 25
        text: "Headline"

    GridLayout:
        cols: 1

        MiddleSectionMain:
            lb_text: "Label"
            on_stateb1: 
                if self.stateb1 == 'normal': app.root.current = 'Screen2'

        MiddleSectionMain:
            lb_text: "Label"

IconButtonSmall определен в другом файле .kv (gui / components.kv).

Эта реализация работает, но я не очень доволен ей, так как кнопки также предоставляют событие "on_release". Так что я хочу узнать, есть ли способ использовать событие on_release вместо моей версии, используя on_state вместе с проверкой текущего состояния.

Лучший, Julz

1 Ответ

0 голосов
/ 09 мая 2019

Предположение - использование события on_release или on_press для переключения экрана

В следующем примере показано, как использовать событие Button, on_release в динамическом классе для переключения экрана.

Примечание: Если вы хотите использовать событие on_press, замените on_release на on_press

  1. Объявите StringProperty для каждой кнопки, например btn1_screen_name: ''
  2. Реализуйте on_release: событие для каждой кнопки
  3. Инициализируйте btn1_screen_name: 'Screen2'

Фрагменты

<MiddleSectionMain@AnchorLayout>:
    btn1_screen_name: ''
    btn2_screen_name: ''
    ...
    BoxLayout:
        IconButtonSmall:
            id: button_1
            icon_source: 'icons/add_32.png'
            on_release: app.root.current = root.btn1_screen_name
        IconButtonSmall:
            id: button_2
            icon_source: 'icons/edit_32.png'
            on_release: app.root.current = root.btn2_screen_name


<MainScreen>:
    BoxLayout:
        ...
        GridLayout:
            cols: 1

            MiddleSectionMain:
                lb_text: "Label"
                btn1_screen_name: 'Screen2'
                btn2_screen_name: 'MainScreen'

            MiddleSectionMain:
                lb_text: "Label"
                btn1_screen_name: 'Screen3'
                btn2_screen_name: 'MainScreen'
...