如何处理Kivy FileChooserController

时间:2019-04-28 08:04:20

标签: kivy kivy-language

我目前正在使用Kivy的FileChooserController来选择文件。当FileChooserController收到系统中找不到的文件路径时,我想执行自己的指定操作(FileNotFoundError)。但是,当我尝试使用"try:""except FileNotFoundError:"时,程序不会执行我的"except FileNotFoundError:"下的操作。该程序能够识别异常,但是它没有响应我的“ except FileNotFoundError:”。有办法解决这个问题吗?

我尝试阅读和理解Kivy的ExceptionHandler和ExceptionManager。但是,我无法将其应用于我的问题。如果您有如何使用这些示例,请提供给我并解释一下。谢谢

https://kivy.org/doc/stable/api-kivy.base.html?highlight=exceptionhandler#kivy.base.ExceptionHandler

.py代码

class Browse(Popup):
    title = StringProperty('BROWSE')
    path = StringProperty('/')
    filters = ListProperty(['*.csv'])
    callback = ObjectProperty()

    def __init__(self, callback, path, *args, **kwargs):
        super().__init__(*args, **kwargs) 
        self.callback = callback
        try: 
            self.path = path
        except FileNotFoundError:
            popup = Message(title='ERROR', 
            message='Path not found. Returning to root folder.')
            popup.open()
            print('opened')
            self.path = '/'

.kv代码

<Browse>:
    size_hint: None, None
    size: 474, 474
    BoxLayout:
        orientation: 'vertical'
        FileChooserIconView:
            id: filechooser
            filters: root.filters
            path: root.path
            on_submit: root.select(self.selection)
        GridLayout:
            size_hint: None, None,
            size: root.width - 25, 45
            cols: 4
            rows: 1
            Widget:
            Widget:
            Button:
                text: 'SELECT'
                background_normal: 'assets/theme/positive.png'
                background_down: 'assets/theme/positive_pressed.png'
                on_release: root.select(filechooser.selection)

当我尝试输入无效的文件路径时,控制台会显示此消息。

  

[错误]无法打开目录

     

它也显示此消息,表明有一个   FileNotFoundError。

     

FileNotFoundError:[错误2]没有这样的文件或目录:'/ 234234'

     

在收到上述消息之前,我也收到了这些消息。

     
    

回溯(最近通话最近):文件     “ /home/kebaranas/miniconda3/lib/python3.6/site-packages/kivy/uix/filechooser.py”,     _generate_file_entries中的第828行         用于索引,总数,self中的项。_add_files(path):文件“ /home/kebaranas/miniconda3/lib/python3.6/site-packages/kivy/uix/filechooser.py”,     _add_files中的第849行         对于self.file_system.listdir(path)中的f:文件“ /home/kebaranas/miniconda3/lib/python3.6/site-packages/kivy/uix/filechooser.py”,     第168行,在listdir中         返回listdir(fn)

  

1 个答案:

答案 0 :(得分:0)

该异常在调用FileChooserController方法FileSystem的生成器方法的listdir()内部抛出。我相信您必须继承FileChooserIconView并替换其某些代码才能捕获该异常。一种更简单的方法是避免首先抛出该异常。为此,只需修改__init__类的Browse方法:

class Browse(Popup):
    title = StringProperty('BROWSE')
    path = StringProperty('/abba')
    filters = ListProperty(['*.csv'])
    callback = ObjectProperty()

    def __init__(self, callback, path, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.callback = callback
        if os.path.exists(path):
            self.path = path
        else:
            # this would throw the exception
            print('path does not exist')
            self.path = '/'