kivy

kivy戦記(9-1) Pyhonプログラムから、kivyファイルを使って表示の実験

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

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

 

いよいよ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:

その結果が

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

(続く)

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