またもや再三掲載するけど、目的の画面としてこういう画面を目指している。

 

いよいよTreeListである。

実は今までわからないなりに作っていって、ここで壁にぶち当たって、kivyの基礎から再スタートして、このブログに記載したという経緯がある因縁あるものである。

まずfilelist.py(変更なし)


from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
from kivy.uix.treeview import TreeView, TreeViewLabel, TreeViewNode
from kivy.uix.label import Label
from kivy.properties import ObjectProperty

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 ResultSCN(Widget):
    pass

class OpeSCN(Widget):
    pass

class AllSCN(Widget):
    pass

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


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

これに、filelist.kvをこうする。


<AllSCN>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size
        canvas.before:
            Color:
                rgba: 0,0,.5,1 # 青色
            Rectangle:
                pos: self.pos
                size: self.size
        OpeSCN:
            size_hint_y: 0.1
        ResultSCN:
            size_hint_y: 0.9



<OpeSCN>:
    BoxLayout:
        size: root.size
        pos: root.pos

        BoxLayout:
            TextInput:
                size_hint_x: 0.8
                text: 'ファイルパス'
            Button:
                size_hint_x: 0.1
                text: '…'
            Button:
                size_hint_x: 0.1
                text: '実行'


<ResultSCN>:
    BoxLayout:
        size: root.size
        pos: root.pos

        TreeView:




AllSCN:

その結果が、

なにもでない。当然である。なにも書いていないから。

さて、問題はこれからである。

それはそうと、Python側から内容を変更できるのかの確認がまだだった。TreeViewでは必然的に必要である。

そこで、まずTreeViewを一時的に、Labelに変更して、まずkvファイル変更して内容が変わるか確認しよう。

filelist.kv


<AllSCN>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size
        canvas.before:
            Color:
                rgba: 0,0,.5,1 # 青色
            Rectangle:
                pos: self.pos
                size: self.size
        OpeSCN:
            size_hint_y: 0.1
        ResultSCN:
            size_hint_y: 0.9



<OpeSCN>:
    BoxLayout:
        size: root.size
        pos: root.pos

        BoxLayout:
            TextInput:
                size_hint_x: 0.8
                text: 'ファイルパス'
            Button:
                size_hint_x: 0.1
                text: '…'
            Button:
                size_hint_x: 0.1
                text: '実行'


<ResultSCN>:
    BoxLayout:
        size: root.size
        pos: root.pos

        Label:
            text: 'ああああ'




AllSCN:

このときは、

となる。

では、このLabelのTextをPython側に書いてみよう。

filelist.py(久々に変更があります)


from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
from kivy.uix.treeview import TreeView, TreeViewLabel, TreeViewNode
from kivy.uix.label import Label
from kivy.properties import ObjectProperty
from kivy.properties import StringProperty

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 ResultSCN(Widget):
    text = StringProperty()

    def __init__(self, **kwargs):
         super(ResultSCN, self).__init__(**kwargs)
         self.text = 'いいいい'

class OpeSCN(Widget):
    pass

class AllSCN(Widget):
    pass

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


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

filelist.kv


<AllSCN>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size
        canvas.before:
            Color:
                rgba: 0,0,.5,1 # 青色
            Rectangle:
                pos: self.pos
                size: self.size
        OpeSCN:
            size_hint_y: 0.1
        ResultSCN:
            size_hint_y: 0.9



<OpeSCN>:
    BoxLayout:
        size: root.size
        pos: root.pos

        BoxLayout:
            TextInput:
                size_hint_x: 0.8
                text: 'ファイルパス'
            Button:
                size_hint_x: 0.1
                text: '…'
            Button:
                size_hint_x: 0.1
                text: '実行'


<ResultSCN>:
    BoxLayout:
        size: root.size
        pos: root.pos

        Label:
            text: root.text



AllSCN:

その結果が

と、うまくいったので、この要領でやればいいと思う。

(続く)