簡體   English   中英

Python Kivy浮動布局

[英]Python Kivy Float Layout

我對Python和Kivy的經驗很少。 我正在幫助我的小外phe尋求使用兩者來構建游戲。 我們被看似簡單的事情所困擾。

考慮以下代碼:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty, ReferenceListProperty,\
    ObjectProperty
from kivy.vector import Vector
from kivy.clock import Clock
from random import randint
from kivy.graphics import Color, Ellipse, Rectangle
from kivy.uix.floatlayout import FloatLayout
import math

class Fly(Widget):
    pass

class Stick(Widget):
    pass

class FlyBox(Widget):
    pass

class GameArea(FloatLayout):
    pass

class FlyApp(App):
    def build(self):
        gameArea = GameArea()
        flyBox = FlyBox()
        flyBox.canvas.add(Rectangle(pos_hint={'x': 0, 'y': .3}, size_hint=(1, .3)))
        flyBox.canvas.add(Color(1, 0, 0))
        gameArea.add_widget(flyBox)
        return gameArea


if __name__ == '__main__':
    FlyApp().run()

它產生以下輸出:

在此處輸入圖片說明

我們試圖實現的目標是:

  • FlyBox的高度應為GameArea高度的1/3。
  • FlyBox的寬度應與GameArea的寬度相同。
  • FlyBox的x坐標應為0,其y坐標應為GameArea高度的1/3。

即,如果將游戲區域划分為3個相等大小的水平帶,則FlyBox應該是中間帶。 並且隨着游戲區域的大小變化(由於窗口大小的改變),FlyBox的大小和位置也應相對變化。

我們試圖避免使用.kv文件,而是使用Python做所有事情。

您只需要使用size_hint_y屬性來設置正確的高度(父高度的pos_hint ),並使用pos_hint屬性將其放置在中心。

使用kivy languaje:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder

kv_text = '''
<GameArea>:
    Widget:
        id: flybox
        size_hint_y: 1/3
        pos_hint: {'x': 0, 'center_y': .5}
        canvas.before:
            Color:
                rgba: 1,1,1,1
            Rectangle:
                pos: self.pos
                size: self.size
'''

class GameArea(FloatLayout):
    pass

class FlyApp(App):
    def build(self):
        Builder.load_string(kv_text)
        return GameArea()

if __name__ == '__main__':
    FlyApp().run()

輸出:

在此處輸入圖片說明

暫無
暫無

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

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