You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy GridLayout警告:未设置cols/rows致布局失效,界面显示异常

解决Kivy GridLayout布局错乱与警告问题

首先看你收到的警告提示——这就是布局错乱的核心原因:你的外层Mylays(继承自GridLayout)没有设置cols或rows属性,Kivy不知道怎么排列它的子组件(也就是top_grid和按钮),所以直接跳过了布局计算,导致只有按钮能显示出来。另外你的嵌套top_grid也没明确设置列数,虽然代码里写了self.cols=2,但那是给外层Mylays设置的,不是给top_grid的,这也是个小错误。

下面是修复后的完整代码,我标注了关键修改点:

import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button

class Mylays(GridLayout):
    def __init__(self,**kwargs):
        super(Mylays,self).__init__(**kwargs)
        # 修改1:给外层GridLayout设置列数为1,让子组件垂直排列
        self.cols = 1
        self.top_grid = GridLayout() 
        # 修改2:给嵌套的top_grid设置列数为2,实现标签和输入框左右对齐
        self.top_grid.cols = 2 
        self.top_grid.add_widget(Label(text="Name : ",font_size=20))
        self.name = TextInput(multiline=False)
        self.top_grid.add_widget(self.name)
        self.top_grid.add_widget(Label(text="Class :", font_size=20))
        self.hisclass = TextInput(multiline=False)
        self.top_grid.add_widget(self.hisclass)
        self.top_grid.add_widget(Label(text="Lang:", font_size=20))
        self.lang = TextInput(multiline=False)
        self.top_grid.add_widget(self.lang)
        self.add_widget(self.top_grid)
        self.click = Button(text="Boom!",font_size=25)
        self.click.bind(on_press=self.buttonfunction)
        self.add_widget(self.click)

    def buttonfunction(self, instance):
        name = self.name.text
        CLASs = self.hisclass.text
        langu = self.lang.text
        x = "Hi {0}, I know you are from {1}. I also like {2} Language.".format(name,CLASs,langu)
        self.add_widget(Label(text=x, font_size=18))
        self.name.text = ""
        self.hisclass.text = ""
        self.lang.text = ""

class firstapp(App):
    def build(self):
        return Mylays()

if __name__ == "__main__":
    firstapp().run()

关键修改说明:

  • 外层Mylays设置self.cols=1:这样它的子组件(top_grid和按钮)会按垂直方向排列,一行一个,解决了布局不触发的警告,同时让界面结构清晰。
  • 嵌套top_grid设置self.top_grid.cols=2:原来你写的self.cols=2是给外层布局设置的,现在修正为给top_grid设置,这样标签和输入框就能左右成对显示了。
  • 额外调整了一些文本格式(比如Class的大小写、字体大小),让界面更美观,但这不是必须的。

现在运行代码,你会看到姓名、年级、语言的输入框和标签都正常排列,点击按钮后也会在下方显示问候语,布局完全正常,警告也会消失。

内容的提问来源于stack exchange,提问作者redtrib3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:20:43