では、ファイル選択してみよう。

kivyでは、FileChooserを使う。

で、そこの公式ドキュメント(https://kivy.org/docs/api-kivy.uix.filechooser.html)のサンプルをまるっとコピーいや、参考にしてみる。

filelist.py


import os

from kivy.app import App

from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.popup import Popup
from kivy.uix.treeview import TreeViewLabel
from kivy.properties import ObjectProperty

from pprint import pprint


from kivy.core.text import LabelBase, DEFAULT_FONT
from kivy.resources import resource_add_path

# 日本語フォント設定
resource_add_path('./fonts')
LabelBase.register(DEFAULT_FONT, 'ipaexg.ttf')



class LoadDialog(FloatLayout):
    load = ObjectProperty(None)
    cancel = ObjectProperty(None)



class AllSCN(BoxLayout):
    tv = ObjectProperty(None)
    loadfile = ObjectProperty(None)
    text_input = ObjectProperty(None)

    def __init__(self, **kwargs):
         super(AllSCN, self).__init__(**kwargs)
         self.tv.add_node(TreeViewLabel(text ='シンカリオン E1 とき'))
         self.tv.add_node(TreeViewLabel(text ='シンカリオン 0 ひかり'))
         self.tv.add_node(TreeViewLabel(text ='シンカリオン キハ32 鉄道ホビートレイン'))

    def show_load(self):
        content = LoadDialog(load = self.load, cancel = self.dismiss_popup)
        self._popup = Popup( title="読み込み中", content=content, size_hint=(0.9,0.9))
        self._popup.open()

    def load (self, path, filename):
        pprint(filename)
        #with open (os.path.join(path, filename[0])) as stream:
        #    self.text_input.text = stream.read()
        self.dismiss_popup()

    def dismiss_popup(self):
        self._popup.dismiss()


class FilelistApp(App):
    def build(self):
        return AllSCN()


if __name__ == '__main__':
    FilelistApp().run()

(importは整理しました)

そしてfilelist.kv


<AllSCN>:
    tv: tv
    orientation: 'vertical'

    BoxLayout: #OpnSCN
        size_hint_y: 0.1
        TextInput:
            size_hint_x: 0.8
            text: 'ファイルパス'
        Button:
            size_hint_x: 0.1
            text: '…'
            on_release: root.show_load()
        Button:
            size_hint_x: 0.1
            text: '実行'

    BoxLayout: #ResultSCN
        size_hint_y: 0.9

        TreeView:
            id: tv

<LoadDialog>:
    BoxLayout:
        size: root.size
        pos: root.pos
        orientation: 'vertical'
        FileChooserListView:
            id: filechooser

        BoxLayout:
            size_hint_y : None
            height : 30
            Button:
                text: 'キャンセル'
                on_release: root.cancel()

            Button:
                text: '読み込み'
                on_release: root.load(filechooser.path, filechooser.selection)


AllSCN:

そして起動して、「実行」ボタンを押下。

「・・・」を押下。

フォルダを選択して、

最後にファイルを選択する。その結果、

選択はとりあえず完了。

また粗削りなところがあるけど、とりあえずスムーズに行ったと。

(公式ドキュメントのサンプルのおかげで)