Kivy 语言动态复选框列表

Kivy Language Dynamic Checkbox List

我想在 Kivy 语言中动态添加复选框。我知道如何在 python 中实现这一点,但不知道如何在 Kivy 语言中实现。 下面列表中的每个文件都应该有一个复选框:

 from kivy.uix.filechooser import FileSystemLocal
 file_system = FileSystemLocal()
 file_list=file_system.listdir(App.get_running_app().user_data_dir+'\')   # this returns a list of files in dir
 file_list=[x for x in file_list if x[-4:]=='.csv']

我如何循环这个 Kivy?我假设应该在右侧循环,因为那是 python 代码。但我不知道如何?任何入门者都会有所帮助。

编辑:

class MergeScreen(Screen):
    result_label=''
    check_boxes={}
    def __init__(self,**kwargs):
        self.name='MergeScreen'
        super(MergeScreen, self).__init__(**kwargs)
        b=BoxLayout(orientation='vertical')
        file_system = FileSystemLocal()
        file_list=file_system.listdir(App.get_running_app().user_data_dir+'\')   # this returns a list of files in dir
        file_list=[x for x in file_list if x[-4:]=='.csv']
        for file_1 in file_list:
            g=GridLayout(cols=2)
            c=CheckBox()
            l=Label(bold= True,font_size=20,text=file_1)
            self.check_boxes[c]=file_1
            g.add_widget(l);g.add_widget(c)
            b.add_widget(g)
        g=GridLayout(cols=2)
        l=Label(bold= True,font_size=20,text='Result Name')
        t=TextInput(font_size=25)
        self.result_label=t
        g.add_widget(l)
        g.add_widget(t)
        b.add_widget(g)
        g_options=GridLayout(cols=2)
        g_options.add_widget(Button(text="Okay",on_press=self.create_result))
        g_options.add_widget(Button(text="Back",on_press=self.return_back))
        b.add_widget(g_options)
        self.add_widget(b)        
    def return_back(self,btn):
        self.parent.current = 'ExperimentSelectScreen'    
    def create_result(self,btn):
        file_list=[]
        root_dir= App.get_running_app().user_data_dir+'\'
        for key, value in self.check_boxes.iteritems():
            if key.active==True:
                file_list.append(root_dir+'\'+value)
        result_name=self.result_label.text+'.csv'
        result_dir=root_dir+'results'
        if os.path.exists(result_dir)==False:os.makedirs(result_dir)
        result_path=result_dir+'\'+result_name
        fout=open(result_path,"w+")
        # # first file:
        for line in open(file_list[0]):
            fout.write(line)
        # # now the rest:    
        for num in file_list[0:]:
            f = open(num)
            f.next() # skip the header
            for line in f:
                fout.write(line)
            f.close() # not really needed
        fout.close()
        file_create=Popup(title='Confirmation',content=Label(text="Merged File has stored at\n"+result_path)\
                ,size_hint=(.75,.75),auto_dismiss=True)
        file_create.open()
        Clock.schedule_interval(file_create.dismiss, 3) 

问题是如果创建了文件,我如何添加复选框,因为 init() 只执行一次 运行。我每次都重新启动应用程序。

您不能使用 kv 语言动态添加小部件,除非在例如 self.add_widget(Something()) 中编写类似 self.add_widget(Something()) 的内容。事件绑定,例如 on_press。不过,我认为它不适合你正在做的事情,这听起来像是你应该在 Python 方面完成的任务。