【问题标题】:Create widgets based on user input, in the .kv file在 .kv 文件中根据用户输入创建小部件
【发布时间】:2020-04-28 10:28:09
【问题描述】:

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

这就是我的做法:

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 语言”的重点是将逻辑保留在.py 文件中,将设计保留在.kv 文件中。

有什么办法可以让设计只保存在.kv 文件中,同时这样做(有一个for 循环)?

(我是kivy的新手,如果我问一个简单的问题,对不起。:))

【问题讨论】:

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


    【解决方案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()
    

    【讨论】:

    • 可以在函数中添加for循环
    • 这是一个显示小部件的for 循环。如果for 循环在函数中,我的小部件(设计)也必须在函数中。
    • 在 kv 文件中给布局一个 id.... 并在 for 循环中使用 add_widget 选项来动态添加小部件
    • 所以在.kv 文件中我只制作了一次该小部件?我会试试的。
    • 是的,你只在 kv 中进行布局,并在 py 文件中添加 for 循环中的小部件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多