質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Flet

Fletは、Pythonのみでクロスプラットフォームなアプリを作成できるフレームワーク。Flutterをベースにしており、フロントエンドの経験がなくてもWeb・モバイル・デスクトップに対応したアプリを作成できます。

Q&A

解決済

1回答

787閲覧

fletのFilePickerで新規ファイルを作りたい

nezukichi

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Flet

Fletは、Pythonのみでクロスプラットフォームなアプリを作成できるフレームワーク。Flutterをベースにしており、フロントエンドの経験がなくてもWeb・モバイル・デスクトップに対応したアプリを作成できます。

0グッド

0クリップ

投稿2024/09/26 05:24

実現したいこと

現在Pythonのfletを使ってGUIのプログラムを作っています。
その中でファイルダイアログを開いて新規ファイルを指定しようと思っています。

発生している問題・分からないこと

ファイルを読み込むためのダイアログはFilePickerで問題なく動いています。
しかし、新規ファイルを作るためにFilePickerを使おうとすると「ファイルが見つかりません。ファイル名を確認して再実行してください」と表示されファイルを作ることができません。
そこで質問なのですが、FilePickerは新規ファイルを作成するために使うことができるのでしょうか?
(もしあるのならば設定方法を教えていただきたいです。)
もしも、できないのであればほかに代替策はあるでしょうか?
既存のファイルを読み込んで処理をしたのち、新規ファイルに書き込みをしたいので出来ればFilePickerを使いたいと思います。
(もしくはFilePickerと同じデザインのダイアログを利用したいと思います。)
よろしくお願いいたします。

該当のソースコード

Python

1import flet as ft 2 3import whisper 4 5 6def main(page: ft.Page): 7 # ページ情報の設定 8 page.title = 'OpenAI 文字起こし' 9 page.window.width = 600 10 page.window.height = 400 11 page.theme = ft.Theme(color_scheme_seed='green') 12 13 def pick_files_result1(e: ft.FilePickerResultEvent): 14 if e.files: 15 # 読み込み用ファイルパスを設定 16 file_path_input.value = e.files[0].path 17 else: 18 pass 19 file_path_input.update() 20 21 def pick_files_result2(e: ft.FilePickerResultEvent): 22 if e.files: 23 # 書き込み用ファイルパスを設定 24 file_path_output.value = e.files[0].path 25 else: 26 pass 27 file_path_output.update() 28 29 # FilePickerの作成 30 pick_files_dialog1 = ft.FilePicker(on_result=pick_files_result1) 31 pick_files_dialog2 = ft.FilePicker(on_result=pick_files_result2) 32 33 page.overlay.append(pick_files_dialog1) 34 page.overlay.append(pick_files_dialog2) 35 36 # 翻訳ボタン 37 def translation_btn_clicked(e: ft.ElevatedButton): 38 ''' 39 音声ファイルからテキストファイルに翻訳する 40 ''' 41 translation_btn.disabled = True 42 page.update() 43 model = whisper.load_model("tiny") 44 result = model.transcribe(file_path_input.value) 45 f = open(file_path_output.value, 'w') 46 f.write(result["text"]) 47 f.close() 48 translation_btn.disabled = False 49 page.update() 50 51 # 入出力ファイル 52 file_path_input = ft.TextField(hint_text='音声ファイル名', read_only=True) 53 file_path_output = ft.TextField(hint_text='テキストファイル名', read_only=True) 54 file_path_input_btn = ft.ElevatedButton( 55 '音声ファイルを指定', 56 icon=ft.icons.UPLOAD_FILE, 57 on_click=lambda _: pick_files_dialog1.pick_files( 58 allow_multiple=False, 59 file_type=ft.FilePickerFileType.CUSTOM, allowed_extensions=['mp3'] 60 ) 61 ) 62 63 file_path_output_btn = ft.ElevatedButton( 64 'テキストファイルを指定', 65 icon=ft.icons.FILE_DOWNLOAD, 66 on_click=lambda _: pick_files_dialog2.pick_files( 67 allow_multiple=False, 68 file_type=ft.FilePickerFileType.CUSTOM, allowed_extensions=['txt'] 69 ) 70 ) 71 72 translation_btn = ft.ElevatedButton( 73 '変換開始', 74 icon=ft.icons.TRANSLATE, 75 visible=True, 76 on_click=translation_btn_clicked 77 ) 78 79 page.add( 80 ft.Column( 81 [ 82 ft.Row([file_path_input, file_path_input_btn]), 83 ft.Row([file_path_output, file_path_output_btn]), 84 translation_btn, 85 ] 86 ) 87 ) 88 89 90ft.app(target=main) 91

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

Googleで調べましたがfletのFilePickerを使って既存のファイルを開くサンプルは見つかりましたが、新規にファイルを作成するサンプルは見つかりませんでした。
tkinterを使ってファイルダイアログを開く方法は見つかりましたが、こちらで新規ファイルを作成するためのダイアログが開けるかは検証していません。(fletのFilePickerとデザインが同じかまだ調べていません。)

補足

新規ファイルをあらかじめ作っておいてそれを選択し、上書きすることは可能でした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そこで質問なのですが、FilePickerは新規ファイルを作成するために使うことができるのでしょうか?
(もしあるのならば設定方法を教えていただきたいです。)

新規ファイルを使うときは、FilePicker.pick_file()ではなく、FilePicker.save_file()を使います。

FilePicker.save_file() - Flet

質問者nezukichiさんご提示のコードをもとに具体的に書くと、pick_files_dialog2.pic_file()を実行しているコードは、例えば以下のようになるでしょう。

Python3

1 file_path_output_btn = ft.ElevatedButton( 2 'テキストファイルを指定', 3 icon = ft.icons.FILE_DOWNLOAD, 4 on_click = lambda _: pick_files_dialog2.save_file( 5 file_name = "output.txt", 6 file_type = ft.FilePickerFileType.CUSTOM, allowed_extensions = ['txt'] 7 ) 8 ) 9

で、実際にボタンが押下されたときに呼ばれる部分、pick_files_result2()は、例としては以下のようになると思います。pick_file()使用時とはPATHを取得するプロパティが違うので注意してください。

Python3

1 def pick_files_result2(e: ft.FilePickerResultEvent): 2 # 書き込み用ファイルパスを設定 3 file_path_output.value = e.path 4 file_path_output.update() 5

FilePickerResultEvent

尚、当方ではWindows 10上にて Python 3.12.6, Flet 0.24.1を使用して確認しました。

投稿2024/09/27 00:53

dodox86

総合スコア9369

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nezukichi

2024/09/27 06:11

回答ありがとうございます。 動作確認までしていただきありがとうございました。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問