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

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

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

データの読み込みと保存
データの保存
PyQt5のQtCore.QDataStreamを使ってQtCore.QAbstractItemModelのルートアイテムをバイナリとして保存します。
byte_array = QtCore.QByteArray()
stream = QtCore.QDataStream(byte_array, QtCore.QIODevice.WriteOnly)
stream << QtCore.QVariant( self.model.root() )
with open(filename[0], 'wb') as f:
f.write(byte_array)
データの読み込み
データの保存と同様にQtCore.QDataStreamでバイナリを読み込み、QtCore.QAbstractItemModelのルートアイテムにセットします。
with open(filename[0], 'rb') as f:
byte_array = QtCore.QByteArray( f.read() )
stream = QtCore.QDataStream(byte_array, QtCore.QIODevice.ReadOnly)
variant = QtCore.QVariant()
stream >> variant
self.model.root( variant.value() )
CSVのインポート
ヘッダーありのCSVをインポートする機能です。インポートできるCSVはrankというヘッダーにツリーリストの階層を記載したものになります。以下はインポート例です。

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

ソースコード
githubにアップロードしました
記事の共有
関連記事
- Pythonで作るシンプル画像ビューワ
- PyQt5 removeRowsを使ってQTreeViewの行を削除する
- PyQt5 InsertRowsを使ってQTreeViewに行を挿入する
- PyQt5 QTreeViewのアイテムをJSONから開く・保存
- PyQt5 QTreeViewの列をiniファイルで設定する