2013-12-09 16 views
8

Tôi đang cố gắng căn giữa vòng tròn bên trong bố cục. Tôi hiện đang làm một số tính toán đệm, nhưng tôi cũng đang tìm kiếm một cách tốt hơn, và tưởng tượng một trong những bố trí được xác định trước có thể là một lựa chọn tốt hơn. Đây là những gì mã của tôi được sản xuất ...Định tâm một đối tượng trong Kivy

Đối với bố trí vuông:

enter image description here

Đối với bố trí rộng:

enter image description here

Vì vậy, đây là hành vi đúng, đó là rất tốt . Nhưng có cách nào tốt hơn không? (Tôi có thể tưởng tượng này nhận được lộn xộn với hình dạng không tròn, ví dụ.)

Dưới đây là mã của tôi:

#!/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() 

Và KV:

#: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 

Trả lời

4

Snippet sử dụng FloatLayout, size_hintpos_hint :

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

Cờ của Nhật Bản:

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() 
Các vấn đề liên quan