画像のビューアを作る 2 version 5

2019/06/19 11:43 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
画像のビューアを作る 2
190618

# とりあえず作ってみた

- designer を使わないとさっとは書けない
サンプルがあったのでそれを使い回した感じ

< code >

- 何とか表示できたが、まだウインドウのサイズ調整がうまくいかない
大きくなった後小さいファイルを表示しても戻らないことがある

- ドラッグで開くのが基本
表示処理の後すぐフォルダをglobでスキャンして画像ファイルをリスト化して、マウスのホイールで表示ファイルを切り替えるようにした。これが基本の動作
リストは拡張子毎にglobを回してリストに加えていって、最後にソートした

- ホイール
マウスホイールは wheelイベントとして QWidget に実装されてます
このイベントをクラス内で def すると、QWheelEvent Class が引数で来る
ここから angleDelta().y() を取り出して、マイナスなら普通の手前のホイール、プラスなら逆のホイールと判断する
ホイールに応じて画像リストのインデクスをインクリ・デクリメントしてやれば良い

- ちなみにこれはQt5の仕様で、Qt4は少し違うので注意
angleDelta() はposを返すので当然 x()も取得できるが、常に0だった
Qt4だと単にDelta()となっていて、これはintしか返さないから拡張したんだと思う
いずれ x() も何らかの値を返すようになるんだと思う

- とりあえず表示は出来たけど次は何の機能をつけよう
zip内のファイルが読めなければ意味ないからそこかな
zipモジュールを使うか自分でヘッダ解析をするかどうしよう?

- 現状だとzip化したjpgは読めなかった
しかしエラーになるわけでは無いので、pixmap(file) は失敗してもエラーは返さなってことだね

----

- 中ボタンクリックで終了
- マウスジェスチャー必要だな


- リストからドロップファイルのインデクスが取得出来ない
リストを見たら、globで取得したパスの形式がおかしい
winとlinuxが混じったような・・( ´∀`)
c:/**/**/**\\hoge.jpg
って感じ
globに検索フォルダを投げるときにos.path.join()を使ったんだが、[\\]はこれがつけたんだと思う
ドロップファイルとリスト化されたファイルパスが、文字列としては違うのが原因だと思う

- パスは無視してファイル名だけで比較するか、globに投げる文字列を変えるか
glodの結果をファイル名だけに出来ないのかな?
リストはその方が軽くて良さそうだけど


- pathlib も使えるらしい

from pathlib import Path

# Pathオブジェクトを生成
p = Path("/test_dir/dir_A/")

# ファイル名の条件指定 リストで返る

pics = list(p.glob("*.txt"))



- 何か面倒っぽいのでやっぱりglobで

```
# cp=os.getcwd()
os.chdir(<path>) # まずこれをしてから
glob.glob(< パス無しのファイル名だけ >)
# os.chdir( cp )   戻す必要あるかな??
```
カレントフォルダを設定しておけば今後全てのファイル操作はパス無しのファイル名だけでイケるからこの方が簡単で良いのかも (・∀・)ノ
_
_

----
→ []()



      

190618

とりあえず作ってみた

  • designer を使わないとさっとは書けない
    サンプルがあったのでそれを使い回した感じ

< code >

  • 何とか表示できたが、まだウインドウのサイズ調整がうまくいかない
    大きくなった後小さいファイルを表示しても戻らないことがある

  • ドラッグで開くのが基本
    表示処理の後すぐフォルダをglobでスキャンして画像ファイルをリスト化して、マウスのホイールで表示ファイルを切り替えるようにした。これが基本の動作
    リストは拡張子毎にglobを回してリストに加えていって、最後にソートした

  • ホイール
    マウスホイールは wheelイベントとして QWidget に実装されてます
    このイベントをクラス内で def すると、QWheelEvent Class が引数で来る
    ここから angleDelta().y() を取り出して、マイナスなら普通の手前のホイール、プラスなら逆のホイールと判断する
    ホイールに応じて画像リストのインデクスをインクリ・デクリメントしてやれば良い

  • ちなみにこれはQt5の仕様で、Qt4は少し違うので注意
    angleDelta() はposを返すので当然 x()も取得できるが、常に0だった
    Qt4だと単にDelta()となっていて、これはintしか返さないから拡張したんだと思う
    いずれ x() も何らかの値を返すようになるんだと思う

  • とりあえず表示は出来たけど次は何の機能をつけよう
    zip内のファイルが読めなければ意味ないからそこかな
    zipモジュールを使うか自分でヘッダ解析をするかどうしよう?

  • 現状だとzip化したjpgは読めなかった
    しかしエラーになるわけでは無いので、pixmap(file) は失敗してもエラーは返さなってことだね


  • 中ボタンクリックで終了

  • マウスジェスチャー必要だな

  • リストからドロップファイルのインデクスが取得出来ない
    リストを見たら、globで取得したパスの形式がおかしい
    winとlinuxが混じったような・・( ´∀`)
    c:///**\hoge.jpg
    って感じ
    globに検索フォルダを投げるときにos.path.join()を使ったんだが、[\]はこれがつけたんだと思う
    ドロップファイルとリスト化されたファイルパスが、文字列としては違うのが原因だと思う

  • パスは無視してファイル名だけで比較するか、globに投げる文字列を変えるか
    glodの結果をファイル名だけに出来ないのかな?
    リストはその方が軽くて良さそうだけど

  • pathlib も使えるらしい

from pathlib import Path

Pathオブジェクトを生成

p = Path("/test_dir/dir_A/")

ファイル名の条件指定 リストで返る

pics = list(p.glob("*.txt"))

  • 何か面倒っぽいのでやっぱりglobで
# cp=os.getcwd()
os.chdir(<path>) # まずこれをしてから
glob.glob(< パス無しのファイル名だけ >)
# os.chdir( cp )   戻す必要あるかな??

カレントフォルダを設定しておけば今後全てのファイル操作はパス無しのファイル名だけでイケるからこの方が簡単で良いのかも (・∀・)ノ
_
_


→