Kivy .KV файл передавая аргумент - PullRequest
0 голосов
/ 09 апреля 2020

ОК, поэтому я хочу иметь FloorWidget с возможностью динамического добавления комнат нажатием кнопки во время работы приложения. Я хочу загрузить speci c graphi c в зависимости от номера комнаты и не знаю, как этого добиться в файле .kv

<RoomWidget>:
    id: room_widget
    room_num: # would be great if you could pass this as an argument
    Image:
        source: os.path.join(GRAPHICS_DIR_PATH, "room" + str(room_widget.room_num))

Есть ли способ сделать это? Можно ли как-то инициализировать room_num в файле python, передав его в конструктор RoomWidget и получить доступ к нему в файле .kv?

class RoomWidget(Screen, Widget):
    def __init__(self, room_num, **kwargs):
        super().__init__(**kwargs)
        self.room_num = room_num

<RoomWidget>:
    size_hint: (.2, .35)
    source: os.path.join(GRAPHICS_DIR_PATH, "room" + str(self.room_num))
    Image:
        source: source

Если я сделаю что-то подобное, я получу ошибку: AttributeError: 'RoomWidget' У объекта нет атрибута room_num.

1 Ответ

0 голосов
/ 09 апреля 2020

Вы можете сделать это, сделав property из RoomWidget Примерно так:

class RoomWidget(Screen):
    room_num = NumericProperty()

    def __init__(self, room_num, **kwargs):
        super().__init__(**kwargs)
        self.room_num = room_num

Затем в вашем 'kv':

#:import os os
#:set GRAPHICS_DIR_PATH '.'
<RoomWidget>:
    size_hint: (.2, .35)
    source: os.path.join(GRAPHICS_DIR_PATH, "room" + str(self.room_num) + '.png')
    Image:
        source: root.source

Обратите внимание, что вы делаете не нужно расширять Screen и Widget, потому что Screen является Widget.

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