Python';s Kivy文件浏览器不';t正确索引文件
我有一个具有浏览功能的Kivy应用程序。当浏览带有数字名称的文件时,它会以一种奇怪的方式显示出来,它会按照“最高有效位”的方式进行排序。添加屏幕截图。 有人知道如何修复它以正确的顺序显示它吗?(1,2,3…而不是1,10100…)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.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
以一些屏幕截图为例: