added first try for dumping the data to hdf5 files

This commit is contained in:
2023-01-25 21:59:14 +01:00
parent fc2fa9ae34
commit 3a0f2bd0d6
2 changed files with 49 additions and 1 deletions

23
grum/io.py Normal file
View File

@ -0,0 +1,23 @@
import h5py
def write_dict(fn, d):
d = flatten_dict(d)
with h5py.File(fn, "w") as f:
for k, v in d.items():
f[k] = v
def flatten_dict(d, parent="", sep="/"):
res = {}
for key, value in d.items():
abs_key = parent + sep + key
if isinstance(value, dict):
deeper = flatten_dict(value, parent=abs_key, sep=sep)
res.update(deeper)
else:
res[abs_key] = value
return res

View File

@ -1,9 +1,10 @@
from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.QtCore import Qt, pyqtSignal
from PyQt5.QtWidgets import QMainWindow, QSplitter from PyQt5.QtWidgets import QMainWindow, QSplitter, QFileDialog
from . import assets from . import assets
from .dictlist import DictList from .dictlist import DictList
from .exampledata import exampledata from .exampledata import exampledata
from .io import write_dict
from .mdi import MDIArea, MDISubMultiPlot, MDISubPlot, MDIWindowMode from .mdi import MDIArea, MDISubMultiPlot, MDISubPlot, MDIWindowMode
from .menus import BarMenu from .menus import BarMenu
from .plotdesc import PlotDescription from .plotdesc import PlotDescription
@ -42,6 +43,11 @@ class MainWindow(QMainWindow):
bar = self.menuBar() bar = self.menuBar()
self.menu_file = menu = BarMenu(bar, "&File")
menu.addAction("Save as...", self.on_save)
shortcut(self, "Ctrl+S", self.on_save)
self.menu_settings = menu = BarMenu(bar, "&Settings") self.menu_settings = menu = BarMenu(bar, "&Settings")
menu.addCheckbox("Open new plots", state=True) menu.addCheckbox("Open new plots", state=True)
@ -114,6 +120,25 @@ class MainWindow(QMainWindow):
self.lst.set_alarm_for_selected(True) self.lst.set_alarm_for_selected(True)
def on_save(self):
filters = [
"HDF5 files (*.h5)",
"All files (*)"
]
filters = ";;".join(filters)
fn, _chosen_filter = QFileDialog.getSaveFileName(self, filter=filters)
if not fn:
return
data = {}
for name, item in self.lst.items.items():
desc = item.value
data[name] = dict(xs=desc.xs, ys=desc.ys)
write_dict(fn, data)
# Plumbing # Plumbing
def plot_single_item(self, item): def plot_single_item(self, item):