python - 在Kivy的GridLayout中设置网格列宽度?

标签 python kivy grid-layout

我目前正在创建一个非常简单的 GUI 应用程序,它需要左侧的几个按钮(在窄 Pane 中)和右侧的 matplotlib 图表(较宽的 Pane )。我对 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()

由于按钮是左 Pane 中唯一需要放置的内容,因此我认为调整所有按钮的大小可能会缩小整个 Pane 的范围,但事实并非如此。有没有办法做到这一点,或者 GridLayout 中的单元格总是必须具有相同的大小,无论如何?如果是这样,Kivy 中是否有类似的布局允许进行此类更改?

最佳答案

您应该设置 GridLayout 子项的 size_hint 属性。在这种情况下,您需要更改 inLayout 对象,它是 layout 实例的第一个子对象。要让按钮始终调整为可用空间宽度的 0.2 倍,请将其设置为 (0.2, 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, size_hint=(0.2, 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()

要获得固定大小宽度,请将 size_hint 设置为 (None, 1) 并设置“width”属性:

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()

关于python - 在Kivy的GridLayout中设置网格列宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41645290/

相关文章:

python - 如何使用 django orm 将数据插入到多个表中

python - 在Kivy中独立移动多个Widget

html - 如何将 calc() 与最小内容一起使用?

html - CSS 网格布局中重叠的行

CSS - 使元素从上一行的中间开始

python - 一起添加字典

Python 删除列表中的重复项和 1==1.0 True

python - 播放视频后如何更改kivy中的当前屏幕

android - 在 Kivy 中引用另一个类的函数

python - 无法使用docker run命令运行docker镜像