小白初学kivy,教程中有关于 GridLayout 方面的内容,可以完成两行排列布局,但是已到第三行就会出现异常,已经弄了两天了还没整明白。
哪位大佬帮忙看看代码需要如何进行修改:
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
# from kivy.core.window import Window
class HomeScreen(GridLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.cols = 1
self.rows = 3
# 第一行合并为一列
self.add_widget(Label(text='My World', font_size=50, height=100, size_hint_y=None))
# 第二行 分开为 2 列
self.layout_1 = GridLayout(cols=2)
self.layout_1.add_widget(Button(text='Hello 1', height=220, size_hint_y=None))
self.layout_1.add_widget(Button(text='World 1'))
# 第三行
self.layout_1.add_widget(Button(text='Hello 2', height=220, size_hint_y=None))
self.layout_1.add_widget(Button(text='World 2'))
self.add_widget(self.layout_1)
# 第四行 分开为 3列
self.layout_2 = GridLayout(cols=3)
self.layout_2.add_widget(Button(text='hello', height=50, size_hint_y=None))
self.layout_2.add_widget(Button(text='world', height=50, size_hint_y=None))
self.layout_2.add_widget(Button(text='hell', height=50, size_hint_y=None))
self.add_widget(self.layout_2)
class TextApp(App):
def build(self):
return HomeScreen()
if __name__ == '__main__':
TextApp().run()
以上代码实现的效果如下,我需要把第三行移动到最下边:
研究了好几天终于把这个问题给解决了,使用size_hint_y=
命令直接定义行高就行了
界面中看似是4行,但是实际上在代码中是3行,代码中第2行、第3行是看做Gridlayout
中的一行.
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
class HomeScreen(GridLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.cols = 1
# 第一行合并为一列
layout = GridLayout(cols=1, size_hint_y=0.25)
layout.add_widget(Label(text='我的世界',font_size=40))
self.add_widget(layout)
# 第二行 分开为 2 列
layout_1 = GridLayout(cols=2)
layout_1.add_widget(Button(text='别来无恙!',font_size=30))
layout_1.add_widget(Button(text='Hello World 1',font_size=30))
# 第三行
layout_1.add_widget(Button(text='你好世界!',font_size=30))
layout_1.add_widget(Button(text='Hello World 2',font_size=30))
self.add_widget(layout_1)
# 第四行 分开为 3 列
layout_2 = GridLayout(cols=3, size_hint_y=0.15)
layout_2.add_widget(Button(text='hello',font_size=20)) # , size_hint_y=None
layout_2.add_widget(Button(text='world',font_size=20))
layout_2.add_widget(Button(text='hello',font_size=20))
self.add_widget(layout_2)
class TextApp(App):
def build(self):
return HomeScreen()
if __name__ == '__main__':
TextApp().run()