2014-11-03 5 views
3

Я пытаюсь использовать Kivy для отображения фонового изображения, поэтому я хочу, чтобы корневой виджет был того же размера, что и изображение. В настоящее время, когда я загружаю изображение из файла kv, он отображается в виде маленького миниатюры в нижнем левом углу. Окно приложения похоже на правильный (полномасштабный) размер, но трудно сказать. Код ниже, любые мысли?Изображение неправильного размера в Kivy

.kv файл:

#:kivy 1.8.0 

<BarBot_splash>: 
    BoxLayout: 
     size: image.size 

     Image: 
      id: image 
      source: 'MainMenu.png' 

.py файл:

import kivy 
kivy.require('1.8.0') 

from kivy.app import App 
from kivy.uix.widget import Widget 

class BarBot_splash(Widget): 
    def on_touch_up(self, touch): 
     if touch.x < self.width/3: 
      #we touched the menu button 
      pass 
     elif touch.x > self.width/3*2: 
      #we touched the custom button 
      pass 
     else: 
      return False 

class BarBot(App): 
    def build(self): 
     return BarBot_splash() 

if __name__=='__main__': 
    BarBot().run() 

ответ

1

В main.py:

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 

class BarBot_splash(BoxLayout): # subclass BoxLayout.. now it's inherently a Boxlayout 

киловольт:

#:kivy 1.8.0 

<BarBot_splash>: # I'm a BoxLayout... 
    Image: 
     id: image 
     source: 'MainMenu.png' 

Это должно сделать трюк. Окно должно быть занято BoxLayout. Это один ребенок, Image, должен, в свою очередь, взять полный размер BoxLayout. Зачем? Ну, кто-то поправьте меня, если я ошибаюсь, но я думаю, что это связано с тем, что свойство BoxLayout и Image оба по умолчанию равны (1, 1), что означает: «Возьмите столько места в своем родителе, сколько сможете» или (100 % ширина, высота 100%). Хотя ребенку не удастся заняться всеми родителями, если в родителе есть другие дети, например, если у вас было несколько Image s в BoxLayout или более одного BoxLayout в вашем приложении и т. Д. Установка значения size_hint на (.5, .3) означает занятие (50% ширины, 30% высоты) вашего родителя/контейнера или доступное пространство.

2

BarBot_splash просто виджет, поэтому он не применяется какой-либо позиции или размера для своих детей, поэтому BoxLayout (и, следовательно, его дочерний образ) имеют только по умолчанию (0, 0) и размер (100, 100).

Измените BarBot_splash на BoxLayout или другой макет размера, и это будет правильно распространяться. Вам также не нужна линия size: image.size, это ничего не значит.