[PySide] Model・View・Delegateの使い方を調べる

いつ以来だろう、旅行以外の記事を投稿するのは…というぐらい久々にPySideネタ。

DF TALKの model/viewアーキテクチャ 記事でModelとViewなるものを初めて知って衝撃をうけたので、私も色々調べてModel・Viewと、記事にも書かれていた「Delegate」についても調べてみました。
(DF TALK様、毎度の事ながらためになる記事ありがとうございます)

まずは記事を参考にModelとViewを使ってみました。

ListやTree、Tableのセル1つが Item という単位で区切られていて、それをまとめて管理するのが
Model、Modelから情報を受け取って表示するのView・・・ということなのかなと認識しました。
上のサンプルスクリプトのように、ModelとViewとを別々に管理していると、TreeとTableとListとで違う表示なのに、中身のデータは同じだったり、選択している箇所の同期が出来たりするのがGoodですね。

続いてDelegate
正直、これが一体何なのかまったくもってわからん!!!状態だったのですが、
PySideのHelpやらサンプルコードやらを眺めていたらなんとなーくですが理解できました。

(長い)

キャプチャ

PySideのSpinboxを使用したDelegateのサンプルを改造して、HelpにあったProgressBarを追加してみました。
もとのサンプルは こちら
Delegateは、
なにもしていないただ表示されている状態の時 とか
編集中の状態 とか
編集が確定された状態 とか
状況に応じて、『どのように表示するのか』を指定してあげるもの
ということらしく、
上のサンプルでいえば、 createEditorは、編集時にはSpinboxのWidgetを使いますよーとか
通常表示の時には1列目はただの数字、2列目はProgressBarを表示しますよー とかという意味になっています。
引数で、どこのItemが編集されているのかIndexやQPainterオブジェクトを受け取って中でいろいろ処理をして、returnしたりセットしたりして値を返します。
まさにDelegate(代理人)という名前そのものの機能です。

かなり困ったのが、ProgressBarを乗せるときに、QStyle~と通常のとの違いがいまいちわからず、QProgressBarのほうで作ろうとしたら、配置される座標がおかしくなったり、表示がぶっ壊れたりして上手くいかなかったところ。
今回使っているQStyle~ というのは、あくまでもGUIを描画するためのクラスということ…なのでしょうかね?(英語読解が怪しい)

そんなこんなで、とりあえず動くモノができるまでは分かったので
しばらくの間はこんな感じでPySideの研究を続けていこうかなーと思います。

[PySide] Model・View・Delegateの使い方を調べる」への2件のフィードバック

  1. ピンバック: [PySide] TreeViewのModelを作る | Reincarnation+

  2. ピンバック: [PySide] Delegateの使い方を調べる(改 | Reincarnation+

コメントを残す

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


*