关于我询问有关背景画布here的问题后,为了制作一个描述here的嵌套布局,我有一个AnchorLayout背景,我将相对布局嵌套在一起形成一个边距固定尺寸的内部浮子。
但是,我的嵌套小部件并不是在我的AnchorLayout中居中,尽管这两者都是锚布局的default behavior,并且也是显式声明的。为什么会这样?我的代码在这里:
#!/usr/bin/kivy
import kivy
kivy.require('1.7.2')
from random import random
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.relativelayout import RelativeLayout
from kivy.graphics import Color, Ellipse, Rectangle
class MinimalApp(App):
title = 'My App'
def build(self):
root = RootLayout()
return(root)
class RootLayout(AnchorLayout):
pass
class Junk(RelativeLayout):
pass
if __name__ == '__main__':
MinimalApp().run()
和kv文件:
#:kivy 1.7.2
#:import kivy kivy
<RootLayout>:
anchor_x: 'center' # I think this /is/ centered
anchor_y: 'center'
canvas.before:
Color:
rgba: 0.4, 0.4, 0.4, 1
Rectangle:
pos: self.pos
size: self.size
Junk:
anchor_x: 'center' # this is /not/ centered.
anchor_y: 'center'
Label:
text: unicode(self.center) # this /is/ appearing
color: 1,0,1,1
canvas.before:
Color:
rgba: 0.94, 0.94, 0.94, 1
Rectangle:
size: 400,400 # this is /not/ centered
Label:
text: unicode(self.size) # this is /not/ appearing
color: 1,0,0,1
答案 0 :(得分:3)
Rectangle:
size: 400,400 # this is /not/ centered
Label:
text: unicode(self.size) # this is /not/ appearing
color: 1,0,0,1
Rectangle是VertexInstruction,而不是widget。 VertexInstructions是他们自己的东西,并没有按布局调整大小或定位。如果您希望它们具有(例如)其父窗口小部件的大小和位置,则必须显式设置它,就像对早期正确显示的Rectangle一样。
edit:同样,canvas不是一个小部件,但是指的是作为小部件属性的canvas对象。您无法在其中添加小部件,只能使用图形说明。
对于未出现的Label,这是因为VertexInstructions不能像小部件那样拥有子级,因此您的kv语言定义没有意义。我很惊讶它没有抛出错误,我想它只是默默地失败了。