まず、jsonデータが現時点ではないので、開始初期データパス(2018-06-04 名前がややこしいので改称しました)の初期状態をユーザーパスから求めることにする。

これは、環境変数から求めるわけだが、実行しているOSによって求め方が違うので、まずOSの判定から。

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.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty, StringProperty

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')

sm = ScreenManager()


class MsgboxOk(BoxLayout):
    message_text = StringProperty()
    ok_button = ObjectProperty(None)


class MsgboxOkCancel(BoxLayout):
    message_text = StringProperty()
    ok_button = ObjectProperty(None)
    cancel_button = ObjectProperty(None)




class SetSCN(Screen):

    def __init__(self, **kwargs):
        super(SetSCN, self).__init__(**kwargs)


    def msgTestOk(self):
        pprint ('OKが押されました')
        self.popup.dismiss()

    def msgTestCancel(self):
        pprint ('CANCELが押されました')
        self.popup.dismiss()

    def selfOk(self):
        content = MsgboxOkCancel \
            (ok_button= self.msgTestOk, \
            cancel_button= self.msgTestCancel, \
            message_text= 'とりあえずボタンを作りましたよ')
        self.popup = Popup(title='ボタンだがや', content=content)
        self.popup.open()

        sm.current = 'all'

    def selfCancel(self):
        sm.current = 'all'


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



class AllSCN(Screen):

    tv = ObjectProperty(None)
    file_name = ObjectProperty(None)
    loadfile = ObjectProperty(None)
    text_input = ObjectProperty(None)

    def __init__(self, **kwargs):
        super(AllSCN, self).__init__(**kwargs)

        thisos = os.name
        if thisos == 'posix':
            print ('UNIX系統が動いています')
        elif thisos == 'nt':
            print ('Windowsが動いています')
        else:
            print ('サポートしていないOSが動いています')

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

    def setupButtonClicked(self):
        sm.current = 'set'


    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)
        self.file_name.text = filename[0]
        #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):
        sm.add_widget(AllSCN(name='all'))
        sm.add_widget(SetSCN(name='set'))
        return sm


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

OSの判定は、os.nameの内容より判定するわけで、

posixなら、UNIX系(Linuxはもちろんここ。)

ntなら、Windows

そのほかにjavaがあるそうだが、これがなにを指すのかわからない。javaで動くPython?

(参照 Python Documantaion 16.1. os — Miscellaneous operating system interfaces
https://docs.python.org/3/library/os.html

それにしても、これを見ただけでは、何のことやらわからない。だいたい書いてある内容から推測は出来るのだがjavaがよくわからないのだ。

 

・・・・まあ、見なかったことにしようか。

 

そもそもiOS、Androidについては、標準ではPythonが動かないはずで、しかも動かす環境についてはまだ調べていない。

それに、kivyはPython3系では、iOSやAndroid(2018-05-31追記 勘違いでした)のサポートはまだっぽい(2019年度中?)ので、先延ばしにしときましょう。

それまでに、iOSやAndroidで動かすものを作るのであれば、素直にSwiftKotlinを覚えて作ろう。

たぶん、どっちも似たようなもののはずだし(超楽観論)

 

さて、この実行結果がこれ。

この結果に戦慄をする!(かなり盛ってます)

 

なんで、2つも出るんだ!!!

(ここで、ウルトラセブンM78-3が流れる)

 

続く