Python — Kivy 1.7.2 — макет поверх изображения не выравнивается должным образом

Так что я совершенно новичок в Kivy. Некоторое время я боролся, просто чтобы изображение отображалось по центру. Насколько я понимаю, все является виджетом, и все что угодно может быть вложено под него (по большей части). Пожалуйста, поправьте меня, если это не так.

Теперь у меня есть изображение, и я хочу начать выкладывать свой пользовательский интерфейс. Хотя в нижнем левом углу все выравнивается.

import kivy
kivy.require("1.7.2")

from kivy.config import Config
Config.set('graphics', 'width', '540')
Config.set('graphics', 'height', '960')

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.image import Image
from kivy.graphics import Rectangle


class RootWidget(Widget):
  pass

class MyApp(App):

    def build(self):
        # self.root = root = RootWidget(source = "snowy_mountains.jpg")
        self.root = root = RootWidget()
        root.bind(size = self._update_rect,
                  pos = self._update_rect)
        with root.canvas.before:
          self.rect = Rectangle(size = root.size,
                                pos = root.pos)

        return root

    def _update_rect(self, instance, value):
        self.rect.pos = instance.pos
        self.rect.size = instance.size


if __name__ == "__main__":
  app = MyApp()
  app.run()

А мой .кв...

#:kivy 1.7.2

<RootWidget>:
    BoxLayout:
        orientation: "vertical"
        padding: 10
        spacing: 15
        GridLayout:
            rows: 2
            size_hint: 1, .333
            Label:
                text: "App Name"
            Label:
                text: "Some Info ..."
        GridLayout:
            cols: 2
            spacing: 15
            Button:
                text: "1"
            Button:
                text: "2"
            Button:
                text: "3"
            Button:
                text: "4"

Я проверил это через kivycatalog, и он отлично работает. Я скопировал именно то, что сделал оттуда, в свой .kv и просто вложил все это под <RootWidget> (где находится мое изображение). Я просматривал API и онлайн (не так много вкладов пользователей в kivy...) и не могу понять, почему он ведет себя таким образом. Я даже пытался использовать обычный виджет вместо подкласса изображения. Ба... Есть идеи?


person jtsmith1287    schedule 13.12.2013    source источник


Ответы (1)


Это связано с тем, что размер виджета по умолчанию в Kivy составляет 100x100 пикселей — виджет не занимает все доступное пространство автоматически. Вам нужно установить свойство size:

<RootWidget>:
    BoxLayout:
        size: root.size # this line was missing
        orientation: "vertical"
        # ...

Дополнительная информация в этом вопросе: Kivy - базовое приложение имеет странное выравнивание

person Nykakin    schedule 14.12.2013