AnchorLayout不以Kivy为中心

时间:2013-12-08 23:01:52

标签: python layout user-interface kivy

关于我询问有关背景画布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

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语言定义没有意义。我很惊讶它没有抛出错误,我想它只是默默地失败了。