【问题标题】:Python Kivy Float LayoutPython Kivy 浮动布局
【发布时间】:2017-07-19 19:21:43
【问题描述】:

我对 Python 和 Kivy 的经验很少。我正在帮助我的小侄子使用这两者来构建游戏。我们被困在看似简单的事情上。

考虑以下代码:

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 执行所有操作。

【问题讨论】:

    标签: python python-3.x kivy


    【解决方案1】:

    您只需要使用size_hint_y 属性设置正确的高度(父高度的1/3)和pos_hint 属性将其定位在中心。

    使用 kivy 语言:

    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()
    

    输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多