2017-11-28 22 views
1

ブラウズ機能を持つKivyアプリがあります。数字の名前でファイルをブラウズすると、それは奇妙な方法で表示されます。「最も重要なビット」スタイルで並べ替えます。スクリーンショットを追加する。 これを正しい順序で表示する方法を知っている人は誰ですか? (1,2,3 ...の代わりに、1,10,100 ...)PythonのKivy FileBrowserがファイルを適切にインデックス化しません。

Bad image indexing...

おかげでたくさん!

答えて

1

自然な順序が必要です。これを行うには、クラスkivy.uix.filechooser.FileChooserControllersort_funcプロパティを使用してファイルを注文する関数を置き換える必要があります。

Natural Sorting algorithmに彼の答えに@Dariusベーコンで示されるアルゴリズムに基づいて

例:

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 

例としてのスクリーンショット:

enter image description here

enter image description here

関連する問題