2019年2月23日土曜日

PyQT、ドラッグアンドドロップ、designer


またはまりました(・∀・)ノ
簡単なんだけどさ、designerだと落とし穴があった(と思う)
これはPythonではなくGUI環境の、今回で言えばQtの使い方って事になりますね
designerでuiを書いて、それを本体のpyにインポートして使う前提だけど、ListViewWidetでDragを受けるとしたらこんな感じ

①designerでListViewを右クリックしてprompte toして、独自のクラス(hoge)に設定し直す
②designerが吐いたuiをpyに変換したら、最後に import hoge as hoge みたいなスクリプトが追加されてるので、このhoge.pyを同じフォルダに自分で作る
③hoge.pyではListViewWidetを継承したクラスを書いて、そこでDrag&Dropを実装する
④インポートするpyのファイル名を変えたければ、promote toした時のダイアログでヘッダファイルの名前を設定できるので、ここに好きな名前を書けば良い

実装するコードはwebで検索したらいくらでも出てくるし、Qtのサンプルフォルダにも入ってます(dropsite.py)
これでListViewにドラッグしたらそのファイル名がリストに入ります
ListViewのオブジェクト名は変わらないから本体のpyでは何もしなくて良いです(のはず)

ちょっと面倒ですがdesignerを使う場合はこんな感じになる(と思う)
ちなみに疑問として、designer上でそれぞれのオブジェクトのプロパティとしてDragをacceptできる
この場合吐かれたuiを見ても確かにacceptしてる
しかしacceptしてもその後のdrag処理を書けないから全く意味がないのになぜ??

designerってC++用だから、pythonからだと使いづらくなるのかもしれない
せめてdrag用に追加で書くpyのスケルトンでも用意してくれてたら良いと思うんですけどね・・・
でもdesignerはすごく良いツールだから、やり方がわかっただけでもよし!!!

しかしハマって何とか這い出したときはうれしいよね
プログラミング楽しいわ~( ´∀`)

0 件のコメント:

コメントを投稿