def __init__(self, file_names=None): qt.QWidget.__init__(self) self.__treeview = silx.gui.hdf5.Hdf5TreeView(self) self.__text = qt.QTextEdit(self) self.__dataViewer = DataViewerFrame(self) vSplitter = qt.QSplitter(qt.Qt.Vertical) vSplitter.addWidget(self.__dataViewer) vSplitter.addWidget(self.__text) vSplitter.setSizes([10, 0]) splitter = qt.QSplitter(self) splitter.addWidget(self.__treeview) splitter.addWidget(vSplitter) splitter.setStretchFactor(1, 1) layout = qt.QVBoxLayout() layout.addWidget(splitter) layout.setStretchFactor(splitter, 1) self.setLayout(layout) # append all files to the tree if not file_names is None: for file_name in file_names: self.__treeview.findHdf5TreeModel().appendFile(file_name) self.__treeview.activated.connect(self.displayData)
def __init__(self, filenames=None): """ :param files_: List of HDF5 or Spec files (pathes or :class:`silx.io.spech5.SpecH5` or :class:`h5py.File` instances) """ qt.QMainWindow.__init__(self) self.setWindowTitle("Silx HDF5 widget example") self.__asyncload = False self.__treeview = silx.gui.hdf5.Hdf5TreeView(self) """Silx HDF5 TreeView""" self.__text = qt.QTextEdit(self) """Widget displaying information""" self.__dataViewer = DataViewerFrame(self) vSpliter = qt.QSplitter(qt.Qt.Vertical) vSpliter.addWidget(self.__dataViewer) vSpliter.addWidget(self.__text) vSpliter.setSizes([10, 0]) spliter = qt.QSplitter(self) spliter.addWidget(self.__treeview) spliter.addWidget(vSpliter) spliter.setStretchFactor(1, 1) main_panel = qt.QWidget(self) layout = qt.QVBoxLayout() layout.addWidget(spliter) layout.addWidget( self.createTreeViewConfigurationPanel(self, self.__treeview)) layout.setStretchFactor(spliter, 1) main_panel.setLayout(layout) self.setCentralWidget(main_panel) # append all files to the tree for file_name in filenames: self.__treeview.findHdf5TreeModel().appendFile(file_name) self.__treeview.activated.connect(self.displayData) self.__treeview.activated.connect( lambda index: self.displayEvent("activated", index)) self.__treeview.clicked.connect( lambda index: self.displayEvent("clicked", index)) self.__treeview.doubleClicked.connect( lambda index: self.displayEvent("doubleClicked", index)) self.__treeview.entered.connect( lambda index: self.displayEvent("entered", index)) self.__treeview.pressed.connect( lambda index: self.displayEvent("pressed", index)) self.__treeview.addContextMenuCallback(self.customContextMenu) # lambda function will never be called cause we store it as weakref self.__treeview.addContextMenuCallback(lambda event: None) # you have to store it first self.__store_lambda = lambda event: self.closeAndSyncCustomContextMenu( event) self.__treeview.addContextMenuCallback(self.__store_lambda)
def __init__(self): """ :param files_: List of HDF5 or Spec files (pathes or :class:`silx.io.spech5.SpecH5` or :class:`h5py.File` instances) """ # Import it here to be sure to use the right logging level import silx.gui.hdf5 from silx.gui.data.DataViewerFrame import DataViewerFrame qt.QMainWindow.__init__(self) self.setWindowTitle("Silx viewer") self.__asyncload = False self.__dialogState = None self.__treeview = silx.gui.hdf5.Hdf5TreeView(self) """Silx HDF5 TreeView""" self.__dataViewer = DataViewerFrame(self) vSpliter = qt.QSplitter(qt.Qt.Vertical) vSpliter.addWidget(self.__dataViewer) vSpliter.setSizes([10, 0]) spliter = qt.QSplitter(self) spliter.addWidget(self.__treeview) spliter.addWidget(vSpliter) spliter.setStretchFactor(1, 1) main_panel = qt.QWidget(self) layout = qt.QVBoxLayout() layout.addWidget(spliter) layout.setStretchFactor(spliter, 1) main_panel.setLayout(layout) self.setCentralWidget(main_panel) model = self.__treeview.selectionModel() model.selectionChanged.connect(self.displayData) self.__treeview.addContextMenuCallback( self.closeAndSyncCustomContextMenu) treeModel = self.__treeview.findHdf5TreeModel() columns = list(treeModel.COLUMN_IDS) columns.remove(treeModel.DESCRIPTION_COLUMN) columns.remove(treeModel.NODE_COLUMN) self.__treeview.header().setSections(columns) self.createActions() self.createMenus()
def __init__(self, parent=None): super(XrfWidget, self).__init__() self.map = MapWidget(self) self.spectrum = SpectrumWidget(self) self.setLayout(qt.QHBoxLayout()) splitter = qt.QSplitter() splitter.addWidget(self.spectrum) splitter.addWidget(self.map) self.layout().addWidget(splitter) # connect the interpolation thingies self.map.interpolBox.valueChanged.connect(self.updateMap) # connect the positions button self.map.positionsAction.triggered.connect(self.togglePositions) # connect the selection tools self.map.indexSelectionChanged.connect(self.selectByIndex) self.map.clickSelectionChanged.connect(self.selectByPosition) self.map.selectionCleared.connect(self.clearSelection) # connect the mask widget to the update self.map.getMaskToolsDockWidget().widget()._mask.sigChanged.connect(self.updateSpectrum) self.spectrum.getCurvesRoiWidget().sigROISignal.connect(self.updateMap) # keep track of map selections by ROI or by index self.selectionMode = 'roi' # 'roi' or 'ind' # workaround to avoid multiple updates self.last_map_update = 0.0
def makeSplitters(self): layout = qt.QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) self.splitter = qt.QSplitter(self) self.splitter.setOrientation(qt.Qt.Horizontal) layout.addWidget(self.splitter) self.setLayout(layout) self.splitterFiles = qt.QSplitter(self.splitter) self.splitterFiles.setOrientation(qt.Qt.Vertical) self.splitterData = qt.QSplitter(self.splitter) self.splitterData.setOrientation(qt.Qt.Vertical) self.splitterPlot = qt.QSplitter(self.splitter) self.splitterPlot.setOrientation(qt.Qt.Vertical) self.splitterTransform = qt.QSplitter(self.splitter) self.splitterTransform.setOrientation(qt.Qt.Vertical)
def __init__(self, parent=None): super(ScalarWidget, self).__init__() self.map = MapWidget(self) self.value = qt.QLabel(self) self.value.setText('scalar value') self.setLayout(qt.QHBoxLayout()) splitter = qt.QSplitter() splitter.addWidget(self.value) splitter.addWidget(self.map) splitter.setSizes((300, 300)) self.layout().addWidget(splitter) # connect the interpolation thingies self.map.interpolBox.valueChanged.connect(self.updateMap) # connect the selection tools self.map.indexSelectionChanged.connect(self.selectByIndex) self.map.clickSelectionChanged.connect(self.selectByPosition) self.map.selectionCleared.connect(self.clearSelection) # connect the positions button self.map.positionsAction.triggered.connect(self.togglePositions) # connect the mask widget to the update self.map.getMaskToolsDockWidget().widget()._mask.sigChanged.connect( self.updateImage) # keep track of map selections by ROI or by index self.selectionMode = 'roi' # 'roi' or 'ind'
def __init__(self, filenames=None): """ :param files_: List of HDF5 or Spec files (pathes or :class:`silx.io.spech5.SpecH5` or :class:`h5py.File` instances) """ qt.QMainWindow.__init__(self) self.setWindowTitle("Silx HDF5 widget example") self.__asyncload = False self.__treeview = silx.gui.hdf5.Hdf5TreeView(self) """Silx HDF5 TreeView""" self.__sourceModel = self.__treeview.model() """Store the source model""" self.__text = qt.QTextEdit(self) """Widget displaying information""" self.__dataViewer = DataViewerFrame(self) vSpliter = qt.QSplitter(qt.Qt.Vertical) vSpliter.addWidget(self.__dataViewer) vSpliter.addWidget(self.__text) vSpliter.setSizes([10, 0]) spliter = qt.QSplitter(self) spliter.addWidget(self.__treeview) spliter.addWidget(vSpliter) spliter.setStretchFactor(1, 1) main_panel = qt.QWidget(self) layout = qt.QVBoxLayout() layout.addWidget(spliter) layout.addWidget( self.createTreeViewConfigurationPanel(self, self.__treeview)) layout.setStretchFactor(spliter, 1) main_panel.setLayout(layout) self.setCentralWidget(main_panel) # append all files to the tree for file_name in filenames: self.__treeview.findHdf5TreeModel().appendFile(file_name) self.__treeview.activated.connect(self.displayData)
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.hist = Plot1D(self) self.stack = StackView(self) self.stack.setColormap({'name': 'viridis', 'autoscale': True}) self.setLayout(qt.QHBoxLayout()) splitter = qt.QSplitter() splitter.addWidget(self.hist) splitter.addWidget(self.stack) self.layout().addWidget(splitter)
def main(filenames): app = qt.QApplication([]) window = qt.QSplitter() tree = hdf5.Hdf5TreeView(window) window.addWidget(tree) window.setVisible(True) model = tree.findHdf5TreeModel() for filename in filenames: model.insertFile(filename) app.exec_()
def __init__(self, parent=None): qt.QMainWindow.__init__(self, parent) self.setWindowTitle("HDF5 viewer") # create a tree and a DataViewer separated by a splitter splitter = qt.QSplitter() self.tree = hdf5.Hdf5TreeView(splitter) self.dataViewer = DataViewer(splitter) splitter.addWidget(self.tree) splitter.addWidget(self.dataViewer) splitter.setStretchFactor(1, 1) splitter.setVisible(True) self.setCentralWidget(splitter)
def __init__(self, file_name=None): qt.QWidget.__init__(self) self.__treeview = silx.gui.hdf5.Hdf5TreeView(self) self.__text = qt.QTextEdit(self) self.__dataViewer = DataViewerFrame(self) box = oasysgui.widgetBox(self, "", orientation="vertical") box.layout().addWidget(self.__dataViewer) self.box_scale = oasysgui.widgetBox(box, "", orientation="horizontal") gui.button(self.box_scale, self, "Apply Coordinates", callback=self.rescale) vSplitter = qt.QSplitter(qt.Qt.Vertical) vSplitter.addWidget(box) vSplitter.addWidget(self.__text) vSplitter.setSizes([10, 0]) splitter = qt.QSplitter(self) splitter.addWidget(self.__treeview) splitter.addWidget(vSplitter) splitter.setStretchFactor(1, 1) layout = qt.QVBoxLayout() layout.addWidget(splitter) layout.setStretchFactor(splitter, 1) self.setLayout(layout) # append all files to the tree if not file_name is None: self.__treeview.findHdf5TreeModel().removeRow(0) self.__treeview.findHdf5TreeModel().appendFile(file_name) self.__treeview.activated.connect(self.displayData)
def main(filenames): app = qt.QApplication([]) window = qt.QSplitter() tree = hdf5.Hdf5TreeView(window) window.addWidget(tree) window.setVisible(True) model = tree.findHdf5TreeModel() for filename in filenames: # # TODO: Load each filename into the model tree # print("Load %s" % filename) app.exec_()
def __init__(self, parent=None): qt.QMainWindow.__init__(self, parent) self.setWindowTitle("HDF5 viewer") # create a tree and a DataViewer separated by a splitter splitter = qt.QSplitter() self.tree = hdf5.Hdf5TreeView(splitter) self.dataViewer = DataViewer(splitter) splitter.addWidget(self.tree) splitter.addWidget(self.dataViewer) splitter.setStretchFactor(1, 1) splitter.setVisible(True) self.setCentralWidget(splitter) # connect activated (dbl-click, return key) to a callback self.tree.activated.connect(self.onTreeActivated)
def createCentralWidget(self): splitter = qt.QSplitter(self) # the tree self.tree = silx.gui.hdf5.Hdf5TreeView(self) # the data viewer self.viewer = silx.gui.data.DataViewerFrame.DataViewerFrame(self) splitter.addWidget(self.tree) splitter.addWidget(self.viewer) splitter.setStretchFactor(1, 1) # # EXERCISE: Connect the callback onTreeActivated (bellow) # to a mouse event from the tree # return splitter
def __init__(self, parent=None): super(ComWidget, self).__init__(parent=parent) self.setLayout(qt.QVBoxLayout()) # the direction menu hbox = qt.QHBoxLayout() self.directionCombo = qt.QComboBox() self.directionCombo.insertItems( 1, ['', 'horizontal', 'vertical', 'magnitude']) self.directionCombo.currentIndexChanged.connect(self.updateMap) hbox.addWidget(qt.QLabel('COM direction:')) hbox.addWidget(self.directionCombo) hbox.addStretch(1) self.layout().addLayout(hbox) # the image and map parts splitter = qt.QSplitter() self.map = MapWidget(self) self.image = ImageWidget(self) splitter.addWidget(self.image) splitter.addWidget(self.map) self.layout().addWidget(splitter) # gray out useless buttons self.map.selectAction.setEnabled(False) self.map.roiAction.setEnabled(False) self.map.clearAction.setEnabled(False) self.map.indexBox.setEnabled(False) # connect the positions button self.map.positionsAction.triggered.connect(self.togglePositions) # connect the mask widget to the update self.image.getMaskToolsDockWidget().widget()._mask.sigChanged.connect( self.updateMap)
def __init__(self, parent=None): qt.QMainWindow.__init__(self, parent) self.setWindowTitle("HDF5 viewer") # create a tree and a DataViewer separated by a splitter splitter = qt.QSplitter() self.tree = hdf5.Hdf5TreeView(splitter) self.dataViewer = DataViewer(splitter) splitter.addWidget(self.tree) splitter.addWidget(self.dataViewer) splitter.setStretchFactor(1, 1) splitter.setVisible(True) self.setCentralWidget(splitter) # # TODO: Connect onTreeActivated the tree event # # # TODO: Register populateContextMenu to the context menu callback of the tree # self.background = None self.flatfield = None
def __init__(self, parent=None, settings=None): """ Constructor """ qt.QMainWindow.__init__(self, parent) self.setWindowTitle("Silx viewer") silxIcon = icons.getQIcon("silx") self.setWindowIcon(silxIcon) self.__context = ApplicationContext(self, settings) self.__context.restoreLibrarySettings() self.__dialogState = None self.__customNxDataItem = None self.__treeview = silx.gui.hdf5.Hdf5TreeView(self) self.__treeview.setExpandsOnDoubleClick(False) """Silx HDF5 TreeView""" rightPanel = qt.QSplitter(self) rightPanel.setOrientation(qt.Qt.Vertical) self.__splitter2 = rightPanel self.__displayIt = None self.__treeWindow = self.__createTreeWindow(self.__treeview) # Custom the model to be able to manage the life cycle of the files treeModel = silx.gui.hdf5.Hdf5TreeModel(self.__treeview, ownFiles=False) treeModel.sigH5pyObjectLoaded.connect(self.__h5FileLoaded) treeModel.sigH5pyObjectRemoved.connect(self.__h5FileRemoved) treeModel.sigH5pyObjectSynchronized.connect(self.__h5FileSynchonized) treeModel.setDatasetDragEnabled(True) treeModel2 = silx.gui.hdf5.NexusSortFilterProxyModel(self.__treeview) treeModel2.setSourceModel(treeModel) treeModel2.sort(0, qt.Qt.AscendingOrder) treeModel2.setSortCaseSensitivity(qt.Qt.CaseInsensitive) self.__treeview.setModel(treeModel2) rightPanel.addWidget(self.__treeWindow) self.__customNxdata = CustomNxdataWidget(self) self.__customNxdata.setSelectionBehavior(qt.QAbstractItemView.SelectRows) # optimise the rendering self.__customNxdata.setUniformRowHeights(True) self.__customNxdata.setIconSize(qt.QSize(16, 16)) self.__customNxdata.setExpandsOnDoubleClick(False) self.__customNxdataWindow = self.__createCustomNxdataWindow(self.__customNxdata) self.__customNxdataWindow.setVisible(False) rightPanel.addWidget(self.__customNxdataWindow) rightPanel.setStretchFactor(1, 1) rightPanel.setCollapsible(0, False) rightPanel.setCollapsible(1, False) self.__dataPanel = DataPanel(self, self.__context) spliter = qt.QSplitter(self) spliter.addWidget(rightPanel) spliter.addWidget(self.__dataPanel) spliter.setStretchFactor(1, 1) self.__splitter = spliter main_panel = qt.QWidget(self) layout = qt.QVBoxLayout() layout.addWidget(spliter) layout.setStretchFactor(spliter, 1) main_panel.setLayout(layout) self.setCentralWidget(main_panel) self.__treeview.activated.connect(self.displaySelectedData) self.__customNxdata.activated.connect(self.displaySelectedCustomData) self.__customNxdata.sigNxdataItemRemoved.connect(self.__customNxdataRemoved) self.__customNxdata.sigNxdataItemUpdated.connect(self.__customNxdataUpdated) self.__treeview.addContextMenuCallback(self.customContextMenu) treeModel = self.__treeview.findHdf5TreeModel() columns = list(treeModel.COLUMN_IDS) columns.remove(treeModel.DESCRIPTION_COLUMN) columns.remove(treeModel.NODE_COLUMN) self.__treeview.header().setSections(columns) self._iconUpward = icons.getQIcon('plot-yup') self._iconDownward = icons.getQIcon('plot-ydown') self.createActions() self.createMenus() self.__context.restoreSettings()
def __init__(self): """ :param files_: List of HDF5 or Spec files (pathes or :class:`silx.io.spech5.SpecH5` or :class:`h5py.File` instances) """ # Import it here to be sure to use the right logging level import silx.gui.hdf5 from silx.gui.data.DataViewerFrame import DataViewerFrame qt.QMainWindow.__init__(self) self.setWindowTitle("Silx viewer") self.__context = ApplicationContext(self) self.__context.restoreLibrarySettings() self.__asyncload = False self.__dialogState = None self.__treeview = silx.gui.hdf5.Hdf5TreeView(self) """Silx HDF5 TreeView""" # Custom the model to be able to manage the life cycle of the files treeModel = silx.gui.hdf5.Hdf5TreeModel(self.__treeview, ownFiles=False) treeModel.sigH5pyObjectLoaded.connect(self.__h5FileLoaded) treeModel.sigH5pyObjectRemoved.connect(self.__h5FileRemoved) treeModel.sigH5pyObjectSynchronized.connect(self.__h5FileSynchonized) treeModel2 = silx.gui.hdf5.NexusSortFilterProxyModel(self.__treeview) treeModel2.setSourceModel(treeModel) self.__treeview.setModel(treeModel2) self.__dataViewer = DataViewerFrame(self) self.__dataViewer.setGlobalHooks(self.__context) vSpliter = qt.QSplitter(qt.Qt.Vertical) vSpliter.addWidget(self.__dataViewer) vSpliter.setSizes([10, 0]) spliter = qt.QSplitter(self) spliter.addWidget(self.__treeview) spliter.addWidget(vSpliter) spliter.setStretchFactor(1, 1) self.__spliter = spliter main_panel = qt.QWidget(self) layout = qt.QVBoxLayout() layout.addWidget(spliter) layout.setStretchFactor(spliter, 1) main_panel.setLayout(layout) self.setCentralWidget(main_panel) model = self.__treeview.selectionModel() model.selectionChanged.connect(self.displayData) self.__treeview.addContextMenuCallback( self.closeAndSyncCustomContextMenu) treeModel = self.__treeview.findHdf5TreeModel() columns = list(treeModel.COLUMN_IDS) columns.remove(treeModel.DESCRIPTION_COLUMN) columns.remove(treeModel.NODE_COLUMN) self.__treeview.header().setSections(columns) self._iconUpward = icons.getQIcon('plot-yup') self._iconDownward = icons.getQIcon('plot-ydown') self.createActions() self.createMenus() self.__context.restoreSettings()