Python 在Kivy'中设置网格列宽度;什么是网格布局?

Python 在Kivy'中设置网格列宽度;什么是网格布局?,python,kivy,grid-layout,Python,Kivy,Grid Layout,我目前正在创建一个非常简单的GUI应用程序,它需要在左侧(窄窗格中)有几个按钮,在右侧(宽窗格中)有一个matplotlib图表。我对Python GUI没有经验,但我决定使用Kivy,并尝试了以下方法: from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.uix.button import Button class MyApp(App): def build(self):

我目前正在创建一个非常简单的GUI应用程序,它需要在左侧(窄窗格中)有几个按钮,在右侧(宽窗格中)有一个
matplotlib
图表。我对Python GUI没有经验,但我决定使用Kivy,并尝试了以下方法:

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

class MyApp(App):

    def build(self):
        layout = GridLayout(cols=2)
        inLayout = GridLayout(rows=3)

        inLayout.add_widget(Button(text='Function 1', width = 50))
        inLayout.add_widget(Button(text='Function 2', width = 50))
        inLayout.add_widget(Button(text='Function 3', width = 50))

        layout.add_widget(inLayout)
        layout.add_widget(Button(text='Chart pane'))

        return layout


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

由于按钮是唯一需要放在左窗格中的东西,所以我认为调整所有按钮的大小可能会缩小整个窗格,但事实并非如此。有没有办法做到这一点,或者网格布局中的单元格总是必须保持相同的大小,不管是什么?如果是这样,Kivy中是否有类似的布局允许这样的更改?

您应该设置
GridLayout
子项的
size\u hint
属性。在这种情况下,您需要更改
inLayout
对象,它是
layout
实例的第一个子对象。要使按钮始终调整为可用空间的0.2宽度,请将其设置为
(0.2,1)

要将固定大小宽度设置为
size\u hint
(无,1)
并设置“宽度”属性:

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

class MyApp(App):

    def build(self):
        layout = GridLayout(cols=2)
        inLayout = GridLayout(rows=3, width=100, size_hint=(None, 1))

        inLayout.add_widget(Button(text='Function 1'))
        inLayout.add_widget(Button(text='Function 2'))
        inLayout.add_widget(Button(text='Function 3'))

        layout.add_widget(inLayout)
        layout.add_widget(Button(text='Chart pane'))

        return layout


if __name__ == '__main__':
    MyApp().run()
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button

class MyApp(App):

    def build(self):
        layout = GridLayout(cols=2)
        inLayout = GridLayout(rows=3, width=100, size_hint=(None, 1))

        inLayout.add_widget(Button(text='Function 1'))
        inLayout.add_widget(Button(text='Function 2'))
        inLayout.add_widget(Button(text='Function 3'))

        layout.add_widget(inLayout)
        layout.add_widget(Button(text='Chart pane'))

        return layout


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