--- Title: pythonでfoobarのalternativeを作る 35 Author: yamasyuh68 Web: https://mimemo.io/m/XpEgPoA26LlmkjW --- @[TOC](項目なり) 190918 # UI 改善 - ウィジェットの配置にスプリッタを使った DB表示のアウトラインビューだが、文字数が足りなくて横幅を広げようと思ったら動かなかった(・∀・)ノ ここの幅は固定にしてたんだなあ・・・ で、スプリッタに直した - 最近ようやくdesignerの使い方が少しわかってきた **特に後から直す方法が重要ですよね** レイアウトの使い方、特に破棄のしかたが難しいんだけど少し慣れてきた - スプリッタを使うってことはその設定を保存することにもなる、それはこれからだが scieditor で実装してるので簡単だと思う こういう部分は Qt は凄く使いやすく考えられてると思う --- 190921 # 設定の保存 - はまった (¯―¯٥) (¯―¯٥)(¯―¯٥) 設定系いじるのは難しいわ、保存と読み込みが、完全新規のほうがまだ良い 一部だけ新しくすると鬼のように難しい - 配布されてるソフトってこういうところも考えて作られてるんだろうな - Linuxで起動させれるか自信ない ┐('д')┌ --- 190927 # 起動高速化実験 メインのDBロードに時間を要していると思われる pythonのstringのドキュメントを読んでたらcasefoldなるメソッドを見つけた 普通のCaseSensitiveとはやや概念が異なるようだ コードをいじって時間を計測してみた 1. 現状 if item[0] .lower() != l[0].lower() elapsed_time:0.9650552272796631[sec] elapsed_time:0.9090518951416016[sec] 2. sqliteの関数で小文字に揃える select lower( artist ) elapsed_time:0.8460485935211182[sec] elapsed_time:0.8750503063201904[sec] 3. str.casefold を使う elapsed_time:0.8910508155822754[sec] elapsed_time:0.9040517807006836[sec] 二回計測したデータだがいずれもそれほどの時間短縮にはならなかった それよりも、②だとモデルにセットするデータそのものが全て小文字になってしまい格好が悪かった ①だと比較の時に小文字に合わせてるだけでセットする文字自体は大文字混じりのまま 肝心の③だがうまくいかなかった、全て別の文字列として読んでしまう ツリーには同じ文字列が違うアーティストとして列挙されてしまった 原因不明 ┐('д')┌ 実験は失敗、結局今のコードのままにした まあ仕方ないよな 起動が遅いのは何とかしたいよなあ treeで1秒くらいはかかってるから別スレッドにすれば起動は速くなるかな?? 考えたらdef のルーチンにしてあるから self.reload() を ``` import threading th = threading.Thread( target = self.reload , args=(self) ) th.start() ``` とするだけか?? --- 190930 # 起動ルーチン変更 - 上記のスレッド化を実験してみたら起動しなかった クラスの中で関数をスレッドで起動するのはダメなんだろうか? - で、**メインのDBは自動でロードしない仕様にした** もともとメニューでDBrefreshってのを実装してたんで、必要なときだけ読み込む リストで曲を聴くから、そこに追加するときにしかDBは使わない、使わないまま終了させることの方が多い そういう意味ではデフォルトのUI自体が無駄だったのかもだな ( ̄― ̄?) ---- 191008 # ツリービューのオンオフ - ツリービューは最近ずっと閉じてる もともと起動高速化のためにいろいろやってて今は起動時の読込をやめた リストが出来てしまうと使わないことも多いので不便はあまりない で、普段は閉じておくことにした でも使うときは当然開くので、この切替を簡単にやりたかった - スプリッターのメソッドをいろいろ読んだりネットで調べたりもしてもうまくいかなかったが、色んなメソッドを試してたら偶然できた(・∀・)ノ - 快適になった ``` def splitter(self): if not self.ui.treeView.geometry().width() : self.ui.splitter_2.moveSplitter(150,1) else : self.ui.splitter_2.moveSplitter(0,1) ``` - しかしそもそものスプリッタ、そこにウィジェットを登録してインデクスで管理するようだけど仕組みがよくわからない 特にインデクスの概念が??? designerで簡単に設定出来るので私の理屈の理解が弱いだけなんだけども --- 191013 # タグリストの文字列をコピー - ずっと実装したかった、ようやく実現 - DBのツリービューのオンオフをメニューバーからダイレクトに出来るようにした これで、通常はDBは非表示で、今聴いてるアーチストの他の曲を聴きたいときは ①タグビューからアーティスト名をコピー ②メニューからツリーを開いて検索窓にペースト という操作フローにした - 検索時は直接DBを叩いてモデルを作ってツリーにセットする仕様なので、**検索文字がなければツリーには何も表示されない** でも特に不自由は無いので初めからこれで良かったんだな~ - 考えたら検索データをモデルにセットするときはフルパスも同時に取得するが、これはマウスクリック時にDBに取りに行っても良いかもしれない その方が早いしメモリも無駄にしないから - でも重複した曲があるとおかしくなるかな? - scieditor で実装した起動時間計測機能をつけてみた だからといって早くなるわけではないけど --- 191018 # 起動時の自動演奏実装 何とかやったけど タイマーの設定とか、複雑 やはりすっきりと書き直したほうがいいな 自分で書いたけど解読が難しい ----- ---->[pythonでfoobarのalternativeを作る](https://mimemo.io/m/3kyw8o3neWG6Lrg)