PyQt5で作るSimple partslist editor
2020/08/30 categories:PyQt5| tags:Python|PyQt5|QTreeView|
部品表を作る時などにツリーのリストを編集する必要があります。今までエクセルで編集していましたが、エクセルでツリーを表示するとなるとなかなか見にくいので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にアップロードしました