2013-12-09 11 views
8

レイアウトの中に円を中心に配置しようとしています。私は現在、いくつかのパディング計算を行っていますが、私はまた、より良い方法を探していて、あらかじめ定義されたレイアウトの1つが良い選択かもしれないと想像してください。ここに私のコードは、正方形のレイアウトのために...Kivyでオブジェクトの中心を合わせる

を生産しているものです。広いレイアウトの

enter image description here

enter image description here

ので、これは素晴らしいですが、右の行動であり、 。しかし、より良い方法がありますか? (私は、これは例えば、非円形形状で乱雑になっ想像することができます)

ここに私のコードです:

#!/usr/bin/kivy 
import kivy 
kivy.require('1.7.2') 

from random import random 
from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.anchorlayout import AnchorLayout 
from kivy.uix.relativelayout import RelativeLayout 
from kivy.graphics import Color, Ellipse, Rectangle 

class MinimalApp(App): 
    title = 'My App' 
    def build(self): 
     root = RootLayout() 
     return(root) 

class RootLayout(AnchorLayout): 
    pass 

class Circley(RelativeLayout): 
    pass 

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

そしてKV:FloatLayoutsize_hintpos_hintを使用して

#:kivy 1.7.2 
#:import kivy kivy 

<RootLayout>: 
    anchor_x: 'center'        # I think this /is/ centered 
    anchor_y: 'center' 
    canvas.before: 
     Color: 
      rgba: 0.4, 0.4, 0.4, 1 
     Rectangle: 
      pos: self.pos 
      size: self.size 
    Circley: 
     anchor_x: 'center'       # this is /not/ centered. 
     anchor_y: 'center' 
     canvas.before: 
      Color: 
       rgba: 0.94, 0.94, 0.94, 1 
      Ellipse: 
       size: min(self.size), min(self.size) 
       pos: 0.5*self.size[0] - 0.5*min(self.size), 0.5*self.size[1] - 0.5*min(self.size) 
       Label: 
        text: unicode(self.size) # this is /not/ appearing 
        color: 1,0,0,1 

答えて

4

スニペット:

from kivy.app import App 
from kivy.lang import Builder 

kv = ''' 
FloatLayout: 
    Widget: 
     size: min(root.size), min(root.size) 
     size_hint: None, None 
     pos_hint: {'center_x': .5, 'center_y': .5} 
     canvas: 
      Color: 
       rgb: 1, 0, 0 
      Ellipse:  
       size: self.size 
       pos: self.pos 
''' 
Builder.load_string(kv) 

class MyApp(App): 
    def build(self): 
     return Builder.load_string(kv) 

MyApp().run() 

日本の国旗:

from kivy.app import App 
from kivy.lang import Builder 

kv = ''' 
FloatLayout: 
    canvas: 
     Color: 
      rgb: 1, 1, 1 
     Rectangle:  
      size: self.size 
      pos: self.pos 
    Widget: 
     size: min(root.size)/2, min(root.size)/2 
     size_hint: None, None 
     pos_hint: {'center_x': .5, 'center_y': .5} 
     canvas: 
      Color: 
       rgb: 1, 0, 0 
      Ellipse:  
       size: self.size 
       pos: self.pos 
''' 
Builder.load_string(kv) 

class MyApp(App): 
    def build(self): 
     return Builder.load_string(kv) 

MyApp().run() 
関連する問題