class QtFits(QApplication): def __init__(self, filename=None): super().__init__([]) self.header = None self.setStyle('Fusion') self.setApplicationName('QtFits') self.overlord = QWidget() self.overlord.resize(800, 500) overlord_layout = QVBoxLayout() self.overlord.setLayout(overlord_layout) overlord_layout.setContentsMargins(0, 0, 0, 0) overlord_layout.setSpacing(0) self.window = QWidget() self.window.resizeEvent = self.resizeEvent self.window.keyPressEvent = self.keyPressEvent grid = QGridLayout() grid.setContentsMargins(0, 0, 0, 0) self.window.setLayout(grid) self.minimap = MiniMap() grid.addWidget(self.minimap, 0, 1, 1, 1) self.main = ImageDisplay() grid.addWidget(self.main, 0, 0, 3, 1) self.cursordisplay = CursorDisplay() grid.addWidget(self.cursordisplay, 1, 1, 1, 1) self.box = DirList() grid.addWidget(self.box, 2, 1, 2, 1) self.histogram = ImageHistogram() grid.addWidget(self.histogram, 3, 0, 1, 1) self.menubar = MenuBar(self) overlord_layout.addWidget(self.menubar) overlord_layout.addWidget(self.window) self.box.main = self.main self.box.list.app = self self.main.histogram = self.histogram self.histogram.main = self.main self.minimap.main = self.main self.main.minimap = self.minimap self.main.cursordisplay = self.cursordisplay self.handlers = { Qt.Key_Escape: self.overlord.close, Qt.Key_Equal: self.main.increase_zoom, Qt.Key_Minus: self.main.decrease_zoom, Qt.Key_Down: self.box.list.selection_down, Qt.Key_Up: self.box.list.selection_up, Qt.Key_Return: self.box.list.select, Qt.Key_Right: self.box.list.select, Qt.Key_Backspace: self.box.list.back, Qt.Key_Left: self.box.list.back, } self.window.setFocusPolicy(Qt.ClickFocus) if filename is not None: self.open(filename) self.overlord.show() self.exec_() def open(self, path, hdu=None): with open(path, 'rb') as input_file: self.hdulist = fits.open(input_file) if hdu is None: hdu = 0 while self.hdulist[hdu].data is None: hdu += 1 self.set_hdu(hdu) def set_hdu(self, hdu): image = self.hdulist[hdu].data.astype(np.float32) self.main.image = image self.header = repr(self.hdulist[hdu].header) self.menubar.set_hdulist(self.hdulist) def open_dialog(self): filename = QFileDialog.getOpenFileName(self.main, 'Open file', '.') if filename[0]: self.open(filename[0]) def show_header(self): header_window = HeaderDisplay(self.header) header_window.show() header_window.exec_() def keyPressEvent(self, event): if event.key() in self.handlers: self.handlers[event.key()]() def resizeEvent(self, event): self.main._refresh_queue.append(self.main.reslice)