kivy

kivy戦記(10) kvファイルを使ったTreeView

kivy
この記事は約4分で読めます。

ここで、再三になるが、目的となる画面の概念図を。

いよいよ、ここでTreeListつか、TreeViewの実装である。

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 AllSCN(BoxLayout):
    tv = 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 鉄道ホビートレイン'))
class FilelistApp(App):
    def build(self):
        return AllSCN()
if __name__ == '__main__':
    FilelistApp().run()

いままでの状況から、テキストをpython側から出力することに成功した。

そこで、TreeViewの公式ドキュメント(https://kivy.org/docs/api-kivy.uix.treeview.html)を参考にして、ノードを3つばかり追加してみた。

(テキストの内容が、怪しい内容だというのは、目をつぶって!)

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: '…'
        Button:
            size_hint_x: 0.1
            text: '実行'
    BoxLayout: #ResultSCN
        size_hint_y: 0.9
        TreeView:
            id: tv

AllSCN:

そしてこの実行結果が、

おお、、、

今まで、このブログを書く前から悩みに悩んでいたTreeViewがこんなにあっさり書けてしまうとは。

まさに、超進化速度突入である。

(2018-10-04追加)
過去分を再度見て気づいたのだが、これはkivy戦記(19-5) id指定による、子Widgetのインスタンスの指定にてteratailで教えてもらった、class全体にidを指定するやり方そのものなんですね。(idsを使ってインスタンスを求めるやり方ではないのですが)
ずっと、気が付きませんでした、、、

タイトルとURLをコピーしました