PyFolderPicker
V1.2 2025/12/22
選択したフォルダ内にある画像をサムネイル一覧表示するソフトです。
ウインドウフォームを拡大縮小すると、それに伴ってサムネイルの大きさが自動で拡大縮小されるのが特徴です。
タブを追加することで、別のフォルダの画像を読み込みサムネイル表示できますので、それらのタブを切り替えて
画像を閲覧することができます。
PyFolderPicker12.zip
readme_PyFolderPicker.pdf
ソースコード
注:Fletのバージョンは0.28.3でコンパイルしてください。
#PyFolderPicker.py
import flet as ft
import glob
def main(page: ft.Page):
page.title = 'PyFolderPicker V1.2'
def escapeBraceForGlob(str):
#convert [ -> [[] , ] -> []]
newStr = str.replace('[','\\[').replace(']','\\]')
newStr = newStr.replace('\\[','[[]').replace('\\]','[]]')
return newStr
def tab_change(e):
page.title = tabs_control.tabs[tabs_control.selected_index].tooltip
page.update()
def picker(e: ft.FilePickerResultEvent):
folder.value = e.path
pas15 = folder.value[:15]
a = list(folder.value + '\*.*'); a.insert(3, '\\'); s = ''.join(a)
grf = [ft.Image(src=x) for x in glob.glob(escapeBraceForGlob(s))]
r = int(dropdown.value)
tabs_control.tabs[tabs_control.selected_index].content = ft.GridView(grf, runs_count = r, expand = True)
tabs_control.tabs[tabs_control.selected_index].text = pas15
tabs_control.tabs[tabs_control.selected_index].tooltip = folder.value
page.title = folder.value
page.update()
def remove_tab_click(e):
if len(tabs_control.tabs) > 0:
tabs_control.tabs.pop(tabs_control.selected_index)
page.update()
def add_tab_click(e):
folder.value = ''
new_tab_count = len(tabs_control.tabs) + 1
tabs_control.tabs.append(ft.Tab(text=f'タブ {new_tab_count}',content = ft.Row([dropdown, button, folder])))
tabs_control.selected_index = new_tab_count - 1
page.update()
###############################################################################################################
dropdown = ft.Dropdown(tooltip = '列数指定',value='5', options=[
ft.dropdown.Option('5'), ft.dropdown.Option('10'), ft.dropdown.Option('15'), ft.dropdown.Option('20')])
pick = ft.FilePicker(on_result = picker); page.overlay.append(pick)
folder = ft.TextField(tooltip = '選択されたフォルダ')
button = ft.IconButton(tooltip = 'フォルダ選択', icon = ft.Icons.FOLDER,
on_click = lambda _: pick.get_directory_path(dialog_title = 'select'))
tabs_control = ft.Tabs(
selected_index=0,
on_change = tab_change,
tabs=[ft.Tab(text="初期タブ", content=ft.Text("これは最初のタブです"))],
expand=1
)
add_button = ft.ElevatedButton("タブを増やす", on_click=add_tab_click)
pop_button = ft.ElevatedButton("タブを減らす", on_click=remove_tab_click)
page.add(ft.Row([add_button, pop_button]), tabs_control)
ft.app(target=main)