簡體   English   中英

Kivy RelativeLayout與FloatLayout

[英]Kivy RelativeLayout vs FloatLayout

這是來自Kivy相對布局的文檔。 https://kivy.org/docs/api-kivy.uix.relativelayout.html

相對布局:此布局允許您設置子項的相對坐標。 如果要絕對定位,請使用FloatLayout。 RelativeLayout類的行為與常規FloatLayout相同,不同之處在於其子窗口小部件相對於布局定位。 將position =(0,0)的窗口小部件添加到RelativeLayout時,當更改RelativeLayout的位置時,子窗口小部件也將移動。 子窗口小部件的坐標始終為(0,0),因為它們始終相對於父布局。

我看到Floatlayout也一樣。 實際上,取決於使用pos_hint還是pos,Floatlayout和RelativeLayout都支持絕對和相對定位。

同樣在現實中,無論絕對位置和相對位置如何,當布局的位置更改時都將移動小部件。

FloatLayout :此布局使用具有size_hint和pos_hint屬性的比例坐標來組織小部件。 值是介於0和1之間的數字,表示與窗口大小成比例。

在此處輸入圖片說明

在此處輸入圖片說明

相對布局 :此布局的操作方式與FloatLayout相同,但是定位屬性(pos,x,center_x,right,y,center_y和top)與Layout大小有關,而不與窗口大小有關。

可用的pos_hint鍵(x,center_x,right,y,center_y和top)對於對齊邊緣或居中很有用。 例如,pos_hint:{'center_x':。5,'center_y':。5}將使窗口小部件在中間對齊,而不管窗口的大小如何。

請參閱下面的python程序。 FloatVerification和RelativeVerification類在窗口大小和布局大小方面的行為均相同。 我想掌握一些方面嗎?

from kivy.app import App 

from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.relativelayout import RelativeLayout

from kivy.uix.button import Button

class FloatVerification(App):
    def build(self):
        bl  = BoxLayout()

        fl1 = FloatLayout()
        fl2 = FloatLayout()


        b1 = Button(size_hint=(.5,.5),
                    pos_hint={'top':.5,'right':.5},
                    text="Hello")
        b2 = Button(size_hint=(.5,.5),
                    pos_hint={'top':.5,'right':.5},
                    text="Hello")

        fl1.add_widget(b1)
        fl2.add_widget(b2)

        bl.add_widget(fl1)
        bl.add_widget(fl2)

        return bl

class RelativeVerification(App):
    def build(self):
        bl  = BoxLayout()

        rl1 = RelativeLayout()
        rl2 = RelativeLayout()


        b1 = Button(size_hint=(.5,.5),
                    pos_hint={'top':.5,'right':.5},
                    text="Hello")
        b2 = Button(size_hint=(.5,.5),
                    pos_hint={'top':.5,'right':.5},
                    text="Hello")

        rl1.add_widget(b1)
        rl2.add_widget(b2)

        bl.add_widget(rl1)
        bl.add_widget(rl2)

        return bl

if __name__  == "__main__":
    FloatVerification().run()
    #RelativeVerification().run()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM