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にアップロードしました

Share post

Related Posts

コメント