def on_arbBtn_clicked(self): dlg = QDialog(self) loadUi(dlg, 'change.ui') with SettingGroup('main') as settings: dlg.xEdit.setText(settings.value('changex', 'x')) dlg.yEdit.setText(settings.value('changey', 'y')) dlg.dyEdit.setText(settings.value('changedy', 'dy')) if dlg.exec_() != QDialog.Accepted: return settings.setValue('changex', dlg.xEdit.text()) settings.setValue('changey', dlg.yEdit.text()) settings.setValue('changedy', dlg.dyEdit.text()) xfml = dlg.xEdit.text() yfml = dlg.yEdit.text() dyfml = dlg.dyEdit.text() new_x = [] new_y = [] new_dy = [] ns = {} for dpoint in zip(self.data.x, self.data.y_raw, self.data.dy_raw): ns.update(x=dpoint[0], y=dpoint[1], dy=dpoint[2]) new_x.append(eval(xfml, ns)) new_y.append(eval(yfml, ns)) new_dy.append(eval(dyfml, ns)) self.data.x[:] = new_x self.data.y_raw[:] = new_y self.data.dy_raw[:] = new_dy self.data.y = self.data.y_raw / self.data.norm self.data.dy = self.data.dy_raw / self.data.norm self.replotRequest.emit(None) session.set_dirty()
def on_subtractBtn_clicked(self): from ufit.gui.scanitem import ScanDataItem dlg = QDialog(self) loadUi(dlg, 'subtract.ui') data2obj = dlg.setList.populate(ScanDataItem) if dlg.exec_() != QDialog.Accepted: return witems = dlg.setList.selectedItems() if not witems: return try: prec = float(dlg.precisionEdit.text()) except ValueError: QMessageBox.warning(self, 'Error', 'Please enter a valid precision.') return new_data = self.data.subtract(data2obj[witems[0].type()].data, prec, dlg.destructBox.isChecked()) if not dlg.destructBox.isChecked(): new_model = self.model.copy() from ufit.gui.scanitem import ScanDataItem session.add_item(ScanDataItem(new_data, new_model), self.item.group) else: self.replotRequest.emit(None) session.set_dirty()
def on_addCustomBtn_clicked(self): dlg = QDialog(self) loadUi(dlg, 'custommodel.ui') while 1: if dlg.exec_() != QDialog.Accepted: return modelname = str(dlg.nameBox.text()) params = str(dlg.paramBox.text()) value = str(dlg.valueEdit.toPlainText()).strip() if not ident_re.match(modelname): QMessageBox.warning( self, 'Error', 'Please enter a valid model ' 'name (must be a Python identifier using ' 'only alphabetic characters and digits).') continue if not params: QMessageBox.warning(self, 'Error', 'Please enter some parameters.') continue for param in params.split(): if not ident_re.match(param): QMessageBox.warning( self, 'Error', 'Parameter name %s is not valid (must ' 'be a Python identifier using only alphabetic ' 'characters and digits).' % param) params = None break if not params: continue break self.insert_model_code('Custom(%r, %r, %r)' % (modelname, params, value))
def on_addboxBtn_clicked(self): x1, x2 = map(int, self.canvas.axes.get_xlim()) y1, y2 = map(int, self.canvas.axes.get_ylim()) box = QWidget(self) loadUi(box, 'box.ui') # there's always a stretcher at the bottom self.boxLayout.insertWidget(self.boxLayout.count() - 1, box) self.boxes.append(box) box.nameBox.setText('Box %d' % len(self.boxes)) box.x1Box.setValue(x1) box.x2Box.setValue(x2) box.y1Box.setValue(y1) box.y2Box.setValue(y2) def boxchange(v): self.plot(False) def boxremove(box=box): index = self.boxes.index(box) del self.boxes[index] item = self.boxLayout.takeAt(index) item.widget().deleteLater() self.plot(False) box.x1Box.valueChanged.connect(boxchange) box.x2Box.valueChanged.connect(boxchange) box.y1Box.valueChanged.connect(boxchange) box.y2Box.valueChanged.connect(boxchange) box.delBtn.clicked.connect(boxremove) self.plot(False)
def __init__(self, parent): QMainWindow.__init__(self, parent) loadUi(self, 'browse.ui') self.logger = logger.getChild('browse') self.dataloader = parent self.rootdir = '' self.loader = Loader() self._data = {} self.yaxis = None self.canvas = MPLCanvas(self) self.canvas.plotter.lines = True self.toolbar = MPLToolbar(self.canvas, self) self.toolbar.setObjectName('browsetoolbar') self.addToolBar(self.toolbar) layout = QVBoxLayout() layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.canvas) self.plotframe.setLayout(layout) self.sgroup = SettingGroup('browse') with self.sgroup as settings: geometry = settings.value('geometry', QByteArray()) self.restoreGeometry(geometry) windowstate = settings.value('windowstate', QByteArray()) self.restoreState(windowstate) splitstate = settings.value('splitstate', QByteArray()) self.splitter.restoreState(splitstate) self.monScaleEdit.setText(settings.value('fixedmonval'))
def createUI(self, standalone): loadUi(self, 'dataloader.ui') self.dataformatBox.addItem('auto') for fmt in sorted(data_formats): self.dataformatBox.addItem(fmt) self.buttonBox.addButton(QDialogButtonBox.Open) self.buttonBox.addButton('Preview', QDialogButtonBox.NoRole)
def __init__(self, parent, items): QDialog.__init__(self, parent) loadUi(self, 'paramset.ui') self.new_data = None self.items = items self.xaxisList.populate(items) self.yaxisList.populate(items) self._auto_name = ''
def __init__(self, parent): QWidget.__init__(self, parent) self.item = None self.data = None self.picking = None self.picked_points = [] loadUi(self, 'dataops.ui') self.pickedLbl.hide()
def createUI(self): loadUi(self, 'modelbuilder.ui') self.modeldefStacker.setCurrentIndex(0) self.model_dict = {} for model in concrete_models: QListWidgetItem(model.__name__, self.premodelsList) self.model_dict[model.__name__] = model self.buttonBox.addButton('Check', QDialogButtonBox.NoRole) self.buttonBox.addButton(QDialogButtonBox.Apply)
def __init__(self, parent, canvas, item): QFrame.__init__(self, parent) loadUi(self, 'mapping.ui') self._limits = None self.item = item self.logger = logger.getChild('mapping') self.canvas = canvas self.mapdata = None self.set_datas(item.datas) self.set_settings(item.settings)
def createUI(self, standalone): loadUi(self, 'fitter.ui') if standalone: self.buttonBox.addButton(QDialogButtonBox.Close) self.buttonBox.addButton('Initial guess', QDialogButtonBox.HelpRole) self.buttonBox.addButton('Save params', QDialogButtonBox.ResetRole) self.buttonBox.addButton('Restore saved', QDialogButtonBox.ResetRole) self.buttonBox.addButton('Replot', QDialogButtonBox.ActionRole) fitbtn = self.buttonBox.addButton('Fit', QDialogButtonBox.ApplyRole) fitbtn.setShortcut(QKeySequence('Ctrl+F')) fitbtn.setIcon(QIcon.fromTheme('dialog-ok'))
def on_actionMergeData_triggered(self): items = self.selected_items(ScanDataItem) if len(items) < 2: return dlg = QDialog(self) loadUi(dlg, 'rebin.ui') if dlg.exec_(): try: precision = float(dlg.precisionEdit.text()) except ValueError: return datalist = [i.data for i in items] new_data = datalist[0].merge(precision, *datalist[1:]) session.add_item(ScanDataItem(new_data), self.items[-1].group)
def __init__(self, parent): self._updating = False self._data = None QMainWindow.__init__(self, parent) loadUi(self, 'inspector.ui') # layout = QVBoxLayout() # layout.setContentsMargins(0, 0, 0, 0) # layout.addWidget(self.canvas) self.sgroup = SettingGroup('inspector') self.tbl.verticalHeader().setDefaultSectionSize( self.tbl.verticalHeader().minimumSectionSize() + 2) with self.sgroup as settings: geometry = settings.value('geometry', QByteArray()) self.restoreGeometry(geometry) windowstate = settings.value('windowstate', QByteArray()) self.restoreState(windowstate)
def __init__(self, parent): self._updating = False self._data = None QMainWindow.__init__(self, parent) loadUi(self, 'annotations.ui') self.sgroup = SettingGroup('annotations') session.propsRequested.connect(self.on_session_propsRequested) session.propsUpdated.connect(self.on_session_propsUpdated) with self.sgroup as settings: geometry = settings.value('geometry', QByteArray()) self.restoreGeometry(geometry) windowstate = settings.value('windowstate', QByteArray()) self.restoreState(windowstate) self._editing = True self.on_session_propsUpdated()
def on_actionReorder_triggered(self): dlg = QDialog(self) loadUi(dlg, 'reorder.ui') data2obj = dlg.itemList.populate() if not dlg.exec_(): return new_structure = [] for i in range(dlg.itemList.count()): new_index = dlg.itemList.item(i).type() obj = data2obj[new_index] if isinstance(obj, ItemGroup): new_structure.append((obj, [])) else: if not new_structure: QMessageBox.warning( self, 'ufit', 'Reordering invalid: every data item ' 'must be below a group') return new_structure[-1][1].append(obj) session.reorder_groups(new_structure) self.re_expand_tree()
def __init__(self): QMainWindow.__init__(self) self.itempanels = {} self.multipanels = {} self.current_panel = None self.inspector_window = None self.annotation_window = None self.sgroup = SettingGroup('main') loadUi(self, 'main.ui') self.menuRecent.aboutToShow.connect(self.on_menuRecent_aboutToShow) self.menuMoveToGroup = QMenu('Move selected to group', self) self.menuMoveToGroup.setIcon(QIcon(':/drawer-open.png')) self.menuMoveToGroup.aboutToShow.connect( self.on_menuMoveToGroup_aboutToShow) self.menuCopyToGroup = QMenu('Copy selected to group', self) self.menuCopyToGroup.setIcon(QIcon(':/drawer-double-open.png')) self.menuCopyToGroup.aboutToShow.connect( self.on_menuCopyToGroup_aboutToShow) self.menuRemoveGroup = QMenu('Remove group', self) self.menuRemoveGroup.setIcon(QIcon(':/drawer--minus.png')) self.menuRemoveGroup.aboutToShow.connect( self.on_menuRemoveGroup_aboutToShow) self.menuRenameGroup = QMenu('Rename group', self) self.menuRenameGroup.aboutToShow.connect( self.on_menuRenameGroup_aboutToShow) # populate plot view layout2 = QVBoxLayout() layout2.setContentsMargins(0, 0, 0, 0) self.canvas = MPLCanvas(self, maincanvas=True) self.canvas.replotRequest.connect( lambda: self.current_panel.plot(True)) self.canvas.mpl_connect('button_press_event', self.on_canvas_pick) self.canvas.mpl_connect('pick_event', self.on_canvas_pick) self.canvas.mpl_connect('button_release_event', self.on_canvas_click) self.toolbar = MPLToolbar(self.canvas, self) self.toolbar.setObjectName('mainplottoolbar') self.toolbar.popoutRequested.connect(self.on_actionPopOut_triggered) self.addToolBar(self.toolbar) layout2.addWidget(self.canvas) self.plotframe.setLayout(layout2) # session events session.itemsUpdated.connect(self.on_session_itemsUpdated) session.itemAdded.connect(self.on_session_itemAdded) session.filenameChanged.connect(self.on_session_filenameChanged) session.dirtyChanged.connect(self.on_session_dirtyChanged) # create data loader self.dloader = DataLoader(self, self.canvas.plotter) self.dloader.newDatas.connect(self.on_dloader_newDatas) self.stacker.addWidget(self.dloader) self.current_panel = self.dloader # create item model self.itemlistmodel = ItemListModel() self.itemTree.setModel(self.itemlistmodel) self.itemlistmodel.reset() self.itemTree.addAction(self.actionMergeData) self.itemTree.addAction(self.actionRemoveData) self.itemTree.addAction(self.menuMoveToGroup.menuAction()) self.itemTree.addAction(self.menuCopyToGroup.menuAction()) self.itemTree.newSelection.connect(self.on_itemTree_newSelection) # backend selector self.backend_group = QActionGroup(self) for backend in backends.available: action = QAction(backend.backend_name, self) action.setCheckable(True) if backends.backend.backend_name == backend.backend_name: action.setChecked(True) self.backend_group.addAction(action) self.menuBackend.addAction(action) action.triggered.connect(self.on_backend_action_triggered) # manage button menu = QMenu(self) menu.addAction(self.actionMergeData) menu.addAction(self.actionRemoveData) menu.addMenu(self.menuMoveToGroup) menu.addMenu(self.menuCopyToGroup) menu.addAction(self.actionReorder) menu.addSeparator() menu.addAction(self.actionNewGroup) menu.addMenu(self.menuRenameGroup) menu.addMenu(self.menuRemoveGroup) self.manageBtn.setMenu(menu) # right-mouse-button menu for canvas menu = self.canvasMenu = QMenu(self) menu.addAction(self.actionUnzoom) menu.addAction(self.actionHideFit) menu.addSeparator() menu.addAction(self.actionDrawSymbols) menu.addAction(self.actionConnectData) menu.addAction(self.actionSmoothImages) menu.addSeparator() menu.addAction(self.actionDrawGrid) menu.addAction(self.actionShowLegend) # restore window state with self.sgroup as settings: geometry = settings.value('geometry', QByteArray()) self.restoreGeometry(geometry) windowstate = settings.value('windowstate', QByteArray()) self.restoreState(windowstate) splitstate = settings.value('splitstate', QByteArray()) self.splitter.restoreState(splitstate) vsplitstate = settings.value('vsplitstate', QByteArray()) self.vsplitter.restoreState(vsplitstate) self.recent_files = settings.value('recentfiles', []) or []
def __init__(self, parent, canvas): QWidget.__init__(self, parent) self.canvas = canvas self.replotRequest.connect(self.plot) loadUi(self, 'multiops.ui')
def __init__(self, parent, items): QDialog.__init__(self, parent) loadUi(self, 'paramselect.ui') self.availList.populate(items, intersect=False) self.items = items
def __init__(self, parent, canvas): QWidget.__init__(self, parent) self.canvas = canvas self.boxes = [] loadUi(self, 'imageops.ui')
def on_actionAbout_triggered(self): dlg = QDialog(self) dlg.setWindowFlags(Qt.Dialog | Qt.FramelessWindowHint) loadUi(dlg, 'about.ui') dlg.lbl.setText(dlg.lbl.text().replace('VERSION', __version__)) dlg.exec_()