Выдает ошибку "TypeError: object.__init__() takes exactly one argument (the instance to initialize)" когда хочу задать ID для каждой кнопки
Хочу для каждой новой кнопки изменять динамически айди, но выдают такую ошибку:
29: on_parent: for i in range(root.len_files): self.add_widget(Button(text = root.list_files[i], size_hint_y=None, height=200, on_press=lambda x:root.direct(), id=str(i)))
30:
31:
...
TypeError: object.__init__() takes exactly one argument (the instance to initialize)
on_parent: for i in range(root.len_files): self.add_widget(Button(text = root.list_files[i], size_hint_y=None, height=200, on_press=lambda x:root.direct(), id=str(i)))
Вот минимальный пример: .py
import kivy
import os
import os.path as path
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.widget import Widget
from kivy.uix.scrollview import ScrollView
from kivy.properties import StringProperty
from kivy.uix.button import Button
Builder.load_file("stackoverflow.kv")
class Main(Screen):
ex="p"
pus=StringProperty(ex)
def direct(self):
self.pus="b"
sm=ScreenManager()
sm.add_widget(Main(name="main"))
class SaveApp(App):
def build(self):
return sm
if __name__ == "__main__":
SaveApp().run()
.kv
#:import Button kivy.uix.button.Button
<Main>:
BoxLayout:
orientation: "vertical"
BoxLayout:
orientation: "horizontal"
size_hint_y: .1
Button:
size_hint_x: .25
text:"5"
on_press: root.direct()
Label:
text: root.pus
ScrollView:
id: "scroll"
do_scroll_x: False
do_scroll_y: True
GridLayout:
cols: 1
size_hint_y:None
height: self.minimum_height
on_parent: for i in range(5): self.add_widget(Button(text = str(i), size_hint_y=None, height=200, on_press=lambda x:root.direct(), id = str(i)))
Источник: Stack Overflow на русском