2012-07-27 3 views
0

Kivy에서 그리드 레이아웃을 사용하여 버튼을 만들 때 이전 버튼의 길이와 너비에 따라 (0,0)으로 생성되고 여러 공백으로 이동한다는 것을 알았습니다. 그러나 화면 맨 아래 가운데에 3x4 격자가 있어야합니다. kivy에서 격자 레이아웃의 위치 (x, y 좌표)를 어떻게 설정할 수 있습니까?

나는이 지금까지 가지고

import kivy 
from kivy.uix.gridlayout import GridLayout 
from kivy.app import App 
from kivy.uix.button import Button 

class CalcApp(App): 
    def build(self): 
     layout = GridLayout(cols=3, row_force_default=True, row_default_height=50) 
     layout.add_widget(Button(text='1', size_hint_x=None, width=100)) 
     layout.add_widget(Button(text='2', size_hint_x=None, width=100)) 
     layout.add_widget(Button(text='3', size_hint_x=None, width=100)) 
     layout.add_widget(Button(text='4', size_hint_x=None, width=100)) 
     layout.add_widget(Button(text='5', size_hint_x=None, width=100)) 
     layout.add_widget(Button(text='2', size_hint_x=None, width=100)) 
     layout.add_widget(Button(text='6', size_hint_x=None, width=100)) 
     layout.add_widget(Button(text='7', size_hint_x=None, width=100)) 
     layout.add_widget(Button(text='8', size_hint_x=None, width=100)) 
     layout.add_widget(Button(text='9', size_hint_x=None, width=100)) 
     layout.add_widget(Button(text='0', size_hint_x=None, width=100)) 
     layout.add_widget(Button(text='Enter', size_hint_x=None, width=100)) 
     return layout 

CalcApp().run() 

그래서, 어떻게 위치를 이동합니까? KV를 사용하여 lang을 사용하여

+0

은 내가 kvlang를 사용하는 대신 add_widget 너무 많이 사용하여 선호 할 것입니다. 어떤 사람이이 코드를 보게되면 이상하게 보입니다. –

답변

6
import kivy 
from kivy.uix.gridlayout import GridLayout 
from kivy.app import App 
from kivy.uix.button import Button 

class CalcApp(App): 
    def build(self): 
     layout = GridLayout(cols=3, row_force_default=True, row_default_height=50, 
      pos_hint={'center_x':.5} , size_hint=(None, None)) 
      #^position grid in mid horizontally,^make grid use custom 
      # size. 
     # Bind the size of the gridlayout of to it's minimum_size(calculated 
     # by children size) 
     layout.bind(minimum_size = layout.setter('size')) 
     # bind the top of the grid to it's height' 
     layout.bind(height = layout.setter('top')) 
     for x in (1, 2, 3, 4, 5, 2, 6, 7, 8, 9, 0): 
      layout.add_widget(Button(text=str(x), size_hint_x=None, width=100)) 
     layout.add_widget(Button(text='Enter', size_hint_x=None, width=100)) 
     return layout 

CalcApp().run() 

동일한 코드 ::

import kivy 

from kivy.uix.gridlayout import GridLayout 
from kivy.app import App 
from kivy.lang import Builder 

Builder.load_string(''' 
# a template Butt of type Button 
[[email protected]] 
    # ctx.'attribute_name' is used to access the 
    # attributes defined in the instance of Butt. 
    text: ctx.text 
    # below vars are constant for every instance of Butt 
    size_hint_x: None 
    width: 100 

<CalcApp>: 
    cols: 3 
    row_force_default: True 
    row_default_height: 50 
    pos_hint: {'center_x':.5} 
    size_hint: (None, None) 
    # size is updated whenever minimum_size is. 
    size: self.minimum_size 
    # top is updated whenever height is. 
    top: self.height 
    Butt: 
     text: '1' 
    Butt: 
     text: '2' 
    Butt: 
     text: '3' 
    Butt: 
     text: '4' 
    Butt: 
     text: '5' 
    Butt: 
     text: '2' 
    Butt: 
     text: '6' 
    Butt: 
     text: '7' 
    Butt: 
     text: '8' 
    Butt: 
     text: '9' 
    Butt: 
     text: '0' 
    Butt: 
     text: 'Enter' 
''') 

class CalcApp(App, GridLayout): 

    def build(self): 
     return self 

CalcApp().run() 
+0

감사합니다. 완벽하게 작동했습니다. 그리고 나는이 질문이 죽었다고 생각했기 때문에 당신이 어떤 의미에서 '영웅'이라고 덧붙일 수 있습니다. 또한 kv 코드를 추가해 주셔서 감사합니다. 이것은 내가 처음 접했던 것입니다. Kivy와 광범위하게 협력 할 계획을 세우면 Kivy 언어를 살펴볼 계획입니다. – Stumbleine75

+0

kvlang 사용 +1 –

관련 문제