Создавать виджеты на основе пользовательского ввода в файле .kv - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу попросить пользователя ввести число, а затем отобразить это количество виджетов.

Вот как я это делаю:

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout


class MainApp(App):

    def build(self):
        return List()


class List(GridLayout):

    def __init__(self, **kwargs):
        super(List, self).__init__(**kwargs)

        self.cols = 1


        user_input = 3 # Just an example
        for i in range(user_input):
            label = Label(text="Widget number {}:".format(i + 1))
            self.add_widget(label)


if __name__ == "__main__":

    app = MainApp()
    app.run()

Проблема в следующем: смысл "kivy language" заключается в сохранении логики c в файле .py, а дизайна в файле .kv.

Есть ли способ сохранить дизайн только в файле .kv, при этом (имея for l oop)?

(я новичок в kivy, извините, если задаю простой вопрос. :))

1 Ответ

1 голос
/ 28 апреля 2020

Определенно, вы можете.

Файл KV используется в основном для разработки внешнего вида, в то время как входная часть программы обрабатывается файлом PY.

.kv файл

<classname>:
    Button:
        text:'click me'
        on_release: root.function_to_call_from_py_file()

.py файл

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout


class List(GridLayout):

    def function_to_call_from_py_file(self):
        print('This function is called')


class MainApp(App):
    def build(self):
        return List()



if __name__ == "__main__":

    app = MainApp()
    app.run()
...