我目前正在创建一个非常简单的 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/