Если я правильно понимаю ваш вопрос, вы можете просто установить 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
.
.