I would like to do that:
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 dataclasses import dataclass
class MyGrid(GridLayout):
def __init__(self, **kwargs):
super.(MyGrid,self).__init__(**kwargs)
self.cols = 2
self.add_widget(Label(text="Pseudo: "))
self.pseudo = TextInput(multiline=False)
self.add_widget(self.pseudo)
class MyApp(App):
def build(self):
return MyGrid()
if __name__ == "__main__":
MyApp().run()
but with dataclasses. I have made several searches but didn't find anything.
Thanks to @JohnAnderson advices, I tried that:
@dataclass
class MyGrid(GridLayout):
pass
@dataclass
class MyApp(App):
def build(self):
root = MyGrid()
root.cols = 2
pseudo = TextInput(multiline=False)
root.add_widget(Label(text="Pseudo: "))
root.add_widget(pseudo)
return root
if __name__ == "__main__":
MyApp().run()
but I get this error:
File AppData\Local\Programs\Python\Python310\lib\site-packages\kivy\app.py", line 921, in _run_prepare
if not self.built:
AttributeError: 'MyApp' object has no attribute 'built'. Did you mean: 'build'?
These add_widget methods came from GridLayout of Kivy.
Someone could help to do this with dataclasses? Thanks in advance.
Here is a simple way to do what you want:
class MyApp(App):
def build(self):
root = MyGrid()
root.cols = 2
pseudo = TextInput(multiline=False)
root.add_widget(Label(text="Pseudo: "))
root.add_widget(pseudo)
return root