画像のビューアを作る 2 version 4
画像のビューアを作る 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 ) 戻す必要あるかな??