def new_viewer(self, name=None, settings=None): if not name: self.count += 1 name = 'v%d' % self.count if settings is None: settings = self.preferences.createCategory('ipg_viewer') settings.load(onError='silent') settings.addDefaults(autocut_method='zscale') # instantiate bindings loaded with users preferences bclass = IPyNbImageView.bindingsClass bindprefs = self.preferences.createCategory('bindings') bd = bclass(self.logger, settings=bindprefs) # create a ginga basic object for user interaction fi = IPyNbImageView(self.logger, settings=settings, render='widget', bindings=bd) fi.enable_draw(False) fi.set_callback('drag-drop', self.drop_file, name) fi.set_bg(0.2, 0.2, 0.2) fi.ui_setActive(True) # expose the fits viewer to the shared namespace self.kapp.namespace[name] = fi # enable various interactive operations bd = fi.get_bindings() bd.enable_all(True) # get the ginga Qt widget w = fi.get_widget() w.resize(512, 512) # pack it into a qt window with a couple other buttons vw = QtGui.QWidget() vbox = QtGui.QVBoxLayout() vbox.setContentsMargins(QtCore.QMargins(2, 2, 2, 2)) vbox.setSpacing(1) vbox.addWidget(w, stretch=1) # for simple WCS readout self.readout = Readout(-1, 16) readout = self.readout.get_widget() fi.set_callback('none-move', self.motion, self.readout) vbox.addWidget(readout, stretch=0, alignment=QtCore.Qt.AlignCenter) hbox = QtGui.QHBoxLayout() hbox.setContentsMargins(QtCore.QMargins(4, 2, 4, 2)) wopen = QtGui.QPushButton("Open File") def _open_file(name): return lambda: self.open_file(name) wopen.clicked.connect(_open_file(name)) wquit = QtGui.QPushButton("Close") def _close(name): return lambda: self.close_viewer(name) wquit.clicked.connect(_close(name)) hbox.addStretch(1) for w in (wopen, wquit): hbox.addWidget(w, stretch=0) hw = QtGui.QWidget() hw.setLayout(hbox) vbox.addWidget(hw, stretch=0) vw.setLayout(vbox) vw.resize(524, 540) vw.setWindowTitle("Ginga: %s" % name) self.viewers[name] = vw vw.showNormal() vw.raise_() vw.activateWindow()