zxwuo9 2019-06-15 09:09 采纳率: 0%
浏览 1329
已采纳

Python kivy GridLayout 布局问题

小白初学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()

以上代码实现的效果如下,我需要把第三行移动到最下边:
如图,如何能把红框位置的按钮移动到最下面

**回复 liujianchen_linux 的意见,去掉size_hint_y=None运行后height命令不起作用**

  • 写回答

2条回答 默认 最新

  • zxwuo9 2019-06-18 19:09
    关注

    研究了好几天终于把这个问题给解决了,使用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()
    

    以上代码运行结果如下:
    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器