Skip to content
Advertisement

Kivy GridLayout Error : have no cols or rows set, layout is not triggered

I’m trying to make a simple app that takes name, grade, language (just for practice).

Here’s the Code:

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)
        self.top_grid = GridLayout() # Widget above main widget to hold all text and input boxes.
        self.cols = 2 # no.of columns 
        
        self.top_grid.add_widget(Label(text="Name : ",font_size=20))  # add a widget with "Name:" in it.
        self.name = TextInput(multiline=False)      # make a input box with multiline False
        self.top_grid.add_widget(self.name)                  # place the input box to widget

        self.top_grid.add_widget(Label(text="class :"))
        self.hisclass = TextInput(multiline=False)     
        self.top_grid.add_widget(self.hisclass)  

        self.top_grid.add_widget(Label(text="Lang:"))
        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},Ik you are from {1}. I also likes {2} Language .".format(name,CLASs,langu)
        self.add_widget(Label(text=x))
        self.name.text = ""
        self.hisclass.text = ""
        self.lang.text = ""

class firstapp(App):
    def build(self):
        return Mylays()
    
if __name__ == "__main__":
    firstapp().run() 

Although it runs I get the layout all wrong and just the button on the screen with following error:

[WARNING] <kivy.uix.gridlayout.GridLayout object at 0x04254108> have no cols or rows set, layout is not triggered.

Output Window image

Advertisement

Answer

You are getting that error because you are not setting cols or rows for a GridLayout. In this case, the GridLayout in question is the one created by:

self.top_grid = GridLayout()

The fix is to set cols or rows for that GridLayout. Try adding a line like:

self.top_grid.cols = 2

just after creating self.top_grid.

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement