2013-12-09 72 views
8

我想在布局中居中放置一个圆。我目前正在做一些填充计算,但我也在寻找更好的方法,并且想象其中一个预定义的布局可能是更好的选择。下面是我的代码是生产...在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()