def __init__(self, parent, toolbar): QSplitter.__init__(self, parent) self.setContentsMargins(10, 10, 10, 10) self.setOrientation(Qt.Vertical) imagelistwithproperties = ImageListWithProperties(self) self.addWidget(imagelistwithproperties) self.imagelist = imagelistwithproperties.imagelist self.imagelist.currentRowChanged.connect(self.current_item_changed) self.imagelist.itemSelectionChanged.connect(self.selection_changed) self.properties = imagelistwithproperties.properties self.properties.SIG_APPLY_BUTTON_CLICKED.connect( self.properties_changed) self.imagewidget = ImageWidget(self) self.imagewidget.plot.SIG_LUT_CHANGED.connect(self.lut_range_changed) self.item = None # image item self.imagewidget.add_toolbar(toolbar, "default") self.imagewidget.register_all_image_tools() self.addWidget(self.imagewidget) self.images = [] # List of ImageParam instances self.lut_ranges = [] # List of LUT ranges self.setStretchFactor(0, 0) self.setStretchFactor(1, 1) self.setHandleWidth(10) self.setSizes([1, 2])
def keyPressEvent(self, event): """ """ # preflight if not self.isSoloViewEnabled(): QSplitter.keyPressEvent(self, event) # solo view if event.key() == self.soloViewHotkey(): # preflight pos = QCursor.pos() widget_pressed = qApp.widgetAt(pos) if isinstance(widget_pressed, QSplitterHandle): return # toggle solo view widget_soloable = self.getFirstSoloableWidget(widget_pressed) self.toggleIsSoloView(True, widget=widget_soloable) return # unsolo view elif event.key() == Qt.Key_Escape: self.toggleIsSoloView(False) return # something else return QSplitter.keyPressEvent(self, event)
def initUI(self): """ Define UI elements of the app's main window """ # Create navbars self.treeView = self.make_left_navbar() # Make overall layout main_layout = QHBoxLayout() splitter = QSplitter(Qt.Horizontal) splitter.addWidget(self.treeView) splitter.addWidget(self.make_central_column()) splitter.addWidget(self.make_right_navbar()) splitter.setSizes([200, 700, 10]) main_layout.addWidget(splitter) self.treeView.setHidden(True) # Create main window widget main_widget = QWidget() main_widget.setObjectName("MainWidget") main_widget.setLayout(main_layout) self.setCentralWidget(main_widget)
def __init__(self, presenter, dims_info, can_normalise, parent=None, conf=None): super().__init__(parent) self.presenter = presenter self.setWindowFlags(Qt.Window) self.setAttribute(Qt.WA_DeleteOnClose, True) self._splitter = QSplitter(self) self._data_view = SliceViewerDataView(presenter, dims_info, can_normalise, self, conf) self._splitter.addWidget(self._data_view) # peaks viewer off by default self._peaks_view = None layout = QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self._splitter) self.setLayout(layout) # connect up additional peaks signals self.data_view.mpl_toolbar.peaksOverlayClicked.connect( self.peaks_overlay_clicked)
def __init__(self): super().__init__() self.gateway = QGateWay(self) self.tree = QTreeView(self) self.tree.setHeaderHidden(True) # self.tree.setSelectionMode(QTreeView.MultiSelection) self.model = OMEROTreeModel(self.gateway, self) self.thumb_grid = ThumbGrid(self.gateway, self) self.thumb_grid.hide() self.login = LoginForm(self.gateway, self) self.login.setWindowFlags(self.login.windowFlags() & ~Qt.Dialog) self.tree.setModel(self.model) self.tree.selectionModel().selectionChanged.connect( self._on_tree_selection) self.thumb_grid.itemSelectionChanged.connect( self._on_thumbnail_selected) layout = QVBoxLayout(self) self.splitter = QSplitter(Qt.Vertical, self) self.status = QLabel(self) self.status.hide() self.status.setAlignment(Qt.AlignCenter) self.status.setStyleSheet("QLabel{color: #AAA;}") layout.addWidget(self.status) layout.addWidget(self.splitter) self.splitter.addWidget(self.login) self.splitter.addWidget(self.tree) self.splitter.addWidget(self.thumb_grid) self.gateway.connected.connect(self._show_connection_label)
def __init__(self, parent): QSplitter.__init__(self, parent) self.imagelist = QListWidget(self) self.addWidget(self.imagelist) self.properties = DataSetEditGroupBox(_("Properties"), ImageParam) self.properties.setEnabled(False) self.addWidget(self.properties)
def __init__(self, *args, catalog, menuBar, zmq_address=None, **kwargs): super().__init__(*args, **kwargs) # Define models. search_state = SearchState(catalog=catalog) self.search_model = search_state.search_results_model # Define widgets. self.search_widget = SearchWidget() self.summary_widget = SummaryWidget() left_pane = QSplitter(Qt.Vertical) left_pane.addWidget(self.search_widget) left_pane.addWidget(self.summary_widget) layout = QHBoxLayout() splitter = QSplitter(Qt.Horizontal) layout.addWidget(splitter) splitter.addWidget(left_pane) self.setLayout(layout) def show_double_clicked_entry(index): search_state.search_results_model.emit_open_entries(None, [index]) # Set models, connect signals, and set initial values. now = time.time() ONE_WEEK = 60 * 60 * 24 * 7 self.search_widget.search_results_widget.setModel( search_state.search_results_model) self.search_widget.search_input_widget.search_bar.textChanged.connect( search_state.search_results_model.on_search_text_changed) self.search_widget.catalog_selection_widget.catalog_list.setModel( search_state.catalog_selection_model) self.search_widget.search_input_widget.until_widget.dateTimeChanged.connect( search_state.search_results_model.on_until_time_changed) self.search_widget.search_input_widget.until_widget.setDateTime( QDateTime.fromSecsSinceEpoch(now + ONE_WEEK)) self.search_widget.search_input_widget.since_widget.dateTimeChanged.connect( search_state.search_results_model.on_since_time_changed) self.search_widget.search_input_widget.since_widget.setDateTime( QDateTime.fromSecsSinceEpoch(now - ONE_WEEK)) self.search_widget.catalog_selection_widget.catalog_list.currentIndexChanged.connect( search_state.set_selected_catalog) self.search_widget.search_results_widget.selectionModel( ).selectionChanged.connect( search_state.search_results_model.emit_selected_result) self.search_widget.search_results_widget.doubleClicked.connect( show_double_clicked_entry) search_state.search_results_model.selected_result.connect( self.summary_widget.set_entries) search_state.search_results_model.valid_custom_query.connect( self.search_widget.search_input_widget.mark_custom_query) search_state.sig_update_header.connect( self.search_widget.search_results_widget.hide_hidden_columns) search_state.enabled = True search_state.search()
def __init__(self, *args): super(CatalogAndAnalysisSplitWidget, self).__init__(*args) self.splitter = QSplitter(Qt.Horizontal) self.catalog_view = MyImageView() self.results_view = ImageView() self.splitter.addWidget(self.catalog_view) self.splitter.addWidget(self.results_view) layout = QVBoxLayout() layout.addWidget(self.splitter) self.setLayout(layout)
def __init__(self, parent, **kwargs): QWidget.__init__(self, parent) self.plugin = parent.get_plugin() self.last_modelpath = None # Create and place Model Selector txt = _("Model") if sys.platform == 'darwin': expr_label = QLabel(" " + txt) else: expr_label = QLabel(txt) # expr_label.setAlignment(Qt.AlignCenter | Qt.AlignRight) self.model_selector = MxModelSelector(self) selector_layout = QHBoxLayout() selector_layout.addWidget(expr_label) selector_layout.addWidget(self.model_selector) selector_layout.insertStretch(-1, 1) selector_layout.setStretch(0, 0) selector_layout.setStretch(1, 1) # Create widget and add to dockwindow self.explorer = MxExplorer(self) # Create code list self.codelist = MxCodeListWidget(self) self.propwidget = MxPropertyWidget(self, orientation=Qt.Vertical) self.datalist = MxDataListWidget(self, orientation=Qt.Vertical) # Create splitter self.splitter = QSplitter(self) self.splitter.setContentsMargins(0, 0, 0, 0) # self.splitter.addWidget(self.widget) # self.splitter.setStretchFactor(0, 5) # self.splitter.setStretchFactor(1, 1) self.tabwidget = QTabWidget(parent=self) # self.tabwidget.setContentsMargins(0, 0, 0, 0) MxMainWidget.IdxProperties = self.tabwidget.addTab(self.propwidget, "Properties") MxMainWidget.IdxFormulas = self.tabwidget.addTab(self.codelist, "Formulas") MxMainWidget.IdxDataList = self.tabwidget.addTab(self.datalist, "Data") # Layout management self.splitter.addWidget(self.explorer) self.splitter.addWidget(self.tabwidget) layout = create_plugin_layout(selector_layout, self.splitter) self.setLayout(layout) self.setFocusPolicy(Qt.ClickFocus)
def __init__(self, parent, **kwargs): QWidget.__init__(self, parent) if spyder.version_info > (5,): self.plugin = parent.get_plugin() else: self.plugin = parent self.last_modelpath = None # Create tool bar if "options_button" in kwargs: self.options_button = kwargs["options_button"] else: self.options_button = None self.plugin_actions = [] MxToolBarMixin.__init__( self, options_button=self.options_button, plugin_actions=self.plugin_actions ) # Create widget and add to dockwindow self.explorer = MxExplorer(self) # Create code list self.codelist = MxCodeListWidget(self) self.propwidget = MxPropertyWidget(self, orientation=Qt.Vertical) self.datalist = MxDataListWidget(self, orientation=Qt.Vertical) # Create splitter self.splitter = QSplitter(self) self.splitter.setContentsMargins(0, 0, 0, 0) # self.splitter.addWidget(self.widget) # self.splitter.setStretchFactor(0, 5) # self.splitter.setStretchFactor(1, 1) self.tabwidget = QTabWidget(parent=self) # self.tabwidget.setContentsMargins(0, 0, 0, 0) MxMainWidget.IdxProperties = self.tabwidget.addTab(self.propwidget, "Properties") MxMainWidget.IdxFormulas = self.tabwidget.addTab(self.codelist, "Formulas") MxMainWidget.IdxDataList = self.tabwidget.addTab(self.datalist, "Data") # Layout management self.splitter.addWidget(self.explorer) self.splitter.addWidget(self.tabwidget) layout = create_plugin_layout(self.tools_layout, self.splitter) self.setFocusPolicy(Qt.ClickFocus) self.setLayout(layout)
def __init__(self, parent=None): QDialog.__init__(self, parent) self.main = parent # Widgets self.pages_widget = QStackedWidget() self.pages_widget.setMinimumWidth(600) self.contents_widget = QListWidget() self.button_reset = QPushButton(_('Reset to defaults')) bbox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Apply | QDialogButtonBox.Cancel) self.apply_btn = bbox.button(QDialogButtonBox.Apply) self.ok_btn = bbox.button(QDialogButtonBox.Ok) # Widgets setup # Destroying the C++ object right after closing the dialog box, # otherwise it may be garbage-collected in another QThread # (e.g. the editor's analysis thread in Spyder), thus leading to # a segmentation fault on UNIX or an application crash on Windows self.setAttribute(Qt.WA_DeleteOnClose) self.setWindowTitle(_('Preferences')) self.setWindowIcon(ima.icon('configure')) self.contents_widget.setMovement(QListView.Static) self.contents_widget.setSpacing(1) self.contents_widget.setCurrentRow(0) self.contents_widget.setMinimumWidth(220) self.contents_widget.setMinimumHeight(400) # Layout hsplitter = QSplitter() hsplitter.addWidget(self.contents_widget) hsplitter.addWidget(self.pages_widget) hsplitter.setStretchFactor(0, 1) hsplitter.setStretchFactor(1, 2) btnlayout = QHBoxLayout() btnlayout.addWidget(self.button_reset) btnlayout.addStretch(1) btnlayout.addWidget(bbox) vlayout = QVBoxLayout() vlayout.addWidget(hsplitter) vlayout.addLayout(btnlayout) self.setLayout(vlayout) # Signals and slots if self.main: self.button_reset.clicked.connect(self.main.reset_spyder) self.pages_widget.currentChanged.connect(self.current_page_changed) self.contents_widget.currentRowChanged.connect( self.pages_widget.setCurrentIndex) bbox.accepted.connect(self.accept) bbox.rejected.connect(self.reject) bbox.clicked.connect(self.button_clicked) # Ensures that the config is present on spyder first run CONF.set('main', 'interface_language', load_lang_conf())
def __init__(self, *args, **kwargs): super(SplitHorizontal, self).__init__(*args, **kwargs) self.splitter = QSplitter(Qt.Vertical) self.splitter.setSizes([100, 200]) self.layout.addWidget(self.splitter) self.setLayout(self.layout) QApplication.setStyle(QStyleFactory.create('Cleanlooks')) self.setGeometry(300, 300, 300, 200) self.max_canvases = 2 self.icon = QIcon(path('icons/1x1hor.png'))
def insert_widget_into_splitter(splitter: QSplitter, widget: QWidget, append: bool): ''' Helper function to ease insertion of dock area into splitter Parameters ---------- splitter : QSplitter widget : QWidget append : bool ''' if append: return splitter.addWidget(widget) return splitter.insertWidget(0, widget)
def __init__(self): super(MyImageWidget, self).__init__() self.splitter = QSplitter(Qt.Horizontal) self.catalog_view = MyImageView() self.results_view = ImageView() # When pulling out, need to make sure other modules reference # viewers correctly ..... self.splitter.addWidget(self.catalog_view) self.splitter.addWidget(self.results_view) layout = QVBoxLayout() layout.addWidget(self.splitter) self.setLayout(layout)
def replace_splitter_widget(splitter: QSplitter, from_: QWidget, to: QWidget): ''' Replace the from widget in the given splitter with the To widget Parameters ---------- splitter : QSplitter from : QWidget to : QWidget ''' index = splitter.indexOf(from_) from_.setParent(None) logger.debug('replace splitter widget %d %s -> %s', index, from_, to) splitter.insertWidget(index, to)
def __init__(self, parent=None, objname=None): QDialog.__init__(self, parent) # If used for data object in tree, the main is the tree widget. self.parent = parent self.objname = objname # Widgets self.pages_widget = QStackedWidget() self.contents_widget = QListWidget() self.button_reset = QPushButton(_('Reset to defaults')) bbox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Apply | QDialogButtonBox.Cancel) self.apply_btn = bbox.button(QDialogButtonBox.Apply) # Widgets setup # Destroying the C++ object right after closing the dialog box, # otherwise it may be garbage-collected in another QThread # (e.g. the editor's analysis thread in Ezcad), thus leading to # a segmentation fault on UNIX or an application crash on Windows self.setAttribute(Qt.WA_DeleteOnClose) if self.objname is None: self.setWindowTitle(_('Preferences')) else: self.setWindowTitle(_('Preferences of ') + self.objname) self.setWindowIcon(ima.icon('configure')) self.contents_widget.setMovement(QListView.Static) self.contents_widget.setSpacing(1) self.contents_widget.setCurrentRow(0) # Layout hsplitter = QSplitter() hsplitter.addWidget(self.contents_widget) hsplitter.addWidget(self.pages_widget) hsplitter.setSizes([150,500]) btnlayout = QHBoxLayout() btnlayout.addWidget(self.button_reset) btnlayout.addStretch(1) btnlayout.addWidget(bbox) vlayout = QVBoxLayout() vlayout.addWidget(hsplitter) vlayout.addLayout(btnlayout) self.setLayout(vlayout) # Signals and slots self.pages_widget.currentChanged.connect(self.current_page_changed) self.contents_widget.currentRowChanged.connect( self.pages_widget.setCurrentIndex) bbox.accepted.connect(self.accept) bbox.rejected.connect(self.reject) bbox.clicked.connect(self.button_clicked) # Ensures that the config is present on ezcad first run CONF.set('main', 'interface_language', load_lang_conf())
def __init__(self, *args, **kwargs): super(SplitHorizontal, self).__init__(*args, **kwargs) self.splitter = QSplitter(Qt.Vertical) self.splitter.setSizes([100, 200]) self.layout.addWidget(self.splitter) self.setLayout(self.layout) QApplication.setStyle(QStyleFactory.create('Cleanlooks')) self.setGeometry(300, 300, 300, 200) self.max_canvases = 2 # Set attrs for when the buttons are created self.icon = QIcon(path('icons/1x1hor.png')) self.tool_tip = "Horizontal Split View" self.whats_this = "Displays up to two visualized data items in a horizontal layout."
def __init__(self, *args, **kwargs): super(SplitThreeView, self).__init__(*args, **kwargs) self.top_splitter = QSplitter(Qt.Horizontal) self.top_splitter.setSizes([100, 200]) self.outer_splitter = QSplitter(Qt.Vertical) self.outer_splitter.insertWidget(0, self.top_splitter) self.layout.addWidget(self.outer_splitter) self.setLayout(self.layout) QApplication.setStyle(QStyleFactory.create('Cleanlooks')) self.setGeometry(300, 300, 300, 200) self.max_canvases = 3 self.icon = QIcon(path('icons/2x1grid.png'))
def __init__(self, appdata: CnaData): QWidget.__init__(self) self.appdata = appdata self.last_selected = None self.reaction_counter = 1 self.add_button = QPushButton("Add new reaction") self.add_button.setIcon(QIcon.fromTheme("list-add")) policy = QSizePolicy() policy.ShrinkFlag = True self.add_button.setSizePolicy(policy) self.reaction_list = DragableTreeWidget() self.reaction_list.setDragEnabled(True) self.reaction_list.setHeaderLabels(["Id", "Name", "Flux"]) self.reaction_list.setSortingEnabled(True) for r in self.appdata.project.cobra_py_model.reactions: self.add_reaction(r) self.reaction_mask = ReactionMask(self) self.reaction_mask.hide() self.layout = QVBoxLayout() self.layout.setContentsMargins(0, 0, 0, 0) l = QHBoxLayout() l.setAlignment(Qt.AlignRight) l.addWidget(self.add_button) self.splitter = QSplitter() self.splitter.setOrientation(Qt.Vertical) self.splitter.addWidget(self.reaction_list) self.splitter.addWidget(self.reaction_mask) self.layout.addItem(l) self.layout.addWidget(self.splitter) self.setLayout(self.layout) self.reaction_list.currentItemChanged.connect(self.reaction_selected) self.reaction_mask.reactionChanged.connect( self.handle_changed_reaction) self.reaction_mask.reactionDeleted.connect( self.handle_deleted_reaction) self.reaction_mask.jumpToMap.connect(self.emit_jump_to_map) self.reaction_mask.jumpToMetabolite.connect( self.emit_jump_to_metabolite) self.add_button.clicked.connect(self.add_new_reaction)
class CatalogAndAnalysisSplitWidget(QWidget): def __init__(self, *args): super(CatalogAndAnalysisSplitWidget, self).__init__(*args) self.splitter = QSplitter(Qt.Horizontal) self.catalog_view = MyImageView() self.results_view = ImageView() self.splitter.addWidget(self.catalog_view) self.splitter.addWidget(self.results_view) layout = QVBoxLayout() layout.addWidget(self.splitter) self.setLayout(layout) def set_image(self, image): self.results_view.setImage(image) def catalog(self): return self.catalog_view.catalog
def __init__(self, parent=None): QDialog.__init__(self, parent) self.main = parent # Widgets self.pages_widget = QStackedWidget() self.pages_widget.setMinimumWidth(600) self.contents_widget = QListWidget() self.button_reset = QPushButton(_('Reset to defaults')) bbox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Apply | QDialogButtonBox.Cancel) self.apply_btn = bbox.button(QDialogButtonBox.Apply) # Widgets setup # Destroying the C++ object right after closing the dialog box, # otherwise it may be garbage-collected in another QThread # (e.g. the editor's analysis thread in Spyder), thus leading to # a segmentation fault on UNIX or an application crash on Windows self.setAttribute(Qt.WA_DeleteOnClose) self.setWindowTitle(_('Preferences')) self.setWindowIcon(ima.icon('configure')) self.contents_widget.setMovement(QListView.Static) self.contents_widget.setSpacing(1) self.contents_widget.setCurrentRow(0) self.contents_widget.setMinimumWidth(220) self.contents_widget.setMinimumHeight(400) # Layout hsplitter = QSplitter() hsplitter.addWidget(self.contents_widget) hsplitter.addWidget(self.pages_widget) hsplitter.setStretchFactor(0, 1) hsplitter.setStretchFactor(1, 2) btnlayout = QHBoxLayout() btnlayout.addWidget(self.button_reset) btnlayout.addStretch(1) btnlayout.addWidget(bbox) vlayout = QVBoxLayout() vlayout.addWidget(hsplitter) vlayout.addLayout(btnlayout) self.setLayout(vlayout) # Signals and slots if self.main: self.button_reset.clicked.connect(self.main.reset_spyder) self.pages_widget.currentChanged.connect(self.current_page_changed) self.contents_widget.currentRowChanged.connect( self.pages_widget.setCurrentIndex) bbox.accepted.connect(self.accept) bbox.rejected.connect(self.reject) bbox.clicked.connect(self.button_clicked) # Ensures that the config is present on spyder first run CONF.set('main', 'interface_language', load_lang_conf())
def __init__(self, widget: QWidget, buttonText: str, parent=None): """ Constructs a widget that lets the passed ``widget`` keep an internal collapsed state that can be triggered when a button is clicked. Internally, when the button is clicked, a toggled signal is emitted, indicating what the collapse state has been toggled to. Additionally, this signal is connected to the collapse() slot, which will collapse the passed widget if another widget has been added via addWidget(). The widget added via addWidget() is not collapsible. Parameters ---------- widget The widget to make collapsible. buttonText The text of the button that will be used to collapse. parent The parent widget. """ super(CollapsibleWidget, self).__init__(parent) self.widget = widget self.buttonText = buttonText self.collapsed = False toolBar = QToolBar() action = toolBar.addAction(self.buttonText, self.toggle) action.setIconText("&" + action.text()) self.collapseButton = toolBar.widgetForAction(action) self.collapseButton.setCheckable(True) self.collapseButton.setChecked(not self.collapsed) self.splitter = QSplitter(Qt.Horizontal) self.splitter.addWidget(self.widget) self.splitter.setCollapsible(0, self.collapsed) # Keep track of the collapsed widget's size to restore properly when un-collapsed self.widgetSize = self.splitter.sizes()[0] layout = QGridLayout() layout.addWidget(self.splitter, 0, 0) layout.addWidget(toolBar, 1, 0) self.setLayout(layout) self.toggled.connect(self.collapse)
def __init__(self, presenter, dims_info, can_normalise, parent=None, window_flags=Qt.Window, conf=None): super().__init__(parent) self.presenter = presenter self.setWindowFlags(window_flags) self.setAttribute(Qt.WA_DeleteOnClose, True) self._splitter = QSplitter(self) self._data_view = SliceViewerDataView(presenter, dims_info, can_normalise, self, conf) self._splitter.addWidget(self._data_view) self._splitter.splitterMoved.connect(self._data_view.on_resize) # peaks viewer off by default self._peaks_view = None # config the splitter appearance splitterStyleStr = """QSplitter::handle{ border: 1px dotted gray; min-height: 10px; max-height: 20px; }""" self._splitter.setStyleSheet(splitterStyleStr) self._splitter.setHandleWidth(1) layout = QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self._splitter) self.setLayout(layout) self.refresh_queued = False # connect up additional peaks signals self.data_view.mpl_toolbar.peaksOverlayClicked.connect( self.peaks_overlay_clicked) self.data_view.mpl_toolbar.nonAlignedCutsClicked.connect( self.non_axis_aligned_cuts_clicked) self.close_signal.connect(self._run_close) self.rename_signal.connect(self._on_rename)
def setup_gfx_ui(): # design overview self.motor_display_view = QGraphicsView() self.motor_display_scene = QGraphicsScene() self.motor_display_view.setScene(self.motor_display_scene) self.motor_display_view.show() # sliced cross section self.grain_slice_view = QGraphicsView() self.grain_slice_scene = QGraphicsScene() self.grain_slice_view.setScene(self.grain_slice_scene) self.grain_slice_view.show() # splitter self.splt_gfx = QSplitter(Qt.Horizontal) self.splt_gfx.addWidget(self.motor_display_view) self.splt_gfx.addWidget(self.grain_slice_view) self.splt_gfx.setStretchFactor(0, 10) self.splt_gfx.setStretchFactor(1, 3) self.splt_gfx.setMinimumHeight(50)
def resizeEvent(self, event): model = self.model() num_items = model.getRootItem().childCount() if 0 < num_items: # update width if self.headerPosition() in [attrs.NORTH, attrs.SOUTH]: width = int(self.width() / num_items) if TansuModel.ITEM_WIDTH < width: model.item_width = width self.updateStyleSheet() return QSplitter.resizeEvent(self, event)
def __init__(self, *args, **kwargs): super(SplitThreeView, self).__init__(*args, **kwargs) self.top_splitter = QSplitter(Qt.Horizontal) self.top_splitter.setSizes([100, 200]) self.outer_splitter = QSplitter(Qt.Vertical) self.outer_splitter.insertWidget(0, self.top_splitter) self.layout.addWidget(self.outer_splitter) self.setLayout(self.layout) QApplication.setStyle(QStyleFactory.create('Cleanlooks')) self.setGeometry(300, 300, 300, 200) self.max_canvases = 3 # Set attrs for when the buttons are created self.icon = QIcon(path('icons/2x1grid.png')) self.tool_tip = "3-Way Split View" self.whats_this = "Displays up to three visualized data items."
def __init__(self, name, settings): super(Project, self).__init__() self._name = name # --- setup the splitter --- self._splitter = QSplitter() self._splitter.setContentsMargins(0, 0, 0, 0) self._splitter.setOrientation(Qt.Vertical) self._set_closeing_disabled(True) # --- setup the project buttons --- tool_bar = QToolBar() add_root_action = QAction('Add Root', self) tool_bar.addAction(add_root_action) tool_bar.widgetForAction(add_root_action).setObjectName('add_root') add_root_action.triggered.connect(lambda checked: self.add_root()) open_trash_action = QAction('Open Trash', self) tool_bar.addAction(open_trash_action) tool_bar.widgetForAction(open_trash_action).setObjectName('open_trash') open_trash_action.triggered.connect(self.open_trash) save_action = QAction('Save Project', self) tool_bar.addAction(save_action) tool_bar.widgetForAction(save_action).setObjectName('save_project') save_action.triggered.connect(self.save) # --- setup the layout --- main_layout = QVBoxLayout() main_layout.setSpacing(0) main_layout.setContentsMargins(4, 2, 4, 0) main_layout.addWidget(self._splitter) main_layout.addWidget(tool_bar) self.setLayout(main_layout) self._settings = None self.update_settings(settings)
def __init__(self, appdata: CnaData): QWidget.__init__(self) self.appdata = appdata self.last_selected = None self.metabolite_list = QTreeWidget() self.metabolite_list.setHeaderLabels(["Id", "Name"]) self.metabolite_list.setSortingEnabled(True) for m in self.appdata.project.cobra_py_model.metabolites: self.add_metabolite(m) self.metabolite_list.setContextMenuPolicy(Qt.CustomContextMenu) self.metabolite_list.customContextMenuRequested.connect( self.on_context_menu) # create context menu self.pop_menu = QMenu(self.metabolite_list) in_out_fluxes_action = QAction( 'compute in/out fluxes for this metabolite', self.metabolite_list) self.pop_menu.addAction(in_out_fluxes_action) in_out_fluxes_action.triggered.connect(self.emit_in_out_fluxes_action) self.metabolite_mask = MetabolitesMask(appdata) self.metabolite_mask.hide() self.layout = QVBoxLayout() self.layout.setContentsMargins(0, 0, 0, 0) self.splitter = QSplitter() self.splitter.setOrientation(Qt.Vertical) self.splitter.addWidget(self.metabolite_list) self.splitter.addWidget(self.metabolite_mask) self.layout.addWidget(self.splitter) self.setLayout(self.layout) self.metabolite_list.currentItemChanged.connect( self.metabolite_selected) self.metabolite_mask.metaboliteChanged.connect( self.handle_changed_metabolite) self.metabolite_mask.jumpToReaction.connect( self.emit_jump_to_reaction)
def _init_ui(self): # Widgets self._rdb_sum = QRadioButton("Sum") self._rdb_sum.setChecked(True) self._rdb_max = QRadioButton("Maximum") self._rdb_single = QRadioButton("Single") self._rdb_range = QRadioButton("Range") self._sld_start = QSlider(Qt.Horizontal) self._sld_start.setTickPosition(QSlider.TicksBelow) self._sld_start.setEnabled(False) self._sld_end = QSlider(Qt.Horizontal) self._sld_end.setTickPosition(QSlider.TicksBelow) self._sld_end.setEnabled(False) self._wdg_imageraster2d = self._create_imageraster2d_widget() self._wdg_analysis = self._create_analysis1d_widget() # Layouts layout = _DatumWidget._init_ui(self) sublayout = QHBoxLayout() sublayout.addWidget(self._rdb_sum) sublayout.addWidget(self._rdb_max) sublayout.addWidget(self._rdb_single) sublayout.addWidget(self._rdb_range) layout.addLayout(sublayout) sublayout = QFormLayout() sublayout.setFieldGrowthPolicy(QFormLayout.ExpandingFieldsGrow) # Fix for Mac OS sublayout.addRow('Channels (Start)', self._sld_start) sublayout.addRow('Channels (End)', self._sld_end) layout.addLayout(sublayout) splitter = QSplitter() splitter.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) splitter.addWidget(self._wdg_imageraster2d) splitter.addWidget(self._wdg_analysis) layout.addWidget(splitter) # Signals self._rdb_sum.toggled.connect(self._on_mode_sum) self._rdb_max.toggled.connect(self._on_mode_max) self._rdb_single.toggled.connect(self._on_mode_single) self._rdb_range.toggled.connect(self._on_mode_range) self._sld_start.valueChanged.connect(self._on_slide_start) self._sld_end.valueChanged.connect(self._on_slide_end) self._wdg_imageraster2d.valueSelected.connect(self._on_value_selected) # Defaults self.setMode(self.MODE_SUM) return layout
def __init__(self, *args, **kwargs): super(SplitGridView, self).__init__(*args, **kwargs) self.top_splitter = QSplitter(Qt.Horizontal) self.top_splitter.setSizes([100, 200]) self.bottom_splitter = QSplitter(Qt.Horizontal) self.bottom_splitter.setSizes([100, 200]) # connect splitter1 and splitter2 to move together # TODO which version is desired? connect splitter or free moving? # self.top_splitter.splitterMoved.connect(self.moveSplitter) # self.bottom_splitter.splitterMoved.connect(self.moveSplitter) # self._spltA = self.top_splitter # self._spltB = self.bottom_splitter self.outer_splitter = QSplitter(Qt.Vertical) self.outer_splitter.insertWidget(0, self.top_splitter) self.outer_splitter.insertWidget(1, self.bottom_splitter) self.outer_splitter.setSizes([200, 400]) self.layout.addWidget(self.outer_splitter) self.setLayout(self.layout) QApplication.setStyle(QStyleFactory.create('Cleanlooks')) self.setGeometry(300, 300, 300, 200) self.max_canvases = 4 self.icon = QIcon(path('icons/2x2grid.png'))
class SplitHorizontal(SplitView): """ Displays data in wide view, 2 on top of each other with a horizontal, movable divider bar""" def __init__(self, *args, **kwargs): super(SplitHorizontal, self).__init__(*args, **kwargs) self.splitter = QSplitter(Qt.Vertical) self.splitter.setSizes([100, 200]) self.layout.addWidget(self.splitter) self.setLayout(self.layout) QApplication.setStyle(QStyleFactory.create('Cleanlooks')) self.setGeometry(300, 300, 300, 200) self.max_canvases = 2 self.icon = QIcon(path('icons/1x1hor.png')) def clear_canvases(self): for i in reversed(range(self.splitter.count())): widget = self.splitter.widget(i) widget.setParent(None) def show_canvases(self, canvases): for canvas in itertools.islice(canvases, self.max_canvases): if canvas is not None: self.splitter.addWidget(canvas) canvas.setVisible(True)
def __init__(self, *args, **kwargs): super(SplitGridView, self).__init__(*args, **kwargs) self.top_splitter = QSplitter(Qt.Horizontal) self.top_splitter.setSizes([100, 200]) self.bottom_splitter = QSplitter(Qt.Horizontal) self.bottom_splitter.setSizes([100, 200]) # connect splitter1 and splitter2 to move together # TODO which version is desired? connect splitter or free moving? # self.top_splitter.splitterMoved.connect(self.moveSplitter) # self.bottom_splitter.splitterMoved.connect(self.moveSplitter) # self._spltA = self.top_splitter # self._spltB = self.bottom_splitter self.outer_splitter = QSplitter(Qt.Vertical) self.outer_splitter.insertWidget(0, self.top_splitter) self.outer_splitter.insertWidget(1, self.bottom_splitter) self.outer_splitter.setSizes([200, 400]) self.layout.addWidget(self.outer_splitter) self.setLayout(self.layout) QApplication.setStyle(QStyleFactory.create('Cleanlooks')) self.setGeometry(300, 300, 300, 200) self.max_canvases = 4 # Set attrs for when the buttons are created self.icon = QIcon(path('icons/2x2grid.png')) self.tool_tip = "2x2 Grid View" self.whats_this = "Displays up to four visualized data items in a grid layout."
def setup_gfx_ui(): # design overview self.motor_display_view = QGraphicsView() self.motor_display_scene = QGraphicsScene() self.motor_display_view.setScene(self.motor_display_scene) self.motor_display_view.show() # sliced cross section self.grain_slice_view = QGraphicsView() self.grain_slice_scene = QGraphicsScene() self.grain_slice_view.setScene(self.grain_slice_scene) self.grain_slice_view.show() # splitter self.splt_gfx = QSplitter(Qt.Horizontal) self.splt_gfx.addWidget(self.motor_display_view) self.splt_gfx.addWidget(self.grain_slice_view) self.splt_gfx.setStretchFactor(0, 10) self.splt_gfx.setStretchFactor(1, 3) self.splt_gfx.setMinimumHeight(50)
def setup(self, mute_inline_plotting=None, show_plot_outline=None): """Setup the figure browser with provided settings.""" assert self.shellwidget is not None self.mute_inline_plotting = mute_inline_plotting self.show_plot_outline = show_plot_outline if self.figviewer is not None: self.mute_inline_action.setChecked(mute_inline_plotting) self.show_plot_outline_action.setChecked(show_plot_outline) return self.figviewer = FigureViewer(background_color=self.background_color) self.figviewer.setStyleSheet("FigureViewer{" "border: 1px solid lightgrey;" "border-top-width: 0px;" "border-bottom-width: 0px;" "border-left-width: 0px;" "}") self.thumbnails_sb = ThumbnailScrollBar( self.figviewer, background_color=self.background_color) # Option actions : self.setup_option_actions(mute_inline_plotting, show_plot_outline) # Create the layout : main_widget = QSplitter() main_widget.addWidget(self.figviewer) main_widget.addWidget(self.thumbnails_sb) main_widget.setFrameStyle(QScrollArea().frameStyle()) self.tools_layout = QHBoxLayout() toolbar = self.setup_toolbar() for widget in toolbar: self.tools_layout.addWidget(widget) self.tools_layout.addStretch() self.setup_options_button() layout = create_plugin_layout(self.tools_layout, main_widget) self.setLayout(layout)
def setup_ui(self): sp = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.setSizePolicy(sp) def setup_grain_design(): # grain table view master = QHBoxLayout(self) master.addWidget(QTableView()) # grain design controls controls = QVBoxLayout(self) # add a push button self.btn_new_grain = QPushButton(self.tr("New Grain")) self.btn_new_grain.setMinimumHeight(50) controls.addWidget(self.btn_new_grain) # add a dividing line line = QFrame() line.setFrameShape(QFrame.HLine) line.setFrameShadow(QFrame.Sunken) controls.addSpacing(5) controls.addWidget(line) # rest of the controls buttons self.btn_edit_grain = QPushButton(self.tr("Edit")) self.btn_edit_grain.setMinimumHeight(30) controls.addWidget(self.btn_edit_grain) self.btn_delete_Grain = QPushButton(self.tr("Delete")) self.btn_delete_Grain.setMinimumHeight(30) controls.addWidget(self.btn_delete_Grain) # move grain up and down moveup = QHBoxLayout() self.btn_move_up = QToolButton() self.btn_move_up.setArrowType(Qt.UpArrow) moveup.addWidget(self.btn_move_up) moveup.addWidget(QLabel(self.tr("Move Up"))) controls.addLayout(moveup) movedown = QHBoxLayout() self.btn_move_down = QToolButton() self.btn_move_down.setArrowType(Qt.DownArrow) movedown.addWidget(self.btn_move_down) movedown.addWidget(QLabel(self.tr("Move Down"))) controls.addLayout(movedown) controls.addStretch() # add info for motor design fl_propellant_info = QFormLayout() gb_motor_info = QGroupBox(self.tr("Propellant Info")) gb_motor_info.setLayout(fl_propellant_info) self.lbl_num_grains = QLabel() fl_propellant_info.addRow(QLabel(self.tr("Number of Segments:")), self.lbl_num_grains) self.lbl_motor_dia = QLabel() fl_propellant_info.addRow(QLabel(self.tr("Motor Diameter:")), self.lbl_motor_dia) self.lbl_motor_len = QLabel() fl_propellant_info.addRow(QLabel(self.tr("Propellant Length:")), self.lbl_motor_len) self.lbl_prop_mass = QLabel() fl_propellant_info.addRow(QLabel(self.tr("Propellant Mass:")), self.lbl_prop_mass) self.lbl_volume_loading = QLabel() fl_propellant_info.addRow(QLabel(self.tr("Volume Loading:")), self.lbl_volume_loading) # set group box's layout controls.addWidget(gb_motor_info) # setup master layout master.addLayout(controls) self.gb_design = QGroupBox(self.tr("Grain Design")) self.gb_design.setLayout(master) def setup_chamber_design(): # master layout master = QVBoxLayout() # master group box self.gb_chamber = QGroupBox(self.tr("Chamber Design")) # nozzle settings button self.btn_nozzle_settings = QPushButton(self.tr("Edit Nozzle")) self.btn_nozzle_settings.setMinimumHeight(50) master.addWidget(self.btn_nozzle_settings) # nozzle info pane fl_nozzle_info = QFormLayout() gb_nozzle = QGroupBox(self.tr("Nozzle Info")) gb_nozzle.setLayout(fl_nozzle_info) self.lbl_nozzle_throat = QLabel() fl_nozzle_info.addRow(QLabel(self.tr("Throat Diameter:")), self.lbl_nozzle_throat) self.lbl_nozzle_exit = QLabel() fl_nozzle_info.addRow(QLabel(self.tr("Exit Diameter:")), self.lbl_nozzle_exit) self.lbl_nozzle_expansion_ratio = QLabel() fl_nozzle_info.addRow(QLabel(self.tr("Expansion Ratio:")), self.lbl_nozzle_expansion_ratio) # add group box to master master.addWidget(gb_nozzle) master.addStretch() # overall motor info pane fl_motor_info = QFormLayout() gb_motor = QGroupBox(self.tr("Motor Info")) gb_motor.setLayout(fl_motor_info) self.lbl_kn = QLabel() fl_motor_info.addRow(QLabel(self.tr("Kn:")), self.lbl_kn) self.lbl_port_throat = QLabel() fl_motor_info.addRow(QLabel(self.tr("Port/Throat Ratio:")), self.lbl_port_throat) master.addWidget(gb_motor) self.gb_chamber.setLayout(master) def setup_gfx_ui(): # design overview self.motor_display_view = QGraphicsView() self.motor_display_scene = QGraphicsScene() self.motor_display_view.setScene(self.motor_display_scene) self.motor_display_view.show() # sliced cross section self.grain_slice_view = QGraphicsView() self.grain_slice_scene = QGraphicsScene() self.grain_slice_view.setScene(self.grain_slice_scene) self.grain_slice_view.show() # splitter self.splt_gfx = QSplitter(Qt.Horizontal) self.splt_gfx.addWidget(self.motor_display_view) self.splt_gfx.addWidget(self.grain_slice_view) self.splt_gfx.setStretchFactor(0, 10) self.splt_gfx.setStretchFactor(1, 3) self.splt_gfx.setMinimumHeight(50) setup_grain_design() setup_chamber_design() setup_gfx_ui() self.splt_grain_design = QSplitter(Qt.Horizontal) self.splt_grain_design.addWidget(self.gb_design) self.splt_grain_design.addWidget(self.gb_chamber) self.splt_grain_design.setStretchFactor(0, 10) self.splt_grain_design.setStretchFactor(1, 3) self.splt_main = QSplitter(Qt.Vertical) self.splt_main.addWidget(self.splt_grain_design) self.splt_main.addWidget(self.splt_gfx) self.splt_main.setSizes([300, 150]) layout = QVBoxLayout() layout.addWidget(self.splt_main) self.setLayout(layout)