前回(kivy戦記(12) 画面遷移 http://koh-sen.jp/blog/archives/7195)から、次のミッションを実行するために修正していたら、恐るべきミスが発覚した!

なんと、ファイル選択をすると、ブチ落ちるのだ。

このときの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


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 SetSCN(Screen):
    def okButtonClicked(self):
        sm.current = 'all'

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



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

class AllSCN(Screen):
    tv = ObjectProperty(None)
    tree_fp = ObjectProperty(None)
    loadfile = ObjectProperty(None)
    text_input = ObjectProperty(None)

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

    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):
        print(filename[0])
        self.tree_fp.text = filename
        self.tv.add_node(TreeViewLabel(text ='あははは'))
        self.tv.add_node(TreeViewLabel(text ='いひひひ'))
        self.tv.add_node(TreeViewLabel(text ='うふふふ'))

        #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()

filelist.kvも再掲


<SetSCN>
    BoxLayout:
        orientation: 'vertical'

        BoxLayout:
            size_hint_y: 0.9
            Label:
                text: 'えへへ'
        BoxLayout:
            size_hint_y: 0.1
            Button:
                size_hint_x: 0.5
                text: 'OK'
                on_release: root.okButtonClicked()
            Button:
                size_hint_x: 0.5
                text: 'キャンセル'
                on_release: root.cancelButtonClicked()


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

        BoxLayout: #OpnSCN
            size_hint_y: 0.1
            Button:
                size_hint_x: 0.1
                text: '設定'
                on_release: root.setupButtonClicked()
            TextInput:
                id: tree_fp
                size_hint_x: 0.7
                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:

で、いろいろ調べたら、filelist.pyの中のclass AllSCN(Screen):の下にある、各種ObjectProperty群に値が入っていないことが判明した。

 

これは前回散々悩んだ、「kivy戦記(9-3) 強敵ObjectProperty(None)との勝利」(http://koh-sen.jp/blog/archives/7121) で登場するのだが、、、

この解決方法は、ロジックをシンプルにして、状況を打開する、と言うものであった。

ここまで作り込んだ現状では、この手段がやりにくい。

 

そこで、一つ決断をした。

「kivy戦記(11) ファイル選択」(http://koh-sen.jp/blog/archives/7187)までロールバックするしよう。

 

では、ロールバックだぁぁぁぁぁぁぁぁぁぁ!!!!

ぎゅおおおおおおおおおおおおおおおおんんんんん!!!(ロールバックの音)

 

こうして、私は、過去の世界に舞い降りたのであった。(続く)