Kivy align Переключатель влево в BoxLayout - PullRequest
0 голосов
/ 18 марта 2020

Я хочу выровнять переключатель с левой стороны BoxLayout. Для этикеток я достиг этого с помощью следующего кода:

text_size: self.size

Это помещает текст моей метки в нижний левый угол моего boxlayout. Однако я не могу сделать то же самое с переключателем виджетов . Я попытался поиграть с size_hint_x, size, pos и так далее, но я не могу правильно выровнять элементы, не нарушая размеры блоков. В настоящее время мои метки выровнены правильно, поэтому я попытался назначить им идентификаторы и расположить переключатель в соответствии с текущим положением метки следующим образом:

BoxLayout:
    padding: 100, 0, 0, 0
    orientation: 'horizontal'
    text_size: self.size
    valign: 'middle'
    Label:
        text: 'this is already correctly aligned'
        id: 'labelCorrectlyAligned'
#Some other code
BoxLayout:
    padding: 100, 0, 0, 0
    orientation: 'horizontal'
    #here i need something like text_size: self.size but for switches
    Switch:
        size_hint_x: labelCorrectlyAligned.pos[0] #this should be the current X-position of the label
        #pos_hint_x: labelCorrectlyAligned.pos[0] #didnt work either

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Редактировать: для удобства я создал динамический класс c для моего переключателя по левому краю:

<SwitchL@Switch>:
    size_hint_x: None
    size: 83, self.height
0 голосов
/ 18 марта 2020

Если я правильно понимаю ваш вопрос, вы можете просто установить size из Switch на минимум, как указано в документации :

Минимальный размер требуется 83x32 пикселей

Любой размер, больший, чем этот, будет иметь изображение 83 на 32, центрированное в этом большем размере.

Кроме того, в этих ситуациях макета я считаю полезным раскрасьте фон Widgets, чтобы легко увидеть, где они находятся и насколько они велики. Вот модифицированная версия вашего 'kv`, которая выполняет оба приведенных выше предложения:

BoxLayout:
    orientation: 'vertical'
    BoxLayout:
        padding: 100, 0, 0, 0
        orientation: 'horizontal'
        canvas.before:
            Color:
                rgba: 1,0,0,1
            Rectangle:
                pos: self.pos
                size: self.size
        Label:
            text: 'this is already correctly aligned'
            text_size: self.size
            valign: 'middle'
            id: 'labelCorrectlyAligned'
            canvas.before:
                Color:
                    rgba: 0,1,0,1
                Rectangle:
                    pos: self.pos
                    size: self.size

# Some other code

    BoxLayout:
        padding: 100, 0, 0, 0
        orientation: 'horizontal'
        canvas.before:
            Color:
                rgba: 1,1,0,1
            Rectangle:
                pos: self.pos
                size: self.size
        Switch:
            size_hint: None, None
            size: 83, 32
            on_active: app.setBluetoothConnection(self)
            canvas.before:
                Color:
                    rgba: 0,0,1,1
                Rectangle:
                    pos: self.pos
                    size: self.size

Конечно, когда вы довольны макетом, просто удалите блоки canvas.before:.

Кстати, text_size и valign не действуют в BoxLayout, они должны быть в правиле Label.

Итак, и Switch, и Label находятся слева от BoxLayout. Обычным способом определения размера Label является использование:

size_hint: None, None
size: self.texture_size

. Это дает вам минимальный размер для Label.

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