Python 如何在kivy中设置栅格布局的位置(x,y坐标)?

Python 如何在kivy中设置栅格布局的位置(x,y坐标)?,python,layout,button,grid,kivy,Python,Layout,Button,Grid,Kivy,我注意到,在Kivy中使用网格布局制作按钮时,它们是在(0,0)处创建的,并根据以前按钮的长度和宽度在多个空间上移动。 但是,我希望在屏幕的底部有一个3x4网格。 到目前为止,我有: 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):

我注意到,在Kivy中使用网格布局制作按钮时,它们是在(0,0)处创建的,并根据以前按钮的长度和宽度在多个空间上移动。 但是,我希望在屏幕的底部有一个3x4网格。

到目前为止,我有:

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()
那么,我该如何改变立场呢

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()
使用kv lang:的相同代码:

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
[Butt@Button]
    # 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()
导入kivy
从kivy.uix.gridlayout导入gridlayout
从kivy.app导入应用程序
从kivy.lang导入生成器
Builder.load_字符串(“”)
#按钮类型的模板
[Butt@Button]
#ctx.“属性_名称”用于访问
#在Butt实例中定义的属性。
文本:ctx.text
#以下变量对于每个对接实例都是常量
大小提示:无
宽度:100
:
科尔斯:3
行\强制\默认值:True
行\默认\高度:50
位置提示:{'center_x':.5}
大小提示:(无,无)
#只要最小_大小为,大小就会更新。
尺寸:自身最小尺寸
#每当高度增加时,顶部都会更新。
顶部:自我高度
烟蒂:
正文:“1”
烟蒂:
正文:“2”
烟蒂:
正文:“3”
烟蒂:
正文:“4”
烟蒂:
正文:“5”
烟蒂:
正文:“2”
烟蒂:
正文:“6”
烟蒂:
正文:“7”
烟蒂:
正文:“8”
烟蒂:
正文:“9”
烟蒂:
文本:“0”
烟蒂:
文本:“输入”
''')
类CalcApp(应用程序、网格布局):
def生成(自):
回归自我
CalcApp().run()
使用kv lang:的相同代码:

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
[Butt@Button]
    # 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()
导入kivy
从kivy.uix.gridlayout导入gridlayout
从kivy.app导入应用程序
从kivy.lang导入生成器
Builder.load_字符串(“”)
#按钮类型的模板
[Butt@Button]
#ctx.“属性_名称”用于访问
#在Butt实例中定义的属性。
文本:ctx.text
#以下变量对于每个对接实例都是常量
大小提示:无
宽度:100
:
科尔斯:3
行\强制\默认值:True
行\默认\高度:50
位置提示:{'center_x':.5}
大小提示:(无,无)
#只要最小_大小为,大小就会更新。
尺寸:自身最小尺寸
#每当高度增加时,顶部都会更新。
顶部:自我高度
烟蒂:
正文:“1”
烟蒂:
正文:“2”
烟蒂:
正文:“3”
烟蒂:
正文:“4”
烟蒂:
正文:“5”
烟蒂:
正文:“2”
烟蒂:
正文:“6”
烟蒂:
正文:“7”
烟蒂:
正文:“8”
烟蒂:
正文:“9”
烟蒂:
文本:“0”
烟蒂:
文本:“输入”
''')
类CalcApp(应用程序、网格布局):
def生成(自):
回归自我
CalcApp().run()

谢谢,效果很好。我想补充一点,你在某种意义上是一个“英雄”,因为我认为这个问题已经过时了。此外,感谢您还添加了kv代码。这是我接触到的第一点,如果我计划广泛地与Kivy合作,我计划研究Kivy语言。谢谢,这非常有效。我想补充一点,你在某种意义上是一个“英雄”,因为我认为这个问题已经过时了。此外,感谢您还添加了kv代码。这是我接触到的第一点,如果我计划广泛使用Kivy,我计划研究Kivy语言。我更喜欢使用kvlang,而不是使用这么多的add_小部件。当有人看到这段代码时,它确实看起来很奇怪。我更喜欢使用kvlang,而不是使用如此多的add_小部件。当有人看到这个代码时,它看起来确实很奇怪。