では、準備も出来たところなので、初期設定画面を作ることにしよう。

(2018-06-05 画面差し替え 左上のtextが初期パスから「開始パス」に変更されています。以下ソース、スクリーンショットは、この項では変更されていません)

 

  • まず、あらかじめセーブしておいた開始データパスの初期情報(2018-06-04 名前がややこしいので改称しました)初期データパスデータ(json)を、読み込む。
    • それがない場合は、環境設定のユーザーパスから開始データパスの初期情報初期データパスを求める。
      • 自分が実行されているOSをもとめ、
        • Windowsなら、環境変数HOMEDRIVEとHOMEPATHから、開始データパスの初期情報初期データパスを求める。
        • Linux系なら、環境変数HOMEから、開始データパスの初期情報初期データパスを求める。
  • 「・・・」ボタンを押されたときは、ファイル選択画面(POPUP)が表示され、この設定値により開始データパスの初期情報初期データパス変更する。
  • 「OK」ボタンが押されたときは、開始データパスの初期情報初期データパスをjsonで保存し、AllSCN画面に戻る。
  • 「キャンセル」ボタンが押されたときは、なにもせずにAllSCN画面に戻る。

こんな感じで作っていこうと思う。

 

(以下、2018-05-28追記)

で、filelist.kvは、とりあえずこうする。


<SetSCN>:
    BoxLayout:
        orientation: 'vertical'

        BoxLayout:
            size_hint_y: 0.1
            orientation: 'horizontal'

            BoxLayout:
                Label:
                    size_hint_x: 0.1
                    text: '初期Dir'
                TextInput:
                    size_hint_x: 0.8
                    text: 'ファイルパス'
                Button:
                    size_hint_x: 0.1
                    text: '…'
                    #on_release: root.xxxx()

        BoxLayout:
            size_hint_y: 0.8

        BoxLayout:
            size_hint_y: 0.1
            Button:
                size_hint_x: 0.5
                text: 'OK'
                on_release: root.selfOk()
            Button:
                size_hint_x: 0.5
                text: 'キャンセル'
                on_release: root.selfCancel()

<AllSCN>:

    tv: tv
    file_name: file_name

    BoxLayout:
        orientation: 'vertical'

        BoxLayout: #OpnSCN
            size_hint_y: 0.1
            orientation: 'horizontal'

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

<MsgboxOk>
    orientation: 'vertical'

    Label:
        size_hint_y: 0.9
        text: root.message_text

    BoxLayout:
        size_hint_y: 0.1
        orientation: 'horizontal'

        Button:
            size_hint_x: 10
            text: 'OK'
            on_release: root.ok_button()


<MsgboxOkCancel>
    orientation: 'vertical'

    Label:
        size_hint_y: 0.9
        text: root.message_text

    BoxLayout:
        size_hint_y: 0.1
        orientation: 'horizontal'

        Button:
            size_hint_x: 10
            text: 'OK'
            on_release: root.ok_button()

        Button:
            size_hint_x: 10
            text: 'キャンセル'
            on_release: root.cancel_button()







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

それで、画面がこうできる。

 

ロジックを組む前に、とりあえず画面ができるなんて、kv言語って便利だね。

いままで、散々kv言語に悩まされてきたけど、はじめてその有用性を実感したよ。