whatsnew

自作ゲーム My Works (indie game)

コカトリスあたたかい

10秒アスレチック

きりかえスライドパズル アイちゃんver

珠音ちゃんと踊る迷路の山

きりかえスライドパズル珠音ちゃんver

ダブルピースキャッチコンテスト

異世界の保安官

熱湯!鍋奉行すん止め選手権

サラダにxxいれないで!

十倍返しの魔鏡(マジックミラー)

とりでの中のp.b.j.a.m

ドラゴン遺跡のディガー

Dangerous Space Transporter

マトリエックス MatoriEkkusu

にわとりFlyHigh!

おばけのこんにゃくピターン大作戦

CreatureSlotBattle~魔王の切り札~

跳ねる岩の洞窟 JumpingRockCave

ポテキャッチ PoteCatch

青汁ごくごく生放送

猫の日スロット222 NekoSlot222

豆まき陰陽師 MameMakiOnMyoJi

間違い探し プロ生ちゃんのトレジャーハント

DOT VIRUS SHOOTER ドットウイルスシューター

エレベータースロットガール ElevetorSlotGirl

パンプキンヘッドとお菓子の迷宮

タッチ!イカタコ Touch! Ika Tako

減量と時の部屋 Room of HimanTaurust

チョコゲット ChocolateGet

OpenTheBox~その箱を開けるとき~

ドローン1111

胡桃坂ハロウィンパーティ

コロッケ・オン・ザ・キャベツ

デスチェリー農場


轟け!爆音機!

Levitation Girl

割引狩 WaribikiHunter

お団子キャノン

団子大砲

くの一宅配便

CandyMaze

BLK2048

マッハこうもり

AdSenseBlogHead

2015年9月6日日曜日

QTableView で表を表示してみる

タイトルは駄洒落を狙っているわけではありません。
こんばんわ SakuraCrowd です。

今回は今作っているソフトの経過報告です。
最近のブログのパターンは、
「XXX作ったよ。これがスクリーンショットね。あとこんなこと思ったよ。」
という流れですが、
今日はできていないソフトの部分的な話なので、
いつもよりもプログラムちっくな話になると思います。(´Ծ_Ծ´)メガネノトキハマジメブッテル

QTableView GUIライブラリ Qt のクラスです。
それを Python で使うための PySide というライブラリを使っています。
某表計算ソフト っぽい表の GUI です。

このデータの日付が 09/01 なのでおそらくその日に
  QTableView 使うぞ!(`・ω・´)
とサンプルデータを作ったのでしょう。

Qt Designer という GUI エディタを使うとポトペタでウィンドウを設計できます。
選択できる GUI の中に QTableView QTableWidget があります。
どちらも上のような表の GUI です。

QTableWidget簡単に値をいれたりできます。
Qt Designer 上で直接編集することができるので、
サンプルの表を簡単に作ることができます。
それに対して、 QTableView は Qt Designer 上では値を編集できません。たぶん。

QTableView の強みは MVC の構造を使えることです。
名前のとおり QTableView は View です。
これにデータを管理している Model オブジェクトを設定して使います。
Model クラスを作る手間がかかりますが、 GUI の細かな操作をしなくても Model に応じた表を表示してくれます。

Model は QAbstractTableModel継承して作ります。
コンストラクタで基底クラスの処理を呼び出し、いくつかの純粋仮想関数をオーバーライドします。

def __init__(self, parent=None, *args):
    QtCore.QAbstractTableModel.__init__(self, parent, *args)
    #自前の処理

def rowCount(self, parent):
    return 行数

def columnCount(self, parent):
    return 列数

def data(self, index, role):
    return index の指すデータの値

rowCount と columnCount はすぐにわかると思いますが、表の行数と列数を返します。

data 関数はちょっと面倒でした。
index はただの要素番号ではなく QModelIndex というクラスのオブジェクトです。
2 次元の座標を表したり、いろいろとメソッドがあります。
行番号と列番号を得るだけならば index.row() と index.column() で取得できます。
role はまだ QtCore.Qt.DisplayRole しか使っていないのですが、要するに表示用のデータとか編集用のデータとか同じセルでもほしいデータの種類がいくつかあるみたいです。
それに応じてそのセルの値を返します。


さらに data メンバ関数は返す値も少しとまどいました。
古い資料などでは QVariant オブジェクトを返すようになっていますが、
そんなクラスはないとエラーになります。
現在は廃止されたようです。
#なんか封印されし古(いにしえ)のクラスってかっこいいかも。
現在は python のプリミティブ型を返したい型に応じて返します。
文字列が返したければ文字列型、無効ならば None を返します。

こんな感じでデータを管理するモデルを作って、 QTableView の setModel でモデルを設定すればデータを上の画像のように表示してくれます。

本当は行の追加と削除も書きたかったのですが、説明が下手で長くなってきたのでとりあえずここまでにします。
ちょっとしたツールを作るつもりが、それで1ヶ月経過とか普通にあるよね?普通だよね?それじゃーまた(´;ω;`)ノシ

0 件のコメント:

コメントを投稿