PyQt5で作るSimple partslist editor

Share on:

部品表を作る時などにツリーのリストを編集する必要があります。今までエクセルで編集していましたが、エクセルでツリーを表示するとなるとなかなか見にくいのでPyQt5のQTreeviewでエディタを作ってみました。

列の追加と削除

Settingsに列の一覧が表示され、その一覧を編集することで列の追加や削除が行えます。また、データを開いたり、インポートしたときにそのデータから列を取得します。

アイテムの追加と削除

add, removeボタンか右クリックのコンテキストメニューでアイテムの追加や削除ができます。

データの読み込みと保存

データの保存

PyQt5のQtCore.QDataStreamを使ってQtCore.QAbstractItemModelのルートアイテムをバイナリとして保存します。

1byte_array = QtCore.QByteArray()
2stream = QtCore.QDataStream(byte_array, QtCore.QIODevice.WriteOnly)
3stream << QtCore.QVariant( self.model.root() )
4with open(filename[0], 'wb') as f:
5    f.write(byte_array)

データの読み込み

データの保存と同様にQtCore.QDataStreamでバイナリを読み込み、QtCore.QAbstractItemModelのルートアイテムにセットします。

1with open(filename[0], 'rb') as f:
2    byte_array = QtCore.QByteArray( f.read() )
3    stream = QtCore.QDataStream(byte_array, QtCore.QIODevice.ReadOnly)
4    variant = QtCore.QVariant()
5    stream >> variant
6    self.model.root( variant.value() )

CSVのインポート

ヘッダーありのCSVをインポートする機能です。インポートできるCSVはrankというヘッダーにツリーリストの階層を記載したものになります。以下はインポート例です。

JSONのインポート

columns, parts, dataが記載されたJSONファイルをインポートする機能です。columnsがツリーの列名となり、ツリー構造になっているpartsがツリーとしてインポートされます。

ソースコード

githubにアップロードしました

関連記事