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.
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
.