2017-07-19 97 views
1

我對Python和Kivy很少有經驗。我正在幫助我的小侄子追求使用這兩款遊戲來製作遊戲。我們被困在看起來很簡單的事情上。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

我們試圖實現是:

  • 的FlyBox的高度應爲1/GameArea高度的3倍。
  • FlyBox的寬度應該與GameArea的寬度相同。
  • FlyBox的x座標應爲0,其y座標應爲GameArea高度的1/3。

即,如果遊戲區域被分成3個相等大小的水平條帶,FlyBox應該是中間條帶。隨着遊戲區域的大小發生變化(由於窗口的大小調整),FlyBox的大小和位置應該相對變化。

我們正試圖避免使用.kv文件,而是在Python中執行所有操作。

回答

0

您只需要使用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