--- Title: pythonでfoobarのalternativeを作る 32 Author: yamasyuh68 Web: https://mimemo.io/m/kP8LAlbLPAGB7YZ --- 90621- # watcdog関係、DB更新~リロード - 別プロセスとして起動させたDB更新スクリプトの吐くメッセージをパイプで受け取ってメッセージボックスで表示して、YesNo ですぐリロード出来るようにした - リロード前のツリーの状態を再現したいんだけど難しい - そもそもtreeViewの階層構造のデータ検索は難しい事がわかった ## treeViewの階層構造のデータ検索 - ツリーの選択項目を記憶してリロード時に再度選択させたかった ア-ティストやタイトルなどの項目はタグの書き換えで変わるから、タイトルの第2カラムに非表示で設定してあるファイルのフ ルパスを記憶してリロード後に選択させたかった そのためにはtreeからフルパスを検索しなければならない - treeViewのfindはカラムを指定する、しかしリストなら機能するが階層構造だと機能しない - AbstractItemViewのmatchでそこそこいける 最後のオプションをrecursiveにセットすれば再帰的に、階層構造の子供まで検索してくれる しかしそれも第一カラムだけで、第二カラムは検索してくれないんだよ!!┐('д')┌ - ドキュメントを見ると他の挙動が必要なら自分でやってねみたいなことが書かれてる やれやれ - 基本はデータモデルの検索だし簡単だと思ってたんだけど 検索に関してはviewの状態に引っ張られてるような感じだなあ・・・・ - とりあえずtreeに表示されてる項目を選択しておけば、その文字列は検索してリロード後に選択するようにはした - モデルのアイテムを上から順に検索するしかないのか?? ( ̄― ̄?) - このからみで、**リストで選択した曲をツリーで表示**って機能をつけた。これは結構使えます!フルパスでは検索できないけどタイトルなら第一カラムだから検索できる タイトルはユニークでは無いから重複でヒットしてしまうと思ったが、以外とユニークだった # ソートの CaseSensitive - ツリーのソートがやはりおかしい sqlは問題なしと考えてツリーを作成する時にlower()に揃えたんだけど、見てみたらやはり[one ok]と[One Ok]は離れてある で、わかった これらが続いていれば同じと判断するけど、間に何かを挟むと別になってしまう つまりsqlの問題でもあるってことだ - で、調べたら簡単だった **order by lower(hogetta)** order句で指定する時に関数で小文字に揃えれば良い、これでばっちり 時間は体感だけどあんまり変わらなかった - 日本語も文字の種類が多くて結構面倒だけど、アルファベットも大文字小文字は少し面倒ですよね -------- 190624 # tree 検索 - persistentIndexList はだめ list= self.ui.treeView.persistentIndexList() print(len(list)) でトップレベルのアイテム(1500くらい)は返ると思ってたんだけど、1だった┐('д')┌ - 起動直後だと一番上のアイテムが返ってきた しかしリストのアイテムを開いたりして使った後で試すと、別のアイテムが返る **仕組みがわからん** - いろいろ考えてたんだけどこれではダメなのでまた検討し直し そもそもindexの意味がよくわからない しかしインデクスはデータ処理のためにあるようなので、アプローチの方向は間違ってないと思う ---- → [pythonでfoobarのalternativeを作る #](https://mimemo.io/m/3kyw8o3neWG6Lrg)