如何在kivy中使用带有FloatLayout的pos_hint?

时间:2017-07-14 07:31:54

标签: python kivy kivy-language

我正在尝试在我的测试用户界面中对齐标签和按钮这是我的kv文件

<test>:   

    Label:        
        text: "foo"
        color: 0,1,0,1
        #pos:120,20
        pos_hint:{"right":0.1,"top":1}
    Label:
        text:"boo"
        color: 0,0,1,1
        #pos:80,20
        pos_hint:{"right":0.1,"top":0.5}

    Label:
        text:"bar"
        color: 1,0,0,1
        #pos:20,120
        pos_hint:{"right":0.1,"top":0.1}
    Button:
        text:"goo"
        size_hint:0.1,0.1

我能够使用 pos 成功创建标签foo,boo和bar但是当我使用 pos_hint 时它会返回空白输出吗?

1 个答案:

答案 0 :(得分:4)

您将获得“空白”输出,因为标签的文本在屏幕外(并且标签本身是透明的)。

  1. 由于您的布局<test>没有size_hint所以它会占用。{li> 默认值为(1,1),使其大小为Window(即{。}} 800 x 600)。
  2. 您的标签也没有size_hint,因此默认为其父级的size - 布局,因此他们最终拥有size [800, 600]。标签中的文本默认居中,其背景是透明的。 (也许你应该首先尝试使用按钮,这样你就可以直观地表示尺寸了)
  3. 因此,带有pos = (0,0)文字标签会出现在屏幕中央
  4. 然后我们让pos_hint采用不同的论点(下面的描述可能不适用于FloatLayout以外的内容:

    pos_hint:{"right":v1,"top":v2}pos设置为(self.parent.right*v1 - self.width, self.parent.top*v2 - self.height) - 您正在设置要放置的小部件的topright。因此,您的标签会得到这样的负坐标,以至于他们的文本永远不会出现在屏幕上(因为左下角是0,0

    然后我们有pos_hint:{"x":v1,"y":v2}(您可能会发现对您的案例更有用)和pos_hint:{"center_x":v1,"center_y":v2}。您应该能够弄清楚它们是如何工作的,因为大小会影响事物的外观,因为pos只设置左下角坐标..您可以使用此.kv文件:

    #:kivy 1.0.9
    
    <test>:   
        #size: (500, 500)
        #size_hint:(None, None)
        canvas:
            Color: 
                rgb: 1,0,0
            Rectangle:
                size: (5,5)
                pos: (0,0)
    
        Widget:
            id:wig
            pos: (250,250)
            canvas:
                Color: 
                    rgb: 1,1,1
                Rectangle:
                    size: (5,5)
                    pos: self.pos
    
        Label:
            id: boo
            text:"boo"
            color: 0,0,1,1
            #size_hint:(1,1)
            pos_hint:{"center_x":1,"center_y":1}
    
        Label:
            id: foo
            text: "foo"
            color: 0,1,0,1
            #size_hint: (.6,.6)
            pos_hint:{"x":1,"y":1}
    
        Label:
            id: bar
            text:"bar"
            color: 1,0,0,1
            #size:(500,500)
            #size_hint:(None, None)
            pos_hint:{"right":1,"top":1}
            #pos:100, 10
    
    
        Button:
            text:"goo"
            size_hint:0.1,0.1
            pos:(1,1)
            #some debug info, i know the code is ugly
            on_press: print self.parent.size,'\n', self.parent.right, self.parent.top, self.parent.x, self.parent.y, self.parent.center_x, self.parent.center_y, "\n","bar_right_top:", bar.pos,"foo_x_y:", foo.pos,"boo_center:", boo.pos, "\nwhite square:", wig.pos, "\n", bar.size, foo.size, boo.size