Проблема - дизайн по центру
Дизайн размещен в центре.
первопричина
Корнем является AnchorLayout со значением 'center'
для anchor_x
и anchor_y
. Поэтому все его дочерние элементы (AnchorLayout
s) расположены относительно корня.
Ниже приведен вид вашего дизайна в различных цветах для визуализации.
AnchorLayout выравнивает свои дочерние элементы по границе (сверху, снизу, слева, справа) или по центру.
Решение
Существует три возможных решения для вашего дизайна. Предпочтение отдается методу 1.
Метод 1 - Нет AnchorLayout
с
Этот метод заменяет все AnchorLayout
с BoxLayout
с. Он использует один виджет AnchorLayout
меньше, что делает приложение более ресурсоэффективным, то есть использует меньше памяти, а приложение меньше.
Фрагменты - Метод 1
<Example>:
orientation: 'vertical'
BoxLayout:
...
GridLayout: # left box
...
BoxLayout: # right box
...
BoxLayout: # footer
...
Метод 2 - BoxLayout
как root
Этот метод заменяет корневой виджет на BoxLayout
и выравнивает левое поле.
Отрывки - Метод 2
<Example>:
orientation: 'vertical'
AnchorLayout:
...
GridLayout: # left box
...
AnchorLayout: # right box
...
AnchorLayout: # footer
...
Метод 3
Этот метод добавляет BoxLayout
в качестве дочернего элемента корня, а остальные AnchorLayout
в качестве дочернего элемента BoxLayout
.
Отрывки - Метод 3
<Example>:
anchor_x: "center"
anchor_y: "center"
BoxLayout:
orientation: 'vertical'
AnchorLayout:
...
GridLayout: # left box
...
AnchorLayout: # right box
...
AnchorLayout: # footer
...
* * Пример тысяча шестьдесят три * * 1 064
Метод 1 - Нет AnchorLayout
с
main.py
from kivy.base import runTouchApp
from kivy.lang import Builder
runTouchApp(Builder.load_string("""
BoxLayout:
orientation: 'vertical'
BoxLayout:
size_hint: 1, 0.75
GridLayout:
size_hint: 0.2, 1
canvas.before:
Color:
rgba: 1, 0, 0, 1
Rectangle:
size: self.size
pos: self.pos
cols: 3
row_force_default: True
row_default_height: 40
Button:
text: "X"
Button:
text: "X"
Button:
text: "X"
Button:
text: "X"
Button:
text: "X"
Button:
text: "X"
BoxLayout:
orientation: 'vertical'
canvas.before:
Color:
rgba: 0, 1, 0, 1
Rectangle:
size: self.size
pos: self.pos
Label:
text: "HELLO..."
Label:
text: "WORLD..."
BoxLayout:
size_hint: 1, 0.25
canvas.before:
Color:
rgba: 0, 0, 1, 1
Rectangle:
size: self.size
pos: self.pos
Label:
text: "FOOTER"
"""))
Вывод: метод 1 - нет AnchorLayout
с
AnchorLayouts">
Метод 2 - BoxLayout
как root
main.py
from kivy.base import runTouchApp
from kivy.lang import Builder
runTouchApp(Builder.load_string("""
BoxLayout:
orientation: 'vertical'
AnchorLayout:
size_hint: 1, 0.75
anchor_x: 'left'
anchor_y: 'top'
GridLayout:
size_hint: 0.2, 1
canvas.before:
Color:
rgba: 1, 0, 0, 1
Rectangle:
size: self.size
pos: self.pos
cols: 3
row_force_default: True
row_default_height: 40
Button:
text: "X"
Button:
text: "X"
Button:
text: "X"
Button:
text: "X"
Button:
text: "X"
Button:
text: "X"
AnchorLayout:
anchor_x: 'right'
anchor_y: 'top'
BoxLayout:
orientation: 'vertical'
size_hint: 0.8, 1
canvas.before:
Color:
rgba: 0, 1, 0, 1
Rectangle:
size: self.size
pos: self.pos
Label:
text: "HELLO..."
Label:
text: "WORLD..."
AnchorLayout:
size_hint: 1, 0.25
anchor_x: 'left'
anchor_y: 'bottom'
canvas.before:
Color:
rgba: 0, 0, 1, 1
Rectangle:
size: self.size
pos: self.pos
Label:
text: "FOOTER"
"""))
Вывод: метод 2 - BoxLayout
как root
BoxLayout as root">