Python Kivy浮动布局

2024-09-29 01:37:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

它产生以下输出:

enter image description here

我们试图实现的目标是:

  • 飞盒的高度应该是游戏区域高度的1/3。在
  • 飞盒的宽度应该与游戏区域的宽度相同。在
  • FlyBox的x坐标应该是0,y坐标应该是游戏区域高度的1/3。在

也就是说,如果游戏区域被分成3个大小相等的水平带,那么FlyBox应该是中间带。而随着游戏区域大小的变化(由于窗口大小的改变),飞盒的大小和位置也会相应地发生变化。在

我们试图避免使用.kv文件,而是使用Python执行所有操作。在


Tags: fromimportaddapp游戏区域高度pass
1条回答
网友
1楼 · 发布于 2024-09-29 01:37:36

您只需要使用size_hint_y属性来设置正确的高度(父级高度的1/3)和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()

enter image description here

相关问题 更多 >