GridLayout 定位错误

GridLayout wrong positioning

我有我的简单 python 代码:

import kivy
kivy.require('1.11.1')
from kivy.app import App
from kivy.config import Config
from kivy.core.window import Window
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.uix.relativelayout import RelativeLayout


Builder.load_file('Matrixkivy.kv') 
 
class MyLayout(Widget):
    pass

class MatrixCalc(App):
    def build(self):
        return MyLayout()

if __name__ == '__main__':
    MatrixCalc().run()

以及简单的 .kv 代码:

<MyLayout>
    GridLayout:
        size_hint: root.width, root.height
        Button:
            text: "Button1"
        Button:
            text: "Button2"
            
        

我想要一个 GridLayout,它的大小与整个应用程序一样大,还有两个按钮,它们都占据了它的一半。但是,应用程序会在左下角显示应用程序包含的所有内容。如何解决?

主要问题是您使用基础 Widget class 作为容器。你可以这样做,但是 Layout classes 已经有了处理 size_hintpos_hint 之类的代码。您的代码的一种修复方法是替换:

class MyLayout(Widget):
    pass

与:

class MyLayout(FloatLayout):
    pass

您还应该删除以下行:

size_hint: root.width, root.height

Size_hint 值通常应该是 0-1 范围内的数字。并为 GridLayout 添加定义 rowscols 的行,因此您的 kv 看起来像:

<MyLayout>
    GridLayout:
        cols: 1
        Button:
            text: "Button1"
        Button:
            text: "Button2"

因为你正在使用 GridLayout 作为 MyLayout 的子级,你可以让 MyLayout 扩展 GridLayout,然后你可以消除 GridLayout 行来自你的 kv。使用这种方法,您的 MyLayout class 将如下所示:

class MyLayout(GridLayout):
    pass

和对应的kv:

<MyLayout>
    cols: 1
    Button:
        text: "Button1"
    Button:
        text: "Button2"