Kivy中的图像尺寸错误

时间:2014-11-03 03:49:36

标签: python kivy

我试图使用Kivy来显示背景图像,所以我希望根小部件与图像的大小相同。目前,当我从kv文件加载图像时,它在左下角显示为一个小缩略图。应用程序窗口似乎是正确的(满量程)大小,但很难说。代码如下,有什么想法吗?

.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()

3 个答案:

答案 0 :(得分:2)

BarBot_splash只是一个小部件,所以它不会对其子节点应用任何位置或大小,因此boxlayout(以及它的子图像)只有默认位置(0,0)和大小(100, 100)。

将BarBot_splash更改为BoxLayout或其他调整大小布局,这将正确传播。你也不需要size: image.size行,这什么都不做。

答案 1 :(得分:2)

在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

<强> KV:

#:kivy 1.8.0

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

这应该可以解决问题。 BoxLayout应占用窗口。它的一个孩子Image应该占据BoxLayout的全部尺寸。为什么?好吧,有人纠正我,如果我错了,但我认为这是因为size_hintBoxLayout的{​​{1}}属性都默认为{{1} },转换为:&#34;尽可能多地占用父母的空间&#34;或(100%宽度,100%高度)。虽然如果父母中还有其他孩子,孩子可能无法占用其所有父母区域,例如Image中有(1, 1)Image ,或者您的应用中的多个BoxLayout等。将size_hint设置为BoxLayout意味着占用您父级/容器的宽度(高度的50%,高度的30%)或可用空间。

答案 2 :(得分:0)

显然是一个很老的问题,但是我是Kivy的新手,只需要解决一个非常类似的问题,并且在该主题上的帮助很少,所以这适用于像我这样的未来人:

我遇到了同样的问题,但是图像也位于散布小部件中。解决方案真的很简单,只是令人沮丧地找到了。层次结构必须如下:

BoxLayout:
    Scatter:
        size: image.size
        Image:
            id: image
            size: root.size