如何用Flet(Python)动态添加目录选择按钮?
实现多目录动态选择功能
需求是:每次选完一个目录后,自动追加新的目录选择按钮,支持反复添加目录选择项。
原代码里的button_clicked方法只是重新创建了Row但没实际添加新的目录选择器,也没正确更新界面,调整后的可运行代码如下:
# 初始化目录选择器的容器Row self.row = ft.Row(wrap=True, spacing=10) # 先添加第一个目录选择器 self.add_new_directory_picker() # 创建添加按钮并加入容器 self.add_images_dir = ft.IconButton( icon="add", tooltip="添加更多目录", height=40, on_click=self.button_clicked, data=0 ) self.row.controls.append(self.add_images_dir) self.add(self.row) def add_new_directory_picker(self): """复用创建目录选择器的逻辑""" # 按已有选择器数量命名,比如“目录1”“目录2” picker_name = f"目录 {len(self.row.controls)}" new_picker = FileChooseRow( picker_name, MetaFileType.DIRECTORY, pick_files_dialogs[0], self.on_directory_selected, # 绑定目录选完后的回调 ) # 把新选择器插入到添加按钮的前面 self.row.controls.insert(len(self.row.controls)-1, new_picker) # 更新Row组件,让新选择器显示出来 self.row.update() def button_clicked(self, e): """点击添加按钮时手动新增目录选择器""" self.add_new_directory_picker() e.control.data += 1 def on_directory_selected(self, result): """选完一个目录后自动添加新的选择器""" # 这里可以添加处理选中目录的逻辑,比如把路径存到列表里 # self.selected_directories.append(result.path) # 自动创建新的目录选择器 self.add_new_directory_picker()
关键调整说明
- 用
self.row.controls统一管理所有目录选择器和添加按钮,保证组件顺序正确 - 拆分
add_new_directory_picker方法,复用创建目录选择器的逻辑,避免重复代码 - 在目录选择完成的回调
on_directory_selected里自动触发添加逻辑,满足“选完目录就追加新按钮”的核心需求 - 每次添加后调用
self.row.update()刷新界面,确保新组件能立即显示
内容的提问来源于stack exchange,提问作者Omer
相关产品推荐
相关产品推荐

