def restart_selector(self): """Function that ensures that only one type of restartfile can be selected at a given time in the restartfile window. Author ---------- Jonathan Chico """ from PyQt5.QtCore import QSignalBlocker if self.sender() == self.DWOptBox: if self.DWOptBox.isChecked(): self.SkxOptBox.setChecked(False) QSignalBlocker(self.SkxOptBox) self.HLOptBox.setChecked(False) QSignalBlocker(self.HLOptBox) if self.sender() == self.SkxOptBox: if self.SkxOptBox.isChecked(): self.DWOptBox.setChecked(False) QSignalBlocker(self.DWOptBox) self.HLOptBox.setChecked(False) QSignalBlocker(self.HLOptBox) if self.sender() == self.HLOptBox: if self.HLOptBox.isChecked(): self.SkxOptBox.setChecked(False) QSignalBlocker(self.SkxOptBox) self.DWOptBox.setChecked(False) QSignalBlocker(self.DWOptBox) if self.sender() == self.InpDwTypeBox: if self.InpDwTypeBox.isChecked(): self.InpDWVortex.setChecked(False) QSignalBlocker(self.InpDWVortex) if self.sender() == self.InpDWVortex: if self.InpDWVortex.isChecked(): self.InpDwTypeBox.setChecked(False) QSignalBlocker(self.InpDwTypeBox) return
def saveUserText(self): blocker = QSignalBlocker(self.ui.textEdit) selected = self.getSelectedSampleTextId() if selected in self.userTextIds: self.user_texts.setValue("text" + str(selected), self.ui.textEdit.toPlainText()) m = 1
def save_perspective(self): perspective_name, ok = QInputDialog.getText(self, 'Save perspective', 'Enter unique name:') if ok and perspective_name: self.dock_manager.addPerspective(perspective_name) _ = QSignalBlocker(self.perspective_combo_box) self.perspective_combo_box.clear() self.perspective_combo_box.addItems(self.dock_manager.perspectiveNames()) self.perspective_combo_box.setCurrentText(perspective_name) self.save_perspectives()
def _on_checked(self, i): block_signals = QSignalBlocker(self) # noqa _logger.debug("clicked --> %d " % (i + 1)) for l in self.labels: l.is_active = False self.labels[i].is_active = not self.labels[i].is_active for j in range(self.rowCount()): self.item(j, 2).setCheckState(Qt.Unchecked) self.item(i, 2).setCheckState(Qt.Checked)
def save_perspective(self): perspective_name, ok = QInputDialog.getText(self, "Save Perspective", "Enter Unique name:") if not ok or not perspective_name: return self.dock_manager.addPerspective(perspective_name) blocker = QSignalBlocker(self.perspective_combobox) self.perspective_combobox.clear() self.perspective_combobox.addItems(self.dock_manager.perspectiveNames()) self.perspective_combobox.setCurrentText(perspective_name)
def __set_current_scan(self, index: int): _ = QSignalBlocker(self) self.current_index = index name = self.__make_base_name() scan = Scan() scan.load_from(name) self.scan = scan self.ui.slide_line.setValue(0) self.__set_current_line(0)
def __init__(self, parent=None): QTreeWidget.__init__(self, parent) self.setItemsExpandable(True) self.setAnimated(True) self.setDragEnabled(True) self.setHeaderHidden(True) self.setDropIndicatorShown(True) self.setDragDropMode(QAbstractItemView.InternalMove) self.blocker = QSignalBlocker(self) self.blocker.unblock() # only one by on for now #self.setSelectionMode(QAbstractItemView.ExtendedSelection) self.settings=SETTINGS root=self.invisibleRootItem() root.setData(0,Qt.ToolTipRole,"root")
def _set_combos_to_builtin(self): """Used when we switch to compute forward mode""" block_signals = QSignalBlocker(self._montages_combo) # noqa self._montages_combo.setItems(self.builtin_montage_names) self.montage = self.default_montage self._spacings_combo.setItems( [k for k in self.spacings_desc if k != 'imported']) self.spacing = self.default_spacing # uses spacing setter self._forwards_combo_widget.hide() self._set_hints() self._use_default_montage_radio.show() self._import_montage_radio.show() self._select_montage_dialog.show()
def select_security(self, selection): if isinstance(selection, QItemSelection): if not selection.indexes(): # no selection return idx = self.ui.endpointsView.currentIndex() transport_profile_uri = self.endpoints_model.data( idx.siblingAtColumn(3)) if transport_profile_uri != "http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary": blocker = QSignalBlocker(self.ui.endpointsView.selectionModel()) self.ui.endpointsView.selectionModel().clearSelection() else: security_mode = self.endpoints_model.data(idx.siblingAtColumn(1)) security_policy = self.endpoints_model.data(idx.siblingAtColumn(2)) self.ui.modeComboBox.setCurrentText(security_mode) self.ui.policyComboBox.setCurrentText(security_policy)
def _set_hints(self): """Set popup description messages to comboboxes""" block_signals = QSignalBlocker(self._montages_combo) # noqa for i, key in enumerate(self._montages_combo.getItems()): try: self._montages_combo.setItemData(i, self.montages_desc[key], Qt.ToolTipRole) except KeyError: pass for i, key in enumerate(self._spacings_combo.getItems()): try: self._spacings_combo.setItemData(i, self.spacings_desc[key], Qt.ToolTipRole) except KeyError: pass
def update_projection(self, image_data, preview_slice_index: int, tilt_angle: Optional[Degrees]): """ Updates the preview projection image and associated annotations. Region of interest sets the bounds of the image axes, it does not resize the data itself. The advantage of this is that the coordinates do not change. :param image_data: Projection image data (single/2D image) :param preview_slice_index: Y coordinate at which to draw the preview slice indicator :param tilt_angle: Angle of the tilt line """ with QSignalBlocker(self.previewSliceIndex): self.previewSliceIndex.setValue(preview_slice_index) self.image_view.update_projection(image_data, preview_slice_index, tilt_angle)
def mousePressEvent(self, event: QMouseEvent) -> None: pos = self.mapToScene(event.localPos().toPoint()) x = int(pos.x()) y = int(pos.y()) x = get_limit_pos(x, 1) y = get_limit_pos(y, 0) self.cur_id = '' # choose item by clicking canvas if self.status == 'choose': # item = g_canvas.scene().itemAt(x, y, g_transform) items = self.item_dict.values() pos = [x,y] # break_flg b_flg = False id = '' # select in canvas for item in items: if b_flg: break for coor in item.pixels: if is_close(coor, pos): b_flg = True self.selection_changed(item.id) id = item.id break # select in list_widget for i in range(1, g_list_widget.count()): widget_item = g_list_widget.item(i) strList = widget_item.text().split() if(strList[-1] == id): g_list_widget.setCurrentRow(i) QSignalBlocker(g_list_widget) widget_item.setSelected(True) break # 点击边界外附近时拖动画布 self.is_image_scaling = 0 if g_width-5 <= x <= g_width+5 and g_height-5 <= y <= g_height+5: self.is_image_scaling = 3 elif g_width-5 <= x <= g_width+5: self.is_image_scaling = 1 elif g_height-5 <= y <= g_height+5: self.is_image_scaling = 2 def press_draw(): global g_draw_status if self.status not in g_draw_status: return '' if self.temp_item.id != self.main_window.get_id(): self.temp_item = MyItem(self.temp_id, self.status, \ [[x, y], [x, y]], self.temp_algorithm) self.scene().addItem(self.temp_item) else: # needs more than two points if self.status == 'polygon': self.temp_item.p_list.append([x,y]) elif self.status == 'curve': self.temp_item.p_list.insert(-1, [x,y]) return self.temp_item.id def press_edit(): if self.status not in g_edit_status: return '' if self.selected_id == '': print("请选择图元.") return sid = self.selected_id if self.status in ['translate','clip']: if self.status == 'clip' \ and self.item_dict[sid].item_type != 'line': g_window.statusBar().showMessage('不能裁剪非线段') self.status = '' else: self.item_dict[sid].edit_type = self.status self.item_dict[sid].poi = [x,y] self.item_dict[sid].poi1 = [x,y] self.item_dict[sid].edit_algorithm = self.temp_algorithm self.item_dict[sid].edit_over = 0 elif self.status in ['rotate', 'scale']: if self.item_dict[sid].param_cnt == 0: self.item_dict[sid].edit_type = self.status self.item_dict[sid].center = [x,y] self.item_dict[sid].edit_over = 0 self.item_dict[sid].param_cnt = 1 elif self.item_dict[sid].param_cnt == 1: self.item_dict[sid].poi = [x,y] self.item_dict[sid].poi1 = [x,y] self.item_dict[sid].param_cnt = 2 else: self.status = '' self.item_dict[sid].edit_clear() else: print("Undefined Behavior: No such edit situation") return '' return sid # draw or edit if self.is_image_scaling == 0: dealing_id = press_draw() if dealing_id != '': self.cur_id = dealing_id dealing_id = press_edit() if dealing_id != '': self.cur_id = dealing_id self.updateScene([self.sceneRect()]) #self.updateScene([self.temp_item.boundingRect()]) super().mousePressEvent(event)
def __set_current_directory(self, directory): _ = QSignalBlocker(self) self.current_dir = directory self.ui.slide_file.setValue(0) self.__set_current_scan(0)
def reset(self): """Reset value back to initial value.""" with QSignalBlocker( self): # We do not want to re-run manipulate on reset self.value = self._init_value
def setItems(self, items): block_signals = QSignalBlocker(self) # noqa for i in range(self.count()): self.removeItem(0) self.addItems(items)
def _set_montages_combo_to_available(self): block_signals = QSignalBlocker(self._montages_combo) # noqa self._montages_combo.setItems(self._available_montages) self.montage = self.default_montage self._set_spacings_combo_to_available()
class CustomTreeWidget(QTreeWidget): itemDropped = pyqtSignal(str,str,str) editmetadata= pyqtSignal(QModelIndex,str,str) editfile= pyqtSignal(str) def __init__(self, parent=None): QTreeWidget.__init__(self, parent) self.setItemsExpandable(True) self.setAnimated(True) self.setDragEnabled(True) self.setHeaderHidden(True) self.setDropIndicatorShown(True) self.setDragDropMode(QAbstractItemView.InternalMove) self.blocker = QSignalBlocker(self) self.blocker.unblock() # only one by on for now #self.setSelectionMode(QAbstractItemView.ExtendedSelection) self.settings=SETTINGS root=self.invisibleRootItem() root.setData(0,Qt.ToolTipRole,"root") def mousePressEvent (self, event): if event.button() == Qt.RightButton: QTreeWidget.mousePressEvent(self, event) selModel = self.selectionModel() indices = selModel.selectedRows() if indices: for indice in indices: if indice.parent().data(): parents=indice.parent().data() childs=indice.data() self.editmetadata.emit(indice,parents,childs) else: self.editfile.emit(indice.data()) QTreeWidget.mousePressEvent(self, event) def dragMoveEvent(self, event): role=Qt.ToolTipRole itemToDropIn = self.itemAt(event.pos()) itemBeingDragged=self.currentItem() okList=self.settings[itemBeingDragged.data(0,role)][0] if itemToDropIn is None: itemToDropIn=self.invisibleRootItem() if itemToDropIn.data(0,role) in okList: super(CustomTreeWidget, self).dragMoveEvent(event) return else: # possible "next to drop target" case parent=itemToDropIn.parent() if parent is None: parent=self.invisibleRootItem() if parent.data(0,role) in okList: super(CustomTreeWidget, self).dragMoveEvent(event) return event.ignore() def dropEvent(self, event): role=Qt.ToolTipRole #item being dragged itemBeingDragged=self.currentItem() okList=self.settings[itemBeingDragged.data(0,role)][0] #parent before the drag oldParent=itemBeingDragged.parent() if oldParent is None: oldParent=self.invisibleRootItem() oldIndex=oldParent.indexOfChild(itemBeingDragged) #accept any drop super(CustomTreeWidget,self).dropEvent(event) #look at where itemBeingDragged end up newParent=itemBeingDragged.parent() if newParent is None: newParent=self.invisibleRootItem() if newParent.data(0,role) in okList and newParent!=oldParent: fileIN=newParent.text(0) fileOUT=oldParent.text(0) var=itemBeingDragged.text(0) self.itemDropped.emit(fileIN,var,fileOUT) else: # drop was not ok, put back the item newParent.removeChild(itemBeingDragged) oldParent.insertChild(oldIndex,itemBeingDragged) def addItem(self,strings,category,parent=None,WhatsThis=''): if category not in self.settings: print("unknown categorie" +str(category)) return False if parent is None: parent=self.invisibleRootItem() fl=self.settings[category][1] | Qt.ItemIsUserCheckable #Qt.ItemIsTristate else: fl=self.settings[category][1]| Qt.ItemIsUserCheckable item = QTreeWidgetItem(parent) item.setText(0, strings) item.setCheckState(0, Qt.Unchecked) item.setData(0,Qt.ToolTipRole,category) item.setExpanded(True) item.setFlags(item.flags()| fl) return item def rename(self,item,new_name): item.model().setData(item,new_name) def populate_tree(self,data,keys=None): self.blocker.reblock() if keys is None: keys=data.keys() self.clear() if len(keys)==1: single_file=True else: single_file=False first=True for file in keys: parent=self.addItem(file,"family") if single_file: parent.setCheckState(0, Qt.Checked) single_file=False for var in data[file]['metadata'].keys(): if var != 'time': item=self.addItem(var,"children",parent,data[file]['metadata'][var]['short_name']) if first: item.setCheckState(0, Qt.Checked) first=False self.expandAll() self.blocker.unblock() def get_all_items(self): """Returns all QTreeWidgetItems in the given QTreeWidget.""" self.blocker.reblock() check_vars = [] checks_files=[] checks_dataframe=[] for i in range(self.topLevelItemCount()): top_item = self.topLevelItem(i) file=top_item.text(0) if top_item.checkState(0)== Qt.Checked: checks_dataframe.append(file) var=[] for j in range(top_item.childCount()): if (top_item.child(j).checkState(0) == Qt.Checked):# and (top_item.child(j).text(0)[:2] != 'No'): var.append(top_item.child(j).text(0)) check_vars.append(var) checks_files.append(file) self.blocker.unblock() return checks_files,check_vars,checks_dataframe def auto_check(self,all_file=False,all_vars=False,unchecked=False): self.blocker.reblock() if unchecked: all_file=True all_vars=True flag=Qt.Unchecked else: flag=Qt.Checked for i in range(self.topLevelItemCount()): top_item = self.topLevelItem(i) if all_file: top_item.setCheckState(0, flag) for j in range(top_item.childCount()): if all_vars: top_item.child(j).setCheckState(0, flag) self.blocker.unblock() def check_item(self,files): self.blocker.reblock() flag=Qt.Checked for i in range(self.topLevelItemCount()): top_item = self.topLevelItem(i) if top_item.text(0) in files: top_item.setCheckState(0, flag) self.blocker.unblock()
def setCustomSampleText(self, id=0): blocker = QSignalBlocker(self.ui.textEdit) vals = self.user_texts.value('text' + str(id), 'Write your Text here ..') self.ui.textEdit.setText(vals) return True
def pixel_size(self, value: int): with QSignalBlocker(self.pixelSize): self.pixelSize.setValue(value)