Python 2.7 将图像放在Kivy标签的中间

Python 2.7 将图像放在Kivy标签的中间,python-2.7,kivy,Python 2.7,Kivy,我有以下Kivy语言文件,它应该模仿拨号程序。此外,在中间的数字下,它应该显示一个图标(红色矩形)。然而,在我的实现中,父对象、自对象和根对象似乎都具有相同的属性。我的代码出了什么问题?有更好的方法吗 # File name: dialer.kv #:kivy 1.9.0 <Button>: color: .8,.9,0,.65 font_size: 32 <MyGridLayout>: rows: 3 spacing: 10

我有以下
Kivy
语言文件,它应该模仿拨号程序。此外,在中间的数字下,它应该显示一个图标(红色矩形)。然而,在我的实现中,
父对象
自对象
根对象似乎都具有相同的属性。我的代码出了什么问题?有更好的方法吗

# File name: dialer.kv 
#:kivy 1.9.0
<Button>:
    color: .8,.9,0,.65
    font_size: 32

<MyGridLayout>:
    rows: 3
    spacing: 10
    GridLayout:
        rows: 1
        size_hint_y: .40
        Label:            
            text: '12345678901231234567890'
            size: self.texture_size
            text_size: root.width, None
            font_size: 44
            halign: 'center'
            valign: 'middle'
            canvas.before:
                Rectangle:
                    pos: self.parent.center_x - self.width / 2, self.parent.center_y - self.height / 2
                    source: 'bg.png'
    GridLayout:
        cols: 3
        rows: 4
        size_hint_y: .50
        spacing: 10
        Button:
            text: '1'
        Button:
            text: '2'
        Button:
            text: '3'
        Button:
            text: '4'
        Button:
            text: '5'
        Button:
            text: '6'
        Button:
            text: '7'
        Button:
            text: '8'
        Button:
            text: '9'
        Button:
            text: '*'
        Button:
            text: '0'
        Button:
            text: '#'
    GridLayout:
        cols: 2
        size_hint_y: .10
        spacing: 10
        Button:
            text: 'Clear'
        Button:
            text: 'Dial'

self
在画布中使用的变量说明引用的是封闭的小部件类(在本例中是一个标签),而不是像
矩形那样的
顶点指令。在您的代码中,
self.parent.center_x
实际上是
GridLayout
的中心,
self.width
是标签宽度。为了把你的图像放在标签的中间,你可以手动计算位置:

<MyGridLayout>:
    rows: 3
    spacing: 10
    GridLayout:
        rows: 1
        size_hint_y: .40
        Label:            
            # ...

            canvas.before:
                Rectangle:
                    pos: self.center_x - 50, self.center_y - 50 # default size is 100x100       
                    source: 'test.png' 

    # ...
:
行数:3
间距:10
网格布局:
行数:1
尺寸提示:40
标签:
# ...
在以下情况之前:
矩形:
位置:self.center_x-50,self.center_y-50,默认大小为100x100
来源:“test.png”
# ...
您还可以按如下方式使用图像小部件:

<MyGridLayout>:
    rows: 3
    spacing: 10
    GridLayout:
        rows: 1
        size_hint_y: .40
        Label:            
            # ...

            Image:
                center: self.parent.center
                source: 'test.png'               

    # ...
:
行数:3
间距:10
网格布局:
行数:1
尺寸提示:40
标签:
# ...
图片:
中心:self.parent.center
来源:“test.png”
# ...
Image
是一个小部件,因此现在
self
引用它和
self。parent
引用
标签
,我们可以使用
center
属性自动计算位置

<MyGridLayout>:
    rows: 3
    spacing: 10
    GridLayout:
        rows: 1
        size_hint_y: .40
        Label:            
            # ...

            Image:
                center: self.parent.center
                source: 'test.png'               

    # ...