Silx provides an implementation of a tree model and a tree view for HDF5 files. The aim of this tree is to provide a convenient read-only widget for a big amount of data and supporting file formats often used in synchrotrons.
This page provides some source code to show how to use this widget.
HDF5 widgets are all exposed by the package silx.gui.hdf5.
import silx.gui.hdf5
treeview = silx.gui.hdf5.Hdf5TreeView()
The tree view can be customized to be sorted by default.
# Sort content of files by time or name
treeview.setSortingEnabled(True)
The model can be customized to support mouse interaction. A convenient method Hdf5TreeView.findHdf5TreeModel() returns the main HDF5 model used through proxy models.
model = treeview.findHdf5TreeModel()
# Avoid the user to drop file in the widget
model.setFileDropEnabled(False)
# Allow the user to reorder files with drag-and-drop
model.setFileMoveEnabled(True)
The tree view is also provided with a custom header which help to choose visible columns.
header = treeview.header()
# Select displayed columns
column_ids = [treeview.findHdf5TreeModel().NAME_COLUMN]
header.setSections(column_ids)
# Do not allow the user to custom visible columns
header.setEnableHideColumnsPopup(False)
The model can be used to add HDF5. It is internally using silx.io.utils.load().
model.insertFile("test.h5")
The model internally uses h5py object API. We can use h5py file, group and dataset as it is.
import h5py
h5 = h5py.File("test.py")
# We can use file
model.insertH5pyObject(h5)
# or group or dataset
model.insertH5pyObject(h5["group1"])
model.insertH5pyObject(h5["group1/dataset50"])
Silx also provides an input API. It supports HDF5 files through h5py.
from silx.io.utils.load import load
# We can load HDF5 files
model.insertH5pyObject(load("test.h5"))
# or Spec files
model.insertH5pyObject(load("test.dat"))
The Hdf5TreeView widget provides default Qt signals inherited from QAbstractItemView.
This signal is emitted when the item specified by index is activated by the user. How to activate items depends on the platform; e.g., by single- or double-clicking the item, or by pressing the Return or Enter key when the item is current.
This signal is emitted when a mouse button is clicked. The item the mouse was clicked on is specified by index. The signal is only emitted when the index is valid.
This signal is emitted when a mouse button is double-clicked. The item the mouse was double-clicked on is specified by index. The signal is only emitted when the index is valid.
This signal is emitted when the mouse cursor enters the item specified by index. Mouse tracking needs to be enabled for this feature to work.
This signal is emitted when a mouse button is pressed. The item the mouse was pressed on is specified by index. The signal is only emitted when the index is valid.
def my_callback(index):
objects = treeview.selectedH5Nodes()
obj = objects[0] # for single selection
print(obj)
print(obj.basename) # not provided by h5py
print(obj.name)
print(obj.file.filename)
print(obj.local_basename) # not provided by h5py
print(obj.local_name) # not provided by h5py
print(obj.local_file.filename) # not provided by h5py
print(obj.attrs)
if obj.ntype is h5py.Dataset:
print(obj.dtype)
print(obj.shape)
print(obj.value)
treeview.clicked.connect(my_callback)
The hdf5widget.py sample code provides an example of properties of the view, the model and the header.
Source code: hdf5widget.py.
After installing silx and downloading the script, you can start it from the command prompt:
python hdf5widget.py <files>
This example loads files added to the command line, or files dropped from the file system. It also provides a GUI to display test files created programmatically.