pythonでfoobarのalternativeを作る 35 version 15
:追加された部分
:削除された部分
(差分が大きい場合、文字単位では表示しません)
pythonでfoobarのalternativeを作る 35
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で簡単に設定出来るので私の理屈の理解が弱いだけなんだけども
-----
---->[pythonでfoobarのalternativeを作る](https://mimemo.io/m/3kyw8o3neWG6Lrg)
190918
UI 改善
- ウィジェットの配置にスプリッタを使った
DB表示のアウトラインビューだが、文字数が足りなくて横幅を広げようと思ったら動かなかった(・∀・)ノ
ここの幅は固定にしてたんだなあ・・・
で、スプリッタに直した - 最近ようやくdesignerの使い方が少しわかってきた
特に後から直す方法が重要ですよね
レイアウトの使い方、特に破棄のしかたが難しいんだけど少し慣れてきた - スプリッタを使うってことはその設定を保存することにもなる、それはこれからだが scieditor で実装してるので簡単だと思う
こういう部分は Qt は凄く使いやすく考えられてると思う
190921
設定の保存
- はまった (¯―¯٥) (¯―¯٥)(¯―¯٥)
設定系いじるのは難しいわ、保存と読み込みが、完全新規のほうがまだ良い
一部だけ新しくすると鬼のように難しい - 配布されてるソフトってこういうところも考えて作られてるんだろうな
- Linuxで起動させれるか自信ない ┐('д')┌
190927
起動高速化実験
メインのDBロードに時間を要していると思われる
pythonのstringのドキュメントを読んでたらcasefoldなるメソッドを見つけた
普通のCaseSensitiveとはやや概念が異なるようだ
コードをいじって時間を計測してみた
- 現状 if item[0] .lower() != l[0].lower()
elapsed_time:0.9650552272796631[sec]
elapsed_time:0.9090518951416016[sec] - sqliteの関数で小文字に揃える select lower( artist )
elapsed_time:0.8460485935211182[sec]
elapsed_time:0.8750503063201904[sec] - 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で簡単に設定出来るので私の理屈の理解が弱いだけなんだけども