Проблема - дизайн по центру
Дизайн размещен в центре.
первопричина
Корнем является AnchorLayout со значением 'center'
для anchor_x
и anchor_y
. Поэтому все его дочерние элементы (AnchorLayout
s) расположены относительно корня.
Ниже приведен вид вашего дизайна в различных цветах для визуализации.
![Design - canvas painted](https://i.stack.imgur.com/8VbEB.png)
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">