Как я могу ссылаться на идентификатор в add_widget () - PullRequest
0 голосов
/ 01 марта 2020

У меня есть собственный класс, подобный этому,

in.kv,

<ProductButton>:
    BoxLayout:
        orientation: "horizontal"
        padding: 10, 10, 10, 10 
        Image:
            id: image1
            source: 
        BoxLayout:
            orientation: "vertical"
            padding: 20, 20, 20, 20 
            Label:
                id: label1
                text: 
            Label:
                id: label2
                text: 

В .py я собираюсь добавить ProductButton на экран.

class ProductButton(ButtonBehavior, BoxLayout):
    pass

class ProductPage(Screen):
    def on_pre_enter(self, *args):
        global real_result

        for x in range(len(real_result)):
            self.ids.box.add_widget(ProductButton())

Я хочу изменить изображение и текст надписей в соответствии с различными x, и мне не удалось. Я попытался self.ids.box.add_widget(ProductButton(self.ids.image1.source="123.png")), и я получил ошибку keyword can't be an expression

Я также попытался

product_button = ProductButton()
image1 = product_button.ids.image1.source
for x in range(len(real_result)):
    self.ids.box.add_widget(ProductButton(image1="123.png"))

, и я получил TypeError: object.__init__() takes exactly one argument (the instance to initialize)

Я хочу изменить изображение и тексты, ссылаясь на идентификаторы в .py файле. Как?

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Вы должны знать, как работают классы, чтобы правильно использовать Kivy. Вы пытались отправить аргументы в конструктор класса, который вы не определили. Попробуйте это:

class ProductPage(Screen):
    def on_pre_enter(self, *args):
        global real_result

        for x in range(len(real_result)):
            self.productbutton = ProductButton()
            self.productbutton.ids.image1.source="123.png"
            self.ids.box.add_widget(self.productbutton)
0 голосов
/ 01 марта 2020

Я пробовал self.ids.box.add_widget(ProductButton(self.ids.image1.source="123.png")), и я получил ошибку: ключевое слово не может быть выражением

Это простая синтаксическая ошибка Python: ключевые слова не могут быть python выражений типа self.ids.image1.source.

self.ids.box.add_widget(ProductButton(image1="123.png"))

, и я получил TypeError: object. init () принимает ровно один аргумент (экземпляр для initialize)

Вероятно, это связано с тем, что ваш класс ничего не делает с аргументом ключевого слова image1, и поэтому передает его вызову super, который в конечном итоге завершается с ошибкой, когда он достигает верхний уровень object, который не ожидает аргумента с таким именем.

Звучит так, как будто вы хотите установить источник идентификатора image1 в вашей новой ProductButton. Сделайте что-то вроде your_object = ProductButton(); your_object.ids.image1.source = "123.png".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...