Kivy сгруппировал флажки (переключатели), щелкая все вместе и из любого места на экране? - PullRequest
0 голосов
/ 17 июня 2020

Вот то, что я считал очень простой конфигурацией экрана, и у меня есть три переключателя. Но щелчок в любом месте экрана приводит к выбору третьего переключателя - вы не можете выбрать первый или второй переключатель, и почему он выбирается, когда пользователь щелкает в любом месте экрана, а не только на переключателе? Щелчок в любом месте второй раз отменяет выбор третьего элемента.


<FirstProfile>
    id: firstprofile

    disc_1: disc_1
    disc_2: disc_2
    disc_3: disc_3

    canvas.before:
        Color:
            rgba: 1,1,1,1
        Rectangle:
            size: self.size

    FloatLayout:

        CheckBox:
            id: disc_1
            pos_hint: {'x':0.05,'center_y':0.7}
            group: "disc"
            active: False

        Label:
            text: "Disc 1"
            pos_hint: {'x':0.25,'center_y':0.7}
            text_size: 200,80
            halign: 'left'
            valign: 'middle'

        CheckBox:
            id: disc_2
            pos_hint: {'x':0.05,'center_y':0.65}
            group: "disc"
            active: False

        Label:
            text: "Disc 2"
            pos_hint: {'x':0.25,'center_y':0.65}
            text_size: 200,80
            halign: 'left'
            valign: 'middle'

        CheckBox:
            id: disc_3
            pos_hint: {'x':0.05,'center_y':0.6}
            group: "disc"
            active: False

        Label:
            text: "Disc 3"
            pos_hint: {'x':0.25,'center_y':0.6}
            text_size: 200,80
            halign: 'left'
            valign: 'middle'


1 Ответ

0 голосов
/ 17 июня 2020

Проблема в том, что вы не установили никаких размеров для CheckBoxes, поэтому каждому CheckBox назначается значение по умолчанию size_hint из (1,1), что означает, что каждый имеет тот же размер, что и их родительский FloatLayout. Когда вы щелкаете в любом месте этого FloatLayout, последний добавленный CheckBox ("Dis c 3") получает событие и заявляет его для себя, а остальные никогда не видят событие.

Вот это модифицированная версия вашего kv, которая устанавливает некоторые размеры:

<FirstProfile>
    id: firstprofile

    disc_1: disc_1
    disc_2: disc_2
    disc_3: disc_3

    FloatLayout:
        CheckBox:
            id: disc_1
            pos_hint: {'x':0.05,'center_y':0.7}
            group: "disc"
            active: False
            size_hint: None, None
            size: sp(32), sp(32)

        Label:
            text: "Disc 1"
            pos_hint: {'x':0.25,'center_y':0.7}
            text_size: 200,80
            halign: 'left'
            valign: 'middle'
            size_hint: None, None
            size: self.texture_size

        CheckBox:
            id: disc_2
            pos_hint: {'x':0.05,'center_y':0.65}
            group: "disc"
            active: False
            size_hint: None, None
            size: sp(32), sp(32)

        Label:
            text: "Disc 2"
            pos_hint: {'x':0.25,'center_y':0.65}
            text_size: 200,80
            halign: 'left'
            valign: 'middle'
            size_hint: None, None
            size: self.texture_size

        CheckBox:
            id: disc_3
            pos_hint: {'x':0.05,'center_y':0.6}
            group: "disc"
            active: False
            size_hint: None, None
            size: sp(32), sp(32)

        Label:
            text: "Disc 3"
            pos_hint: {'x':0.25,'center_y':0.6}
            text_size: 200,80
            halign: 'left'
            valign: 'middle'
            size_hint: None, None
            size: self.texture_size
...