Python';s Kivy文件浏览器不';t正确索引文件

Python';s Kivy文件浏览器不';t正确索引文件,python,python-3.x,python-2.7,kivy,kivy-language,Python,Python 3.x,Python 2.7,Kivy,Kivy Language,我有一个具有浏览功能的Kivy应用程序。当浏览带有数字名称的文件时,它会以一种奇怪的方式显示出来,它会按照“最高有效位”的方式进行排序。添加屏幕截图。 有人知道如何修复它以正确的顺序显示它吗?(1,2,3…而不是1,10100…) 非常感谢 您需要一个自然的顺序。为此,需要替换使用类kivy.uix.filechooser.FileChooserController的属性对文件进行排序的函数 一个基于@Darius Bacon在回答以下问题时所示算法的示例: main.py: import r

我有一个具有浏览功能的Kivy应用程序。当浏览带有数字名称的文件时,它会以一种奇怪的方式显示出来,它会按照“最高有效位”的方式进行排序。添加屏幕截图。 有人知道如何修复它以正确的顺序显示它吗?(1,2,3…而不是1,10100…)


非常感谢

您需要一个自然的顺序。为此,需要替换使用类
kivy.uix.filechooser.FileChooserController
的属性对文件进行排序的函数

一个基于@Darius Bacon在回答以下问题时所示算法的示例:

main.py

import re
from kivy.app import App
from kivy.properties import ObjectProperty




def natural_key(path):
    return [int(s) if s.isdigit() else s for s in re.split(r'(\d+)', path)]


def natural_sort(files, filesystem):    
    return (sorted((f for f in files if filesystem.is_dir(f)), key = natural_key) +
            sorted((f for f in files if not filesystem.is_dir(f))))


class RootWidget(FloatLayout):
    sort_func = ObjectProperty(natural_sort)



class MainApp(App):
    def build(self):
        return RootWidget()

if __name__ == '__main__':
    MainApp().run()
main.kv:

<RootWidget>:
    TabbedPanel:
        do_default_tab: False

        TabbedPanelItem:
            text: 'List View'
            BoxLayout:
                orientation: 'vertical'
                FileChooserListView:
                    sort_func: root.sort_func


        TabbedPanelItem:
            text: 'Icon View'
            BoxLayout:
                orientation: 'vertical'
                FileChooserIconView:
                    sort_func: root.sort_func
:
选项卡面板:
do_default_选项卡:False
选项卡式面板项目:
文本:“列表视图”
盒子布局:
方向:“垂直”
文件选择器列表视图:
sort_func:root.sort_func
选项卡式面板项目:
文本:“图标视图”
盒子布局:
方向:“垂直”
FileChooseConView:
sort_func:root.sort_func
以一些屏幕截图为例: