我试图使用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()
答案 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_hint
和BoxLayout
的{{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