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 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python