Start_python’s diary

ふたり暮らし

アラフィフ夫婦のフリーランスプラン

Python フォルダ内のファイル名を取得する(スライド可能な一覧を作る)

f:id:Start_python:20200107104212g:plain

はじめに

今回からGIF編集ソフトを作っていきたいと思います。

まずはファイル選択の部分を作ります。特定のフォルダからGIFファイルだけを抜き出し一覧にします。

 

プログラムのコード

# フル画面を解除して画面の幅と高さを設定
from kivy.config import Config
Config.set('graphics', 'fullscreen', 0)
Config.set('graphics', 'width', 320)
Config.set('graphics', 'height', 568)
Config.set('graphics', 'resizable', 0)

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Label
from kivy.uix.button import Button

import os
import glob

from kivy.core.text import LabelBase, DEFAULT_FONT
from kivy.resources import resource_add_path

resource_add_path('c:/Windows/Fonts')
LabelBase.register(DEFAULT_FONT, 'msgothic.ttc')


class CustomLayout(BoxLayout):
    pass


class MainScreen(BoxLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        files = glob.glob('./data/*.gif')
        for file in files:
            self.ids.sv.add_widget(Button(text=os.path.basename(file),
                    size_hint_y=None, height=150, color=(0,0,0,1), background_normal=''))
                                                        # , background_color=(1,1,1,0.1)))

class TestApp(App):
    def build(self):
        self.title = 'テスト'
        return MainScreen()

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

kvファイル(test.kv)

<MainScreen>:
    CustomLayout:
        orientation: "vertical"

        BoxLayout:
            orientation: "vertical"

            BoxLayout:
                Button:
                    size_hint_x: 0.2
                    text: "1"
                Label:
                    size_hint_x: 0.6
                    text: "today"
                    color: 0, 0, 0, 1
                Button:
                    size_hint_x: 0.2
                    text: "2"

            ScrollView:
                size_hint_y: 10
                BoxLayout:
                    id: sv
                    size_hint_y: None
                    orientation: "vertical"
                    height: self.minimum_height

            BoxLayout:
                Button:
                    text: "3"
                Button:
                    text: "4"
                Button:
                    text: "5"

<CustomLayout>:
    canvas.before:
        Color:
            rgba: 1, 1, 1, 1
        Rectangle:
            pos: self.pos
            size: self.size

 

解説

glob.glob('./data/*.gif')

globモジュールを使います。「*.gif」でGIFファイルのみを取得できます。フォルダ内の該当ファイルはリストで返されます。
(ファイル一覧を取得だけなら osモジュールの「os.listdir()」でも出来そうです)

f:id:Start_python:20200107105952p:plain

os.path.basename(file)

ファイル名だけを抜き出したい(パス名を省略したい)ときに使います。

f:id:Start_python:20200107110542p:plain

self.ids.sv.add_widget()

kvファイルで空の「ScrollView」(id: sv)を作っておき、メインプログラムのほうで抜き出したファイル名のボタンを追加していきます。

background_normal=''

ボタンの色を白くするために使います。
(background_color=(1,1,1,1)だと灰色のままでした)

<CustomLayout>:

全体のバックの色を白色にしました。

 

まとめ

今まで基本の勉強してきたところが役に立っています。

start-python.hateblo.jp

start-python.hateblo.jp

start-python.hateblo.jp

はじめはファイル選択ダイアログを使う予定でしたが途中までやって考え直しました。今後のことを考えるとスマホで使う用にしたかったのと、サムネ的なものを付けてみたいと思いました。
次回は境界線を作ってサムネイルを表示できるようにしたいと思います。

 

 

 

保存ファイル

lesson77.py

test.kv

 

 

文責:Luke