1. ホーム
  2. python

[解決済み] kivyのFloatLayoutでpos_hintを使用するには?

2022-02-28 09:30:01

質問

私はテストUIでラベルとボタンを整列させようとしています これは私の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

を使用して、ラベル foo、boo、bar を作成することができます。 ポーズ しかし ポイズンヒント は空白の出力を返しますか?

解決方法は?

ラベルのテキストが画面外にある(ラベル自体が透明である)ため、"blank" が出力されています。

  1. あなたのレイアウトは <test> には size_hint であるため のデフォルトは (1,1) のサイズになります。 Window (である)。 800 x 600 ).
  2. また、ラベルには size_hint で、デフォルトは size を持つことになります。 size [800, 600] . ラベルのテキストはデフォルトで中央に配置され、その背景は透明になっています。(サイズを視覚的に表現するために、まずボタンで試してみるといいかもしれません)
  3. このように テキスト というラベルは pos = (0,0) が画面の中央に表示されます

次に 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