def createActions(self): self.insertDatasetAction = QtGui.QAction(QtGui.QIcon(), 'Insert dataset', self, statusTip='Create and insert a dataset under currently selected group', triggered=self.insertDataset) self.insertGroupAction = QtGui.QAction(QtGui.QIcon(), 'Insert group', self, statusTip='Create and insert a group under currently selected group', triggered=self.insertGroup) self.deleteNodeAction = QtGui.QAction(QtGui.QIcon(), 'Delete node', self, statusTip='Delete the currently selected node.', triggered=self.deleteNode)
def addAction(text, parentMenu, triggered, insertBefore=None): action = QtGui.QAction(text, parentMenu) action.triggered.connect(triggered) if insertBefore: parentMenu.insertAction(insertBefore, action) else: parentMenu.addAction(action)
def createActions(self): self.openFileReadOnlyAction = QtGui.QAction( QtGui.QIcon(), 'Open file(s) readonly', self, shortcut=QtGui.QKeySequence.Open, statusTip='Open an HDF5 file for reading', triggered=self.openFilesReadOnly) self.openFileReadWriteAction = QtGui.QAction( QtGui.QIcon(), '&Open file(s) read/write', self, # shortcut=QtGui.QKeySequence.Open, statusTip='Open an HDF5 file for editing', triggered=self.openFilesReadWrite) self.openFileOverwriteAction = QtGui.QAction( QtGui.QIcon(), 'Overwrite file', self, # shortcut=QtGui.QKeySequence.Open, statusTip='Open an HDF5 file for writing (overwrite existing)', triggered=self.openFileOverwrite) self.createFileAction = QtGui.QAction( QtGui.QIcon(), '&New file', self, shortcut=QtGui.QKeySequence.New, statusTip='Create a new HDF5 file', triggered=self.createFile) self.closeFileAction = QtGui.QAction( QtGui.QIcon(), '&Close file(s)', self, shortcut=QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_K), statusTip='Close selected files', triggered=self.sigCloseFiles) self.quitAction = QtGui.QAction(QtGui.QIcon(), '&Quit', self, shortcut=QtGui.QKeySequence.Quit, statusTip='Quit dataviz', triggered=self.doQuit) self.showAttributesAction = QtGui.QAction( QtGui.QIcon(), 'Show attributes', self, shortcut=QtGui.QKeySequence(QtCore.Qt.Key_Return), statusTip='Show attributes', triggered=self.sigShowAttributes) self.showDatasetAction = QtGui.QAction( QtGui.QIcon(), 'Show dataset', self, shortcut=QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_Return), statusTip='Show dataset', triggered=self.sigShowDataset) self.plotDatasetAction = QtGui.QAction( QtGui.QIcon(), 'Plot dataset', self, shortcut=QtGui.QKeySequence(QtCore.Qt.ALT + QtCore.Qt.Key_P), statusTip='Plot dataset', triggered=self.sigPlotDataset)
def initUI(self): exitAction = QtGui.QAction('Exit', self) exitAction.triggered.connect(self.close) exitAction.setShortcut('Ctrl+Q') closeAction = QtGui.QAction('Quit', self) closeAction.triggered.connect(sys.exit) closeAction.setShortcut('Ctrl+X') openFileAction = QtGui.QAction('Open File', self) openFileAction.triggered.connect(self.openfile) selectElementAction = QtGui.QAction('Select Element', self) selectElementAction.triggered.connect(self.selectElement) selectFilesAction = QtGui.QAction('Select Files', self) selectFilesAction.triggered.connect(self.selectFilesShow) xCorAction = QtGui.QAction("Cross Correlation", self) xCorAction.triggered.connect(self.CrossCorrelation_test) phaseXCorAction = QtGui.QAction("Phase Correlation", self) phaseXCorAction.triggered.connect(self.CrossCorrelation_test) runCenterOfMassAction = QtGui.QAction("run center of mass action", self) runCenterOfMassAction.triggered.connect(self.centerOfMassWindow) matcherAction = QtGui.QAction("match template", self) matcherAction.triggered.connect(self.match_window) selectBeamlineAction = QtGui.QAction("select beamline", self) selectBeamlineAction.triggered.connect(self.selectBeamline) openTiffFolderAction = QtGui.QAction("Open Tiff Folder", self) # openTiffFolderAction.triggered.connect(self.openTiffFolder) sinogramAction = QtGui.QAction('Sinogram', self) # sinogramAction.triggered.connect(self.sinogram) saveImageAction = QtGui.QAction('Save Projections', self) # saveImageAction.triggered.connect(self.saveImage) saveThetaTxtAction = QtGui.QAction("Save Theta Postion as txt", self) # saveThetaTxtAction.triggered.connect(self.saveThetaTxt) convertAction = QtGui.QAction('Save data in memory', self) # convertAction.triggered.connect(self.convert) saveSinogramAction = QtGui.QAction('Save Sinogram', self) # saveSinogramAction.triggered.connect(self.saveSinogram) runReconstructAction = QtGui.QAction("Reconstruction", self) # runReconstructAction.triggered.connect(self.runReconstruct) selectImageTagAction = QtGui.QAction("Select Image Tag", self) # selectImageTagAction.triggered.connect(self.selectImageTag) alignFromTextAction = QtGui.QAction("Alignment from Text", self) # alignFromTextAction.triggered.connect(self.alignFromText) alignFromText2Action = QtGui.QAction("Alignment from Text2", self) # alignFromText2Action.triggered.connect(self.alignFromText2) saveAlignToTextAction = QtGui.QAction( "Save Alignment information to text", self) # saveAlignToTextAction.triggered.connect(self.saveAlignToText) restoreAction = QtGui.QAction("Restore", self) # restoreAction.triggered.connect(self.restore) alignCenterOfMassAction = QtGui.QAction( "Align by fitting center of mass position into sine curve", self) # alignCenterOfMassAction.triggered.connect(self.alignCenterOfMass) exportDataAction = QtGui.QAction("export data", self) # exportDataAction.triggered.connect(self.export_data) runTransRecAction = QtGui.QAction("Transmission Recon", self) # runTransRecAction.triggered.connect(self.runTransReconstruct) saveHotSpotPosAction = QtGui.QAction("Save Hot Spot Pos", self) # saveHotSpotPosAction.triggered.connect(self.saveHotSpotPos) alignHotSpotPosAction = QtGui.QAction("Align Hot Spot pos", self) # alignHotSpotPosAction.triggered.connect(self.alignHotSpotPos1) reorderAction = QtGui.QAction("Reorder", self) # reorderAction.triggered.connect(self.reorder_matrix) wienerAction = QtGui.QAction("Wiener", self) # wienerAction.triggered.connect(self.ipWiener) reorderAction = QtGui.QAction("Reorder", self) # reorderAction.triggered.connect(self.reorder_matrix) externalImageRegAction = QtGui.QAction("External Image Registaration", self) # externalImageRegAction.triggered.connect(self.externalImageReg) self.frame = QtGui.QFrame() self.vl = QtGui.QVBoxLayout() self.tab_widget = QtGui.QTabWidget() self.tab_widget.addTab(self.createImageProcessWidget(), unicode("Image Process")) self.tab_widget.addTab(self.createSaveHotspotWidget(), unicode("Alignment")) self.tab_widget.addTab(self.createSinoWidget(), unicode("Sinogram")) self.tab_widget.addTab(self.createReconWidget(), unicode("Reconstruction")) self.tab_widget.currentChanged.connect(self.tab1manual) self.vl.addWidget(self.tab_widget) self.vl.addWidget(self.createMessageWidget()) self.frame.setLayout(self.vl) self.setCentralWidget(self.frame) self.tab_widget.setDisabled(False) ## Top menu bar [file Convert Option Alignment After saving in memory] menubar = self.menuBar() self.fileMenu = menubar.addMenu('&File') self.fileMenu.addAction( selectBeamlineAction) #to replace readconfiguration Action self.fileMenu.addAction(openFileAction) self.fileMenu.addAction(openTiffFolderAction) self.fileMenu.addAction(exitAction) self.fileMenu.addAction(closeAction) self.optionMenu = menubar.addMenu('Convert Option') self.optionMenu.addAction(selectFilesAction) self.optionMenu.addAction(selectImageTagAction) self.optionMenu.addAction(selectElementAction) self.optionMenu.addAction(convertAction) self.optionMenu.setDisabled(False) self.alignmentMenu = menubar.addMenu("Alignment") self.alignmentMenu.addAction(saveAlignToTextAction) self.alignmentMenu.addAction(runCenterOfMassAction) self.alignmentMenu.addAction(alignCenterOfMassAction) self.alignmentMenu.addAction(xCorAction) self.alignmentMenu.addAction(phaseXCorAction) self.alignmentMenu.addAction(matcherAction) self.alignmentMenu.addAction(alignFromTextAction) self.alignmentMenu.addAction(alignFromText2Action) self.alignmentMenu.addAction(saveHotSpotPosAction) self.alignmentMenu.addAction(alignHotSpotPosAction) self.alignmentMenu.addAction(externalImageRegAction) self.alignmentMenu.addAction(restoreAction) self.alignmentMenu.setDisabled(False) self.afterConversionMenu = menubar.addMenu( 'After saving data in memory') self.afterConversionMenu.addAction(saveImageAction) self.afterConversionMenu.addAction(saveThetaTxtAction) self.afterConversionMenu.addAction(saveSinogramAction) self.afterConversionMenu.addAction(reorderAction) self.afterConversionMenu.setDisabled(False) add = 0 if platform == "win32": add = 50 self.setGeometry(add, add, 1100 + add, 500 + add) self.setWindowTitle('Maps_To_Tomopy') self.show()
def __init__(self, **kwargs): """ Parameters ---------- debug : bool, optional If True, extra options are available as a debug tool. Default is False. """ super(App, self).__init__(**kwargs) self._controller_thread = QtCore.QThread() self.controller = ShampooController() self.controller.moveToThread(self._controller_thread) self._controller_thread.start() self.data_viewer = HologramViewer(parent=self) self.reconstructed_viewer = ReconstructedHologramViewer(parent=self) self.time_series_controls = TimeSeriesControls(parent=self) self.time_series_controls.hide() self.controller.time_series_metadata_signal.connect( lambda d: self.time_series_controls.show()) self.controller.time_series_metadata_signal.connect( self.time_series_controls.update_metadata) self.time_series_controls.time_point_request_signal.connect( self.controller.data_from_time_series) self.controller.reconstructed_hologram_signal.connect( self.reconstructed_viewer.display) self.controller.raw_data_signal.connect(self.data_viewer.display) self.file_dialog = QtGui.QFileDialog(parent=self) self.menubar = self.menuBar() # Assemble menu from previously-defined actions self.file_menu = self.menubar.addMenu('&File') raw_data_layout = QtGui.QVBoxLayout() raw_data_layout.addWidget(self.data_viewer) raw_data_layout.addWidget(self.time_series_controls) reconstructed_layout = QtGui.QVBoxLayout() reconstructed_layout.addWidget(self.reconstructed_viewer) self.error_window = QtGui.QErrorMessage(parent=self) self.error_message_signal.connect(self.error_window.showMessage) self.controller.error_message_signal.connect( self.error_window.showMessage) self.layout = QtGui.QHBoxLayout() self.layout.addLayout(raw_data_layout) self.layout.addLayout(reconstructed_layout) self.central_widget = QtGui.QWidget() self.central_widget.setLayout(self.layout) self.setCentralWidget(self.central_widget) self.setGeometry(500, 500, 800, 800) self.setWindowTitle('SHAMPOO') self._center_window() self.showMaximized() self.load_time_series_action = QtGui.QAction('&Load time-series', self) self.load_time_series_action.triggered.connect(self.load_time_series) self.file_menu.addAction(self.load_time_series_action) self.file_menu.addSeparator() self.time_series_creator_action = QtGui.QAction( '&Create hologram times-eries', self) self.time_series_creator_action.triggered.connect( self.launch_time_series_creator) self.file_menu.addAction(self.time_series_creator_action) self.time_series_reconstruct_action = QtGui.QAction( '&Reconstruct a hologram time-series', self) self.time_series_reconstruct_action.triggered.connect( self.launch_time_series_reconstruction) self.file_menu.addAction(self.time_series_reconstruct_action)
def addSeperator(): action = QtGui.QAction('', self.menu) action.setSeparator(True) self.menu.insertAction(insertBefore, action)
def __init__(self, *args, **kwds): pg.ViewBox.__init__(self, *args, **kwds) def addAction(text, parentMenu, triggered, insertBefore=None): action = QtGui.QAction(text, parentMenu) action.triggered.connect(triggered) if insertBefore: parentMenu.insertAction(insertBefore, action) else: parentMenu.addAction(action) insertBefore = self.menu.actions()[0] insertBefore.setText( 'View &All') # Add keyboard shortcut to the View All option def addSeperator(): action = QtGui.QAction('', self.menu) action.setSeparator(True) self.menu.insertAction(insertBefore, action) self.menuSearch = QtGui.QMenu('&Search Markets', self.menu) self.menu.insertMenu(insertBefore, self.menuSearch) action = QtGui.QAction('&All', self.menuSearch) action.triggered.connect(lambda _: self.cg.openSearchMenu(None)) self.menuSearch.addAction(action) for exchange in sorted(exchanges.EXCHANGES, key=lambda e: e.name): if exchange.__class__.__base__ != exchanges.ExchangeWithSearch: continue addAction(exchange.nameWithShortcut, self.menuSearch, lambda _, e=exchange: self.cg.openSearchMenu(e)) def openWatchlist(): watchlist = self.cg.watchlist = watchlists.WatchlistWindow(self.cg) # Default position of watchlist at top right or parent chart window geo = watchlist.geometry() parentGeo = self.cg.window.geometry().topRight() geo.moveTo(parentGeo) watchlist.setGeometry(geo) watchlist.show() watchlist.startWatchlist() addAction('Open Watch&list', self.menu, openWatchlist, insertBefore) addSeperator() # Add interval submenu to context menu timeframeMenu = QtGui.QMenu('&Timeframe', self.menu) # Create the interval options depending on what chart group we are looking at. def onTimeframeMenuShow(): timeframeMenu.clear() data = self.cg.data if not data.count(): return intervals = data.exchange.intervals sortedBySeconds = sorted(intervals, key=lambda i: intervalSeconds(i)) lastIntervalLetter = '' for timeframe in sortedBySeconds: interval = timeframe if interval == '5m': interval = '&5m' elif interval[-1] != lastIntervalLetter: lastIntervalLetter = interval[-1] interval = interval[:-1] + '&' + lastIntervalLetter addAction(interval, timeframeMenu, lambda _, timeframe=timeframe: self.cg. changeTimeInterval(timeframe)) timeframeMenu.aboutToShow.connect(onTimeframeMenuShow) self.menu.insertMenu(insertBefore, timeframeMenu) # Add links submenu to context menu linksMenu = QtGui.QMenu('Links', self.menu) def onLinksMenuShow(): linksMenu.clear() for desc, url in sorted(self.cg.links.items()): addAction(desc, linksMenu, lambda _, url=url: QtGui.QDesktopServices.openUrl( QtCore.QUrl(url))) linksMenu.aboutToShow.connect(onLinksMenuShow) self.menu.insertMenu(insertBefore, linksMenu) # Add resample submenu to context menu resampleMenu = QtGui.QMenu('R&esample Time', self.menu) def onResampleMenuShow(): resampleMenu.clear() data = self.cg.data if not data.count(): return resampleTable = { '4&h': ['m', 'h'], '1&w': ['d'], '1&M': ['d'], '1&d': ['h'] } for toTime, fromTime in resampleTable.items(): if data.timeframe[-1] in fromTime: addAction(toTime, resampleMenu, lambda _, toTime=toTime: self.cg.resampleData( toTime.replace('&', ''))) resampleMenu.aboutToShow.connect(onResampleMenuShow) self.menu.insertMenu(insertBefore, resampleMenu) optionsMenu = QtGui.QMenu('Chart &Options', self.menu) self.menu.insertMenu(insertBefore, optionsMenu) def addToggle(showMember, text): def toggle(cg, showMember): showVar = 'show' + showMember value = not getattr(cg, showVar) setattr(cg, showVar, value) gSettings.setValue(showVar, value) if value and showMember == 'Orderwall': # Toggling the orderwall requires downloading the orderbook cg.downloadNewData() else: cg.reAddPlotItems() addAction(text, optionsMenu, lambda: toggle(self.cg, showMember)) for var, desc in SHOW_OPTIONS: addToggle(var, desc) addAction('&Refresh Chart', self.menu, lambda: self.cg.downloadNewData(), insertBefore) addSeperator() def newChart(cg, incRowOrCol): newCoord = [cg.coord[0], cg.coord[1]] newCoord[incRowOrCol] += 1 cg.window.setChartAt(None, newCoord) addAction('New Chart &Horizontally', self.menu, lambda: newChart(self.cg, COL), insertBefore) addAction('New Chart &Vertically', self.menu, lambda: newChart(self.cg, ROW), insertBefore) addAction('Co&py Chart', self.menu, lambda: self.cg.copyMarketToAdjacentChart(None), insertBefore) addAction('&Close Chart', self.menu, lambda: self.cg.window.removeChart(self.cg), insertBefore) addSeperator()