KivyMD如何选择文件目录 解决MDFileManager已存在父组件报错
问题解答
报错原因
报错kivy.uix.widget.WidgetException: Cannot add <...> it already has a parent的核心逻辑是:Kivy中同一个组件实例不能被重复添加到多个父组件中。
你原有代码的逻辑漏洞是:首次打开文件管理器后,MDFileManager已经被挂载到ModalView父组件上,第二次触发打开操作时,代码未处理已有挂载的场景,触发重复添加校验报错。
原有MDFileManager方案修复方法
修改两个方法即可解决:
def file_manager_open(self): if not self.manager: self.manager = ModalView(size_hint=(1, 1), auto_dismiss=False) self.file_manager = MDFileManager( exit_manager=self.exit_manager, select_path=self.select_path) self.manager.add_widget(self.file_manager) # 路径展示逻辑移到判断分支外,每次打开都刷新 self.file_manager.show('/') self.manager_open = True self.manager.open() def exit_manager(self, *args): self.manager.dismiss() self.manager_open = False # 退出时清空实例,下次打开重新创建,从根源避免重复挂载问题 self.manager = None
更优实现说明
你后续改用plyer.filechooser的方案更适配图片选择场景,还可以添加文件过滤参数,仅展示图片类文件,优化使用体验:
def file_chooser1(self): # 新增filters参数,过滤可选文件类型 filechooser.open_file(on_selection=self.selected1, filters=["*.png", "*.jpg", "*.jpeg"])
内容的提问来源于stack exchange,提问作者Edwin
相关产品推荐
相关产品推荐

