繁体   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