よちよちpython

独習 python/Qpython/Pydroid3/termux

呟き ファイル選択ダイアログについて

プログラムの実行中にファイルを開きたい場合、前もってコードにファイルパスを直接書いたり、globで検索して変数に格納したりしますが、一般的にはアプリの「開く」「Open」ボタンを押せばファイル選択のダイアログが立ち上がって、そこから簡単に選択できるようになっていますよね。

こんなやつ ↓ open file dialog

f:id:chayarokurokuro:20190922190446j:plain
Microsoft社サポートページから拝借



WindowsならWindowsAPIというものが用意されているそうで、ExcelVBAとかでも同じですけど、それらを呼び出して「ファイル選択ダイアログを開く」ような命令を書くだけで済む。



Android開発では、ファイルダイアログは用意されていないようで、自作しなくちゃならないとか。iPhoneは分かりません。調べていない。



Pythonでこれを使おうと思うなら、大抵TkinterというGUI用のモジュールを利用して作るものが主流な感じ。
PCはそれでいいんですよ、PCは。

AndroidスマホPythonからTkinterなどGUIを動かすのは難しい。Qpythonは独自のGUIが、Pydroid3はTkinterやKivyなどが動くように作られてはあるが、termuxでピュアなPythonを動かす場合に、外国のQ&Aサイトであってもほとんど諦めろみたいなコメントが並んでいる状況。( ;´・ω・`)



何とかならんかね、明智
インストール済みのエクスプローラアプリをsubprocessとかで起動するか、JavaScriptを使ってブラウザでどうにか出来ないだろうか。
Androidアプリのアプリ名を調べる方法はAndroid開発の方々のサイトで見つかることは見つかる。Java言語が分からないので応用しづらい。
JavaScriptならWebフレームワークが必要になるのか?
拾ってきたJavaScriptによるファイル選択ダイアログの開き方のコードを参考までに書いておこ。


<input type="file" id="selfile">

<script>
var obj1 = document.getElementById("selfile");

obj1.addEventListener("change", function(evt){
  var file = evt.target.files;
  alert(file[0].name + "を取得しました。");
},false);
</script>



Jupyter Notebookに貼り付けて実行したら動いた。bottleを起動してブラウザで開いても機能した。しかしhtmlやJavaScriptが分からないので選択したファイル名の取得方法が分からない



現在そのへん探り中。

【メモ】ヒントになりそうな
HTMLにJavaScriptの変数を渡す方法を解説!セキュリティにも要注意 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

ファイル情報の取得-JavaScript入門(HTML5編)

Flaskでファイルをアップロードする時に使うテクニックとして似たようなものが検索で引っ掛かる。