根据用户输入在.kv文件中创建小部件

时间:2020-04-28 02:11:25

标签: python python-3.x kivy kivy-language

我想问用户一个数字,然后显示相应数量的小部件。

这是我的方法:

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()

问题是:“奇异语言”的重点是将逻辑保留在.py文件中,将设计保留在.kv文件中。

在执行此操作时(通过.kv循环,有什么方法可以仅将设计保留在for文件中吗?

(我是kivy的新手,很抱歉,如果我问一个简单的问题。

1 个答案:

答案 0 :(得分:1)

可以。

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()