[PySide] GraphicsViewのテスト その2 ドラッグ&ドロップで並び替え

前回のを少し弄って、ドラッグ&ドロップで入れ替え出来るようにしてみました。

以下ソース

結構なパワープレイで実装、たぶんもっと真っ当なやり方あるんじゃね?
って気がしますが、とりあえず動けばOKってことで。

pyside_move_test

動作はこんな感じ。(Chromeだと、クリックしないと再生されない模様)
入れ替えがわかりやすいように、四角の色はランダムで変わるようにしてみました。
ドラッグ→ドロップすると、ドロップ後の位置をSignalでEmitしてあげる
さらに、そのEmit情報を受け取って、Listのソート処理→再描画という流れでやりたい事はできました。

困った・迷った点が2つ。
これは前にもやったのですが、Signalを実装するときには QtGui.QObject を継承しなければいけないところ。
継承しないとNGなのは覚えていたのですが、 __init__内で初期化しないといけないのを忘れていて
Emitの行でPythonが異常終了してしまう現象が発生して原因を探すのに時間がかかってしまいました。

もう1つが、入れ替え処理をするのをQGragphicsViewにEventを実装してみたら
Item側のEventが、View側のEventで上書きされてしまった所。
オブジェクトに対して個別に処理をしたい場合は、Item側にEventをつけてあげるってことでしょうかね。

とりあえずやり方は代替把握したので、次はタイルテクスチャツールに実装してみようかと思います。

コメントを残す

メールアドレスが公開されることはありません。


*