def __init__(self, parent): super(DataListWidget, self).__init__(parent) self.ivm = parent.ivm self._selected = None self._roi_icon = QtGui.QIcon(get_icon("roi_data.png")) self._data_icon = QtGui.QIcon(get_icon("data.png")) self._main_icon = QtGui.QIcon(get_icon("main_data.png")) self._vis_icon = QtGui.QIcon(get_icon("visible.png")) self._main_vis_icon = QtGui.QIcon(get_icon("main_ovl.png")) self.model = QtGui.QStandardItemModel() self.setModel(self.model) self._update_list() self.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) self.setSelectionMode(QtGui.QAbstractItemView.SingleSelection) self.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) self.verticalHeader().setVisible(False) self.horizontalHeader().setVisible(False) self.clicked.connect(self._clicked) self.ivm.sig_main_data.connect(self._update_list) self.ivm.sig_current_data.connect(self._update_list) self.ivm.sig_all_data.connect(self._update_list) self.ivm.sig_current_roi.connect(self._update_list)
def _toggle_single_multi(self): self.ivl.multiview = not self.ivl.multiview self._up_btn.setVisible(self.ivl.multiview) self._down_btn.setVisible(self.ivl.multiview) if self.ivl.multiview: self._single_multi_btn.setIcon( QtGui.QIcon(get_icon("single_overlay.png"))) else: self._single_multi_btn.setIcon( QtGui.QIcon(get_icon("multi_overlay.png")))
def __init__(self, ivl, rois=True, data=True): OptionBox.__init__(self, border=True) self.ivl = ivl self.ivm = ivl.ivm self._qpdata = None self._no_update = False self.grid.setVerticalSpacing(2) self._view_btn = QtGui.QPushButton() self._view_btn.setIcon(QtGui.QIcon(get_icon("visible.png"))) self._view_btn.setFixedSize(16, 16) self._view_btn.setToolTip("Visibility") self._view_btn.clicked.connect(self._view_btn_clicked) self._data = self.add("Data" if data else "ROI", DataOption(self.ivm, data=data, rois=rois, follow_current=True), self._view_btn, key="data") self._view_roi = self.add("View ROI", DataOption(self.ivm, data=False, rois=True), checked=True, key="view_roi") self._levels_btn = QtGui.QPushButton() self._levels_btn.setIcon(QtGui.QIcon(get_icon("levels.png"))) self._levels_btn.setFixedSize(16, 16) self._levels_btn.setToolTip("Adjust colour map levels") self._levels_btn.clicked.connect(self._levels_clicked) self._cmap = self.add("Colour map", ChoiceOption([ "jet", "hot", "gist_heat", "flame", "bipolar", "spectrum", "custom" ]), self._levels_btn, key="cmap") self._alpha = self.add("Alpha", NumericOption(minval=0, maxval=255, default=255, edit=False, intonly=True), key="alpha") self._value_label = QtGui.QLabel() self.add("Value", self._value_label) self.add("", stretch=2) self._data.sig_changed.connect(self._data_changed) self._view_roi.sig_changed.connect(self._view_roi_changed) self._cmap.sig_changed.connect(self._cmap_changed) self._alpha.sig_changed.connect(self._alpha_changed) self.ivl.sig_focus_changed.connect(self._focus_changed) self.qpdata = None
def __init__(self, parent=None, title="", **kwargs): """ Create a plot widget :param qpo: Global options """ QtGui.QWidget.__init__(self, parent) self.items = [] self.updating = False self.legend_pos = (30, 30) vbox = QtGui.QVBoxLayout() self.setLayout(vbox) hbox = QtGui.QHBoxLayout() hbox.addStretch(1) if kwargs.get("opts_btn", True): self.opts_btn = OptionsButton() self.opts_btn.clicked.connect(self._show_options) hbox.addWidget(self.opts_btn) if kwargs.get("clear_btn", False): clear_icon = QtGui.QIcon(get_icon("clear")) self.clear_btn = QtGui.QPushButton(self) self.clear_btn.setIcon(clear_icon) self.clear_btn.setIconSize(QtCore.QSize(14, 14)) self.clear_btn.setToolTip("Clear curves") self.clear_btn.clicked.connect(self.clear) hbox.addWidget(self.clear_btn) vbox.addLayout(hbox) self.graphics_layout = pg.GraphicsLayoutWidget() self.graphics_layout.setBackground(background=None) vbox.addWidget(self.graphics_layout, 10) self.axes = self.graphics_layout.addPlot() self.axes.setTitle(title) self.axes.sigRangeChanged.connect(self._range_changed) self.axes.vb.sigRangeChangedManually.connect( self._range_changed_manually) if kwargs.get("twoaxis", False): # For a second y-axis, create a new ViewBox, link the right axis to its coordinate system self.axes_alt = pg.ViewBox() self.axes.scene().addItem(self.axes_alt) self.axes.getAxis('right').linkToView(self.axes_alt) self.axes_alt.setXLink(self.axes) self.axes.vb.sigResized.connect(self._update_plot_viewbox) else: self.axes_alt = None self.options = PlotOptions(self, **kwargs) self._options_changed() self.options.sig_options_changed.connect(self._options_changed) self._regenerate_legend()
def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setWindowTitle("License Agreement") layout = QtGui.QVBoxLayout() hbox = QtGui.QHBoxLayout() pixmap = QtGui.QPixmap(get_icon("quantiphyse_75.png")) lpic = QtGui.QLabel(self) lpic.setPixmap(pixmap) hbox.addWidget(lpic) hbox.addStretch(1) layout.addLayout(hbox) layout.addWidget(QtGui.QLabel("")) # Welcome hbox = QtGui.QHBoxLayout() hbox.addStretch(1) hbox.addWidget( QtGui.QLabel("\n<font size=5>Welcome to Quantiphyse %s</font>" % get_version())) hbox.addStretch(1) layout.addLayout(hbox) label = QtGui.QLabel( "Quantiphyse is <b>free for non-commercial use</b>. If you are interested in using the software " "commercially, please contact the technology transfer company of the University: [email protected]" ) label.setWordWrap(True) layout.addWidget(label) # License agreement edit = QtGui.QTextEdit() edit.setCurrentFont(QtGui.QFont("Monospace", 8)) edit.append(__license__) edit.append("</pre>") edit.moveCursor(QtGui.QTextCursor.Start) edit.ensureCursorVisible() layout.addWidget(edit) # Acceptance section self.agree_cb = QtGui.QCheckBox( "I agree to abide by the terms of the Quantiphyse license") self.agree_cb.stateChanged.connect(self._agree_changed) layout.addWidget(self.agree_cb) # Buttons self.button_box = QtGui.QDialogButtonBox( QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) self.button_box.accepted.connect(self.accept) self.button_box.rejected.connect(self.reject) self.button_box.button(QtGui.QDialogButtonBox.Ok).setEnabled(False) layout.addWidget(self.button_box) self.setLayout(layout) self.setFixedSize(700, 800)
def init_ui(self): layout = QtGui.QVBoxLayout() title = TitleWidget(self, help="roibuilder", batch_btn=False) layout.addWidget(title) self.options = OptionBox("Options") btn = QtGui.QPushButton("New") btn.clicked.connect(self._new_roi) self.options.add("ROI", DataOption(self.ivm, rois=True, data=False), btn, key="roi") self.options.add("Current label", NumericOption(minval=1, slider=False, intonly=True), key="label") self.options.add("Label description", TextOption(), key="label_text") self.options.option("roi").sig_changed.connect(self._roi_changed) self.options.option("label").sig_changed.connect(self._label_changed) self.options.option("label_text").sig_changed.connect(self._label_text_changed) layout.addWidget(self.options) # Add toolbox buttons in a grid hbox = QtGui.QHBoxLayout() self._toolbox = QtGui.QGroupBox() self._toolbox.setTitle("Toolbox") self.tools_grid = QtGui.QGridLayout() self._toolbox.setLayout(self.tools_grid) x, y, cols = 0, 0, 4 for tool in TOOLS: self._add_tool(tool, y, x) x += 1 if x == cols: y += 1 x = 0 self._undo_btn = QtGui.QPushButton() self._undo_btn.clicked.connect(self.undo) self._undo_btn.setEnabled(False) undo_icon = QtGui.QIcon(get_icon("undo")) self._undo_btn.setIcon(undo_icon) self._undo_btn.setToolTip("Undo last action") self._undo_btn.setFixedSize(32, 32) self.tools_grid.addWidget(self._undo_btn, y, x) hbox.addWidget(self._toolbox) self._toolbox.setEnabled(False) hbox.addStretch(1) layout.addLayout(hbox) # Tool options box - initially invisible hbox = QtGui.QHBoxLayout() self._tool_options = QtGui.QGroupBox() self._tool_options.setVisible(False) hbox.addWidget(self._tool_options) hbox.addStretch(1) layout.addLayout(hbox) layout.addStretch(1) self.setLayout(layout)
def _add_tool(self, tool, x, y): tool.ivm = self.ivm tool.ivl = self.ivl tool.builder = self btn = QtGui.QPushButton() btn.setIcon(QtGui.QIcon(get_icon(tool.name.lower()))) btn.setToolTip(tool.tooltip) btn.setFixedSize(32, 32) btn.clicked.connect(self._tool_selected(tool)) tool.btn = btn self.tools_grid.addWidget(btn, x, y)
def __init__(self, ivl, view): QtGui.QGroupBox.__init__(self) self.ivl = ivl self.ivm = ivl.ivm self.view = view grid = QtGui.QGridLayout() grid.setVerticalSpacing(2) grid.setContentsMargins(5, 5, 5, 5) self.setLayout(grid) grid.addWidget(QtGui.QLabel("Overlay"), 0, 0) self.overlay_combo = OverlayCombo(self.ivm, none_option=True, set_first=False) grid.addWidget(self.overlay_combo, 0, 1) grid.addWidget(QtGui.QLabel("View"), 1, 0) self.ov_view_combo = QtGui.QComboBox() self.ov_view_combo.addItem("All") self.ov_view_combo.addItem("Only in ROI") self.ov_view_combo.addItem("None") grid.addWidget(self.ov_view_combo, 1, 1) grid.addWidget(QtGui.QLabel("Color map"), 2, 0) hbox = QtGui.QHBoxLayout() self.ov_cmap_combo = QtGui.QComboBox() self.ov_cmap_combo.addItem("jet") self.ov_cmap_combo.addItem("hot") self.ov_cmap_combo.addItem("gist_heat") self.ov_cmap_combo.addItem("flame") self.ov_cmap_combo.addItem("bipolar") self.ov_cmap_combo.addItem("spectrum") hbox.addWidget(self.ov_cmap_combo) self.ov_levels_btn = QtGui.QPushButton() self.ov_levels_btn.setIcon(QtGui.QIcon(get_icon("levels.png"))) self.ov_levels_btn.setFixedSize(16, 16) self.ov_levels_btn.setToolTip("Adjust colour map levels") self.ov_levels_btn.clicked.connect(self._show_ov_levels) self.ov_levels_btn.setEnabled(False) hbox.addWidget(self.ov_levels_btn) grid.addLayout(hbox, 2, 1) grid.addWidget(QtGui.QLabel("Alpha"), 3, 0) self.ov_alpha_sld = QtGui.QSlider(QtCore.Qt.Horizontal, self) self.ov_alpha_sld.setFocusPolicy(QtCore.Qt.NoFocus) self.ov_alpha_sld.setRange(0, 255) self.ov_alpha_sld.setValue(255) grid.addWidget(self.ov_alpha_sld, 3, 1) grid.setRowStretch(4, 1) self.overlay_combo.currentIndexChanged.connect(self._combo_changed) self.ov_view_combo.currentIndexChanged.connect(self._view_changed) self.ov_cmap_combo.currentIndexChanged.connect(self._cmap_changed) self.ov_alpha_sld.valueChanged.connect(self._alpha_changed) self.view.sig_view_changed.connect(self._update)
def init_ui(self): layout = QtGui.QVBoxLayout() hbox = QtGui.QHBoxLayout() pixmap = QtGui.QPixmap(get_icon("quantiphyse_75.png")) lpic = QtGui.QLabel(self) lpic.setPixmap(pixmap) hbox.addWidget(lpic) hbox.addStretch(1) help_btn = HelpButton(self) hbox.addWidget(help_btn) layout.addLayout(hbox) summary_label = QtGui.QLabel(SUMMARY) summary_label.setWordWrap(True) layout.addWidget(summary_label) box = QtGui.QGroupBox() hbox = QtGui.QHBoxLayout() box.setLayout(hbox) disc = QtGui.QLabel( "<font size=2> Disclaimer: This software has been developed for research purposes only, and " "should not be used as a diagnostic tool. The authors or distributors will not be " "responsible for any direct, indirect, special, incidental, or consequential damages " "arising of the use of this software. By using the this software you agree to this disclaimer." "<p>" "Please read the Quantiphyse License for more information") disc.setWordWrap(True) hbox.addWidget(disc, 10) license_btn = QtGui.QPushButton("License") license_btn.clicked.connect(self._view_license) hbox.addWidget(license_btn) layout.addWidget(box) self.data_list = DataListWidget(self) layout.addWidget(self.data_list) hbox = QtGui.QHBoxLayout() btn = QtGui.QPushButton("Rename") btn.clicked.connect(self._rename) hbox.addWidget(btn) btn = QtGui.QPushButton("Delete") btn.clicked.connect(self._delete) hbox.addWidget(btn) btn = QtGui.QPushButton("Set as main data") btn.clicked.connect(self._set_main) hbox.addWidget(btn) btn = QtGui.QPushButton("Toggle ROI") btn.clicked.connect(self._toggle_roi) hbox.addWidget(btn) layout.addLayout(hbox) self.setLayout(layout)
def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setWindowTitle("Optional Registration") layout = QtGui.QVBoxLayout() hbox = QtGui.QHBoxLayout() pixmap = QtGui.QPixmap(get_icon("quantiphyse_75.png")) lpic = QtGui.QLabel(self) lpic.setPixmap(pixmap) hbox.addWidget(lpic) hbox.addStretch(1) layout.addLayout(hbox) layout.addWidget(QtGui.QLabel("")) # Welcome hbox = QtGui.QHBoxLayout() hbox.addWidget( QtGui.QLabel("<font size=5>Optional Registration</font>")) layout.addLayout(hbox) # Registration section label = QtGui.QLabel( "If you like you can register as a user. This is to " "help us know where the software is being used.") label.setWordWrap(True) layout.addWidget(label) grid = QtGui.QGridLayout() grid.addWidget(QtGui.QLabel("<font size=2>Name"), 0, 0) self.name_edit = QtGui.QLineEdit() grid.addWidget(self.name_edit, 0, 1) grid.addWidget(QtGui.QLabel("<font size=2>Institution"), 0, 2) self.inst_edit = QtGui.QLineEdit() grid.addWidget(self.inst_edit, 0, 3) grid.addWidget(QtGui.QLabel("<font size=2>Email"), 1, 0) self.email_edit = QtGui.QLineEdit() grid.addWidget(self.email_edit, 1, 1, 1, 3) layout.addLayout(grid) # Buttons self.button_box = QtGui.QDialogButtonBox( QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) self.button_box.accepted.connect(self.send_register_email) self.button_box.rejected.connect(self.accept) layout.addWidget(self.button_box) self.setLayout(layout) self.setFixedWidth(700)
def __init__(self, parent): super(DataListWidget, self).__init__(parent) self.setStyleSheet( "font-size: 10px; alternate-background-color: #6c6c6c;") self.ivm = parent.ivm self.ivl = parent.ivl self._selected = None self._known_data = [] self._roi_icon = QtGui.QIcon(get_icon("roi_data.png")) self._data_icon = QtGui.QIcon(get_icon("data.png")) self._main_icon = QtGui.QIcon(get_icon("main_data.png")) self._vis_icon = QtGui.QIcon(get_icon("visible.png")) self._main_vis_icon = QtGui.QIcon(get_icon("main_ovl.png")) self.model = QtGui.QStandardItemModel() self.setModel(self.model) self._update_list() self.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) self.setSelectionMode(QtGui.QAbstractItemView.SingleSelection) self.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) self.setShowGrid(False) self.setTextElideMode(QtCore.Qt.ElideLeft) self.setAlternatingRowColors(True) self.verticalHeader().setVisible(False) self.verticalHeader().setDefaultSectionSize( self.verticalHeader().minimumSectionSize() + 2) self.horizontalHeader().setVisible(True) self.horizontalHeader().setDefaultAlignment(QtCore.Qt.AlignLeft) self.selectionModel().currentRowChanged.connect( self._current_row_changed) self.ivm.sig_all_data.connect(self._data_changed) self.ivm.sig_main_data.connect(self._update_vis_icons) self.ivm.sig_current_data.connect(self._set_current) self.ivm.sig_current_roi.connect(self._set_current)
def _get_visibility_icon(self): if self._qpdata.view.visible == Visibility.HIDE: icon = "invisible.png" elif self._qpdata.roi: if self._qpdata.view.contour and self._qpdata.view.shade: icon = "shade_contour.png" elif self._qpdata.view.contour: icon = "contour.png" elif self._qpdata.view.shade: icon = "shade.png" else: icon = "invisible.png" else: icon = "visible.png" return QtGui.QIcon(get_icon(icon))
def init_menu(self): """ Set up the main window menus """ # File --> Load Data load_action = QtGui.QAction(QtGui.QIcon(get_icon("picture")), '&Load Data', self) load_action.setShortcut('Ctrl+L') load_action.setStatusTip('Load a 3d or 4d image or ROI') load_action.triggered.connect(self.load_data_interactive) # File --> Save Data save_ovreg_action = QtGui.QAction( QtGui.QIcon.fromTheme("document-save"), '&Save current data', self) save_ovreg_action.setStatusTip('Save current data as a NIFTI file') save_ovreg_action.triggered.connect(self.save_data) save_ovreg_action.setShortcut('Ctrl+S') # File --> Save ROI save_roi_action = QtGui.QAction(QtGui.QIcon.fromTheme("document-save"), '&Save current ROI', self) save_roi_action.setStatusTip('Save current ROI as a NIFTI file') save_roi_action.triggered.connect(self.save_roi) # File --> Clear all clear_action = QtGui.QAction(QtGui.QIcon.fromTheme("clear"), '&Clear all data', self) clear_action.setStatusTip('Remove all data from the viewer') clear_action.triggered.connect(self._clear) # File --> Exit exit_action = QtGui.QAction(QtGui.QIcon.fromTheme("application-exit"), '&Exit', self) exit_action.setShortcut('Ctrl+Q') exit_action.setStatusTip('Exit Application') exit_action.triggered.connect(self.close) # About about_action = QtGui.QAction(QtGui.QIcon.fromTheme("help-about"), '&About', self) about_action.setStatusTip('About Quantiphyse') about_action.triggered.connect(self._show_about) # Help -- > Online help help_action = QtGui.QAction(QtGui.QIcon.fromTheme("help-contents"), '&Online Help', self) help_action.setStatusTip('See online help file') help_action.triggered.connect(self._show_help) # Advanced --> Python Console console_action = QtGui.QAction(QtGui.QIcon(get_icon("console")), '&Console', self) console_action.setStatusTip('Run a console for advanced interaction') console_action.triggered.connect(self.show_console) # Advanced --> Install Packages #install_action = QtGui.QAction(QtGui.QIcon(get_icon("package")), '&Install Packages', self) #install_action.setStatusTip('Install additional packages') #install_action.triggered.connect(self.install_packages) menubar = self.menuBar() file_menu = menubar.addMenu('&File') widget_menu = menubar.addMenu('&Widgets') advanced_menu = menubar.addMenu('&Advanced') help_menu = menubar.addMenu('&Help') file_menu.addAction(load_action) file_menu.addAction(save_ovreg_action) file_menu.addAction(save_roi_action) file_menu.addAction(clear_action) file_menu.addAction(exit_action) widget_submenus = {"": widget_menu} default_widget_groups = [ "Visualisation", "Processing", "Clustering", "ROIs", "Utilities" ] for group in default_widget_groups: widget_submenus[group] = widget_menu.addMenu(group) for group in sorted(self.widget_groups.keys()): if group != "DEFAULT": if group not in widget_submenus: widget_submenus[group] = widget_menu.addMenu(group) for w in self.widget_groups[group]: action = QtGui.QAction(w.icon, '&%s' % w.name, self) action.setStatusTip(w.description) action.widget = w action.triggered.connect(self._show_widget) widget_submenus[group].addAction(action) help_menu.addAction(help_action) help_menu.addAction(about_action) advanced_menu.addAction(console_action) #advanced_menu.addAction(install_action) # extra info displayed in the status bar self.statusBar()
def __init__(self, load_data=None, widgets=True): super(MainWindow, self).__init__() self.ivm = ImageVolumeManagement() self.view_options_dlg = ViewOptions(self, self.ivm) self.ivl = ImageView(self.ivm, self.view_options_dlg) # Load style sheet stylesheet = get_local_file("resources/darkorange.stylesheet") with open(stylesheet, "r") as stylesheet_file: self.setStyleSheet(stylesheet_file.read()) # Default dir to load files from is the user's home dir self.default_directory = os.path.expanduser("~") # Widgets self.widget_groups = {} self.current_widget = None # Main layout - image view to left, tabs to right main_widget = QtGui.QWidget() hbox = QtGui.QHBoxLayout() splitter = QtGui.QSplitter(QtCore.Qt.Horizontal) splitter.addWidget(self.ivl) splitter.setStretchFactor(0, 4) hbox.addWidget(splitter) main_widget.setLayout(hbox) self.setCentralWidget(main_widget) if widgets: default_size = (1000, 700) widgets = get_plugins("widgets") for wclass in widgets: w = wclass(ivm=self.ivm, ivl=self.ivl, opts=self.view_options_dlg) if w.group not in self.widget_groups: self.widget_groups[w.group] = [] self.widget_groups[w.group].append(w) for _, widgets in self.widget_groups.items(): widgets.sort(key=lambda x: x.position) self._init_tabs() splitter.addWidget(self.tab_widget) splitter.setStretchFactor(1, 1) else: default_size = (700, 700) self.init_menu() # General properties of main window self.setWindowTitle("Quantiphyse %s" % get_version()) self.setWindowIcon(QtGui.QIcon(get_icon("main_icon.png"))) self.resize(*default_size) self.setUnifiedTitleAndToolBarOnMac(True) self.setAcceptDrops(True) self.show() # Load any files from the command line if load_data: for fname in load_data: self.load_data(fname=fname)
def init_ui(self): layout = QtGui.QVBoxLayout() hbox = QtGui.QHBoxLayout() pixmap = QtGui.QPixmap(get_icon("quantiphyse_75.png")) lpic = QtGui.QLabel(self) lpic.setPixmap(pixmap) hbox.addWidget(lpic) hbox.addStretch(1) help_btn = HelpButton(self) hbox.addWidget(help_btn) layout.addLayout(hbox) summary_label = QtGui.QLabel(SUMMARY) summary_label.setWordWrap(True) layout.addWidget(summary_label) box = QtGui.QGroupBox() hbox = QtGui.QHBoxLayout() box.setLayout(hbox) disc = QtGui.QLabel( "<font size=2> Disclaimer: This software has been developed for research purposes only, and " "should not be used as a diagnostic tool. The authors or distributors will not be " "responsible for any direct, indirect, special, incidental, or consequential damages " "arising of the use of this software. By using the this software you agree to this disclaimer." "<p>" "Please read the Quantiphyse License for more information") disc.setWordWrap(True) hbox.addWidget(disc, 10) license_btn = QtGui.QPushButton("License") license_btn.clicked.connect(self._view_license) hbox.addWidget(license_btn) layout.addWidget(box) self.data_list = DataListWidget(self) layout.addWidget(self.data_list) hbox = QtGui.QHBoxLayout() self._up_btn = self._btn(hbox, QtGui.QIcon(get_icon("up.png")), "Raise data set in viewing order", self._up) self._down_btn = self._btn(hbox, QtGui.QIcon(get_icon("down.png")), "Lower data set in viewing order", self._down) self._btn(hbox, QtGui.QIcon(get_icon("delete.png")), "Delete selected data set", self._delete) self._btn(hbox, QtGui.QIcon(get_icon("save.png")), "Save selected data set", self._save) self._btn(hbox, QtGui.QIcon(get_icon("reload.png")), "Reload selected data set", self._reload) self._btn(hbox, QtGui.QIcon(get_icon("rename.png")), "Rename selected data set", self._rename) self._btn(hbox, QtGui.QIcon(get_icon("main_data.png")), "Make selected data set the main (background) data", self._set_main) self._btn(hbox, QtGui.QIcon(get_icon("roi_or_data.png")), "Mark/unmark selected data set as an ROI", self._toggle_roi) hbox.addStretch(1) self._single_multi_btn = self._btn( hbox, QtGui.QIcon(get_icon("multi_overlay.png")), "Switch between single and multi overlay modes", self._toggle_single_multi) self._btn(hbox, QtGui.QIcon(get_icon("options.png")), "Viewer options", self._viewer_options) layout.addLayout(hbox) self.setLayout(layout) self._toggle_single_multi()