def open_console(self): if not self.ui.frameConsole.isVisible(): if hasattr(self, "console"): if self.ui.frameConsole.isVisible() == False: self.ui.frameConsole.setVisible(True) if self.ui.groupBoxPlotting.isVisible() == False: self.ui.actionPlotting.setIcon( QtGui.QIcon("icons/checkmark.png")) self.ui.groupBoxPlotting.setVisible(True) else: self.ui.frameConsole.setLayout(QtWidgets.QVBoxLayout()) self.console = ConsoleWidget( namespace={ "viewer": self, "pd": pd, "np": np, "os": os }, text= "\r This console has access to everything in the namespace of this viewer. " "\n Example: viewer.df refers to the complete dataframe. viewer.df_selection refers to currently selected data " "\n UI widgets are accessible using viewer.ui, like viewer.ui.console for this console." "\n imported libraries: pandas as pd, numpy as np, os ") self.ui.frameConsole.layout().addWidget(self.console) self.ui.frameConsole.setVisible(True) self.ui.groupBoxPlotting.setVisible(True) self.ui.actionConsole.setIcon( QtGui.QIcon("icons/checkmark.png")) else: self.close_console()
def __init__(self, name): super().__init__(name, terminals={'title': { 'io': 'in' }}, allowAddInput=True) self.console = ConsoleWidget() self.title = None
def __init__(self, addMenu=True): super(DockWindow, self).__init__() self.dockarea = DockArea() self.setCentralWidget(self.dockarea) self.clipboard = QtGui.QApplication.clipboard() if addMenu: addMenu = self.menuBar().addMenu("&Add Dock") addMenu.addAction( QtGui.QAction("Trace Widget", addMenu, triggered=lambda: self.addWidget(TraceWidget()))) addMenu.addAction( QtGui.QAction("Plot Widget", addMenu, triggered=lambda: self.addWidget(PlotWidget()))) addMenu.addAction( QtGui.QAction("Video Widget", addMenu, triggered=lambda: self.addWidget(VideoWidget()))) addMenu.addAction( QtGui.QAction("Data Widget", addMenu, triggered=lambda: self.addWidget(DataWidget()))) addMenu.addAction( QtGui.QAction("Console Widget", addMenu, triggered=lambda: self.addWidget( ConsoleWidget(namespace=globals())))) if '-no3D' not in sys.argv: addMenu.addAction( QtGui.QAction( "3D Plot Widget", addMenu, triggered=lambda: self.addWidget(Plot3DWidget())))
def __init__(self, pod): super().__init__() MainWindow.console = ConsoleWidget( namespace={ 'pod': pod, 'win': self, }, text='You can use this window to enter Python commands.') MainWindow.console.setWindowTitle('Python interaction') self._ui = Ui_MainWindow() self._ui.setupUi(self) self._ui.startButton.clicked.connect(pod.begin) self._ui.submitButton.clicked.connect(self.submitCommand) pod.connected.connect(self.enable) self._ui.actionSettings.triggered.connect(self.networkDialog) self._ui.actionReconnect.triggered.connect(pod.begin) self._ui.actionConsoleOpen.triggered.connect(self.openConsole) pod.add_listener('*', self.appendNetworkLog) pod.add_listener('v', self.updateVelocityLCD) pod.add_listener('v', self._ui.velocityPlot.datum) pod.add_listener('h', self.updateHeightLCD) pod.add_listener('h', self._ui.heightPlot.datum) pod.add_listener('d', self.updateDistanceLCD) pod.add_listener('d', self._ui.distancePlot.datum) self.command.connect(pod) self.networkUpdate.connect(pod.try_connect) self.timer = QTimer() self.timer.timeout.connect(self._ui.velocityPlot.update) self.timer.timeout.connect(self._ui.heightPlot.update) self.timer.timeout.connect(self._ui.distancePlot.update) self.timer.start(_1s)
class ConsoleNode(Node): """Node providing a console for showing results and debugging Input terminals: - title: the title of current results. Title won't be printed until it is changed - added inputs: item to be print in the console """ nodeName = 'Console' nodePaths = [('Debug', )] def __init__(self, name): super().__init__(name, terminals={'title': { 'io': 'in' }}, allowAddInput=True) self.console = ConsoleWidget() self.title = None def process(self, title, display=True, **kwargs): if title is not None: if self.title != title: self.console.write('<b>%s</b><br>' % title, html=True) self.title = title for k, v in sorted(kwargs.items()): if v is None: continue self.console.locals()[k + '_'] = v self.console.write('%s: %s\n' % (k, v)) self.console.write('\n') def widget(self): return self.console def saveState(self): state = super().saveState() state['geometry'] = self.subwin.geometry() return state def restoreState(self, state): super().restoreState(state) self.subwin.setGeometry(state['geometry'])
class ConsoleNode(Node): """Node providing a console for showing results and debugging Input terminals: - title: the title of current results. Title won't be printed until it is changed - added inputs: item to be print in the console """ nodeName = 'Console' nodePaths = [('Debug',)] def __init__(self, name): super().__init__(name, terminals={'title':{'io':'in'}}, allowAddInput=True) self.console = ConsoleWidget() self.title = None def process(self, title, display=True, **kwargs): if title is not None: if self.title != title: self.console.write('<b>%s</b><br>' % title, html=True) self.title = title for k, v in sorted(kwargs.items()): if v is None: continue self.console.locals()[k+'_'] = v self.console.write('%s: %s\n' % (k, v)) self.console.write('\n') def widget(self): return self.console def saveState(self): state = super().saveState() state['geometry'] = self.subwin.geometry() return state def restoreState(self, state): super().restoreState(state) self.subwin.setGeometry(state['geometry'])
def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) self.setWindowTitle("Stardust Ground Station") self.setWindowIcon(QtGui.QIcon('images/stardust.ico')) self.resize(1000, 600) self.logFile = 'logs/StardustGroundStation' + str( date.today()) + '.txt' with open("config.hjson", "r") as file: config = hjson.load(file) self.sock_rx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sock_tx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.ip_rx = config['UDP_rx']['ip'] self.port_rx = int(config['UDP_rx']['port']) self.ip_tx = config['UDP_tx']['ip'] self.port_tx = int(config['UDP_tx']['port']) self.sock_rx.bind((self.ip_rx, self.port_rx)) self.layout = QVBoxLayout() self.updatableWidgets = [] self.display = Display(structure=config['basics'], units=config['units'], phases=config['phases']) self.layout.addWidget(self.display) self.updatableWidgets.append(self.display) self.tabsTop = QTabWidget() self.layout.addWidget(self.tabsTop) self.sensors = Sensors(structure=config['sensors'], units=config['units']) self.tabsTop.addTab(self.sensors, 'Sensors') self.updatableWidgets.append(self.sensors) self.mechanisms = Mechanisms(structure=config['mechanisms'], statuses=config['statuses']) self.tabsTop.addTab(self.mechanisms, 'Mechanisms') self.updatableWidgets.append(self.mechanisms) self.tabsBottom = QTabWidget() self.layout.addWidget(self.tabsBottom) if config['table']: self.table = Table(header_labels=config['labels'], max_size=config['maxSize']) self.updatableWidgets.append(self.table) self.tabsBottom.addTab(self.table, 'Table') if config['charts']: self.charts = Charts(structure=config['sensors'], units=config['units'], time_index=config['basics'][list( config['basics'].keys())[2]]) self.updatableWidgets.append(self.charts) self.scrollCharts = QScrollArea() self.scrollCharts.setWidgetResizable(True) self.scrollCharts.setWidget(self.charts) self.tabsBottom.addTab(self.scrollCharts, 'Charts') if config['console']: self.console = ConsoleWidget() self.tabsBottom.addTab(ConsoleWidget(), 'Console') if config['buttons']: self.buttons = Buttons( socket=self.sock_tx, udp_ip_tx=self.ip_tx, udp_port_tx=self.port_tx, phases=config['phases'], valves=config['mechanisms']['Valves']['name'], valvestatuses=config['statuses']['valves'], pumps=config['mechanisms']['Pumps']['name']) self.updatableWidgets.append(self.buttons) self.tabsBottom.addTab(self.buttons, 'Function Buttons') self.widget = QWidget() self.widget.setLayout(self.layout) self.setCentralWidget(self.widget) self.testDataRandom = [] self.receiversThreadPool = QThreadPool() self.communicate(ip=config['UDP']['ip'], port=config['UDP']['port'], mechs=config['mechanisms'], status=list(config['basics'])[1]) del config
def __init__(self, actlaser, offlaser, exclaser, cameras, nidaq, pzt, webcam, *args, **kwargs): super().__init__(*args, **kwargs) # self.resize(2400, 1300) self.lasers = [actlaser, offlaser, exclaser] self.cameras = cameras self.nidaq = nidaq self.orcaflash = self.cameras[0] for c in self.cameras: self.changeParameter( lambda: c.setPropertyValue('trigger_polarity', 2)) # 3:DELAYED, 5:GLOBAL RESET self.changeParameter( lambda: c.setPropertyValue('trigger_global_exposure', 5)) # 1: EGDE, 2: LEVEL, 3:SYNCHREADOUT self.changeParameter(lambda: c.setPropertyValue( 'trigger_active', 2)) self.shapes = [(c.getPropertyValue('image_height')[0], c.getPropertyValue('image_width')[0]) for c in self.cameras] self.frameStart = (0, 0) self.currCamIdx = 0 noImage = np.zeros(self.shapes[self.currCamIdx]) self.latest_images = [noImage] * len(self.cameras) self.s = Q_(1, 's') self.lastTime = time.clock() self.fps = None # Actions and menubar # Shortcut only self.liveviewAction = QtGui.QAction(self) self.liveviewAction.setShortcut('Ctrl+Space') QtGui.QShortcut( QtGui.QKeySequence('Ctrl+Space'), self, self.liveviewKey) self.liveviewAction.triggered.connect(self.liveviewKey) self.liveviewAction.setEnabled(False) # Actions in menubar menubar = self.menuBar() fileMenu = menubar.addMenu('&File') self.savePresetAction = QtGui.QAction('Save configuration...', self) self.savePresetAction.setShortcut('Ctrl+S') self.savePresetAction.setStatusTip('Save camera & recording settings') def savePresetFunction(): return guitools.savePreset(self) self.savePresetAction.triggered.connect(savePresetFunction) fileMenu.addAction(self.savePresetAction) fileMenu.addSeparator() self.exportTiffAction = QtGui.QAction('Export HDF5 to Tiff...', self) self.exportTiffAction.setShortcut('Ctrl+E') self.exportTiffAction.setStatusTip('Export HDF5 file to Tiff format') self.exportTiffAction.triggered.connect(guitools.TiffConverterThread) fileMenu.addAction(self.exportTiffAction) self.exportlastAction = QtGui.QAction('Export last recording to Tiff', self) self.exportlastAction.setEnabled(False) self.exportlastAction.setShortcut('Ctrl+L') self.exportlastAction.setStatusTip('Export last recording to Tiff ' + 'format') fileMenu.addAction(self.exportlastAction) fileMenu.addSeparator() exitAction = QtGui.QAction(QtGui.QIcon('exit.png'), '&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(QtGui.QApplication.closeAllWindows) fileMenu.addAction(exitAction) self.tree = CamParamTree(self.orcaflash) self.umxpx = self.tree.p.param('Pixel size').value() # Indicator for loading frame shape from a preset setting # Currently not used. self.customFrameLoaded = False self.cropLoaded = False # Camera binning signals. Defines seperate variables for each parameter # and connects the signal emitted when they've been changed to a # function that actually changes the parameters on the camera or other # appropriate action. self.framePar = self.tree.p.param('Image frame') self.binPar = self.framePar.param('Binning') self.binPar.sigValueChanged.connect(self.setBinning) self.FrameMode = self.framePar.param('Mode') self.FrameMode.sigValueChanged.connect(self.updateFrame) self.X0par = self.framePar.param('X0') self.Y0par = self.framePar.param('Y0') self.widthPar = self.framePar.param('Width') self.heightPar = self.framePar.param('Height') self.applyParam = self.framePar.param('Apply') self.NewROIParam = self.framePar.param('New ROI') self.AbortROIParam = self.framePar.param('Abort ROI') # WARNING: This signal is emitted whenever anything about the status of # the parameter changes eg is set writable or not. self.applyParam.sigStateChanged.connect(self.adjustFrame) self.NewROIParam.sigStateChanged.connect(self.updateFrame) self.AbortROIParam.sigStateChanged.connect(self.AbortROI) # Exposition signals timingsPar = self.tree.p.param('Timings') self.EffFRPar = timingsPar.param('Internal frame rate') self.expPar = timingsPar.param('Set exposure time') self.expPar.sigValueChanged.connect(self.setExposure) self.ReadoutPar = timingsPar.param('Readout time') self.RealExpPar = timingsPar.param('Real exposure time') self.FrameInt = timingsPar.param('Internal frame interval') self.RealExpPar.setOpts(decimals=5) self.setExposure() # Set default values # Acquisition signals acquisParam = self.tree.p.param('Acquisition mode') self.trigsourceparam = acquisParam.param('Trigger source') self.trigsourceparam.sigValueChanged.connect(self.changeTriggerSource) # Camera settings widget cameraWidget = QtGui.QFrame() cameraWidget.setFrameStyle(QtGui.QFrame.Panel | QtGui.QFrame.Raised) cameraTitle = QtGui.QLabel('<h2><strong>Camera settings</strong></h2>') cameraTitle.setTextFormat(QtCore.Qt.RichText) cameraGrid = QtGui.QGridLayout() cameraWidget.setLayout(cameraGrid) cameraGrid.addWidget(cameraTitle, 0, 0) cameraGrid.addWidget(self.tree, 1, 0) self.presetsMenu = QtGui.QComboBox() self.controlFolder = os.path.split(os.path.realpath(__file__))[0] os.chdir(self.controlFolder) self.presetDir = os.path.join(self.controlFolder, 'presets') if not os.path.exists(self.presetDir): os.makedirs(self.presetDir) for preset in os.listdir(self.presetDir): self.presetsMenu.addItem(preset) self.loadPresetButton = QtGui.QPushButton('Load preset') def loadPresetFunction(): return guitools.loadPreset(self) self.loadPresetButton.pressed.connect(loadPresetFunction) # Liveview functionality self.liveviewButton = QtGui.QPushButton('LIVEVIEW') self.liveviewButton.setStyleSheet("font-size:20px") self.liveviewButton.setCheckable(True) self.liveviewButton.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding) # Link button click to funciton liveview self.liveviewButton.clicked.connect(self.liveview) self.liveviewButton.setEnabled(True) self.viewtimer = QtCore.QTimer() self.viewtimer.timeout.connect(self.updateView) self.alignmentON = False # Liveview control buttons self.viewCtrl = QtGui.QWidget() self.viewCtrlLayout = QtGui.QGridLayout() self.viewCtrl.setLayout(self.viewCtrlLayout) self.viewCtrlLayout.addWidget(self.liveviewButton, 0, 0, 1, 2) if len(self.cameras) > 1: self.toggleCamButton = QtGui.QPushButton('Toggle camera') self.toggleCamButton.setStyleSheet("font-size:18px") self.toggleCamButton.clicked.connect(self.toggleCamera) self.camLabel = QtGui.QLabel('Hamamatsu0') self.camLabel.setStyleSheet("font-size:18px") self.viewCtrlLayout.addWidget(self.toggleCamButton, 2, 0) self.viewCtrlLayout.addWidget(self.camLabel, 2, 1) # Status bar info self.fpsBox = QtGui.QLabel() self.fpsBox.setText('0 fps') self.statusBar().addPermanentWidget(self.fpsBox) self.tempStatus = QtGui.QLabel() self.statusBar().addPermanentWidget(self.tempStatus) self.temp = QtGui.QLabel() self.statusBar().addPermanentWidget(self.temp) self.cursorPos = QtGui.QLabel() self.cursorPos.setText('0, 0') self.statusBar().addPermanentWidget(self.cursorPos) self.cursorPosInt = QtGui.QLabel('0 counts', self) self.statusBar().addPermanentWidget(self.cursorPosInt) # Recording settings widget self.recWidget = record.RecordingWidget(self) # Image Widget imageWidget = pg.GraphicsLayoutWidget() self.vb = imageWidget.addViewBox(row=1, col=1) self.vb.setMouseMode(pg.ViewBox.RectMode) self.img = pg.ImageItem() self.img.translate(-0.5, -0.5) self.vb.addItem(self.img) self.vb.setAspectLocked(True) imageWidget.setAspectLocked(True) self.hist = pg.HistogramLUTItem(image=self.img) self.hist.vb.setLimits(yMin=0, yMax=66000) self.cubehelixCM = pg.ColorMap(np.arange(0, 1, 1/256), guitools.cubehelix().astype(int)) self.hist.gradient.setColorMap(self.cubehelixCM) for tick in self.hist.gradient.ticks: tick.hide() imageWidget.addItem(self.hist, row=1, col=2) self.ROI = guitools.ROI((0, 0), self.vb, (0, 0), handlePos=(1, 0), handleCenter=(0, 1), color='y', scaleSnap=True, translateSnap=True) self.ROI.sigRegionChangeFinished.connect(self.ROIchanged) self.ROI.hide() # x and y profiles xPlot = imageWidget.addPlot(row=0, col=1) xPlot.hideAxis('left') xPlot.hideAxis('bottom') self.xProfile = xPlot.plot() imageWidget.ci.layout.setRowMaximumHeight(0, 40) xPlot.setXLink(self.vb) yPlot = imageWidget.addPlot(row=1, col=0) yPlot.hideAxis('left') yPlot.hideAxis('bottom') self.yProfile = yPlot.plot() self.yProfile.rotate(90) imageWidget.ci.layout.setColumnMaximumWidth(0, 40) yPlot.setYLink(self.vb) # viewBox custom Tools self.grid = guitools.Grid(self.vb) self.gridButton = QtGui.QPushButton('Grid') self.gridButton.setCheckable(True) self.gridButton.setEnabled(False) self.gridButton.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding) self.gridButton.clicked.connect(self.grid.toggle) self.viewCtrlLayout.addWidget(self.gridButton, 1, 0) self.crosshair = guitools.Crosshair(self.vb) self.crosshairButton = QtGui.QPushButton('Crosshair') self.crosshairButton.setCheckable(True) self.crosshairButton.setEnabled(False) self.crosshairButton.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding) self.crosshairButton.pressed.connect(self.crosshair.toggle) self.viewCtrlLayout.addWidget(self.crosshairButton, 1, 1) self.levelsButton = QtGui.QPushButton('Update Levels') self.levelsButton.setEnabled(False) self.levelsButton.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding) self.levelsButton.pressed.connect(self.autoLevels) proxy = QtGui.QGraphicsProxyWidget() proxy.setWidget(self.levelsButton) imageWidget.addItem(proxy, row=0, col=2) # Initial camera configuration taken from the parameter tree self.orcaflash.setPropertyValue('exposure_time', self.expPar.value()) self.adjustFrame() self.updateFrame() # Illumination dock area illumDockArea = DockArea() # Laser dock laserDock = Dock("Laser Control", size=(300, 1)) self.laserWidgets = lasercontrol.LaserWidget(self.lasers, self.nidaq) laserDock.addWidget(self.laserWidgets) illumDockArea.addDock(laserDock) # Line Alignment Tool self.alignmentWidget = QtGui.QWidget() alignmentLayout = QtGui.QGridLayout() self.alignmentWidget.setLayout(alignmentLayout) self.angleEdit = QtGui.QLineEdit('30') self.alignmentLineMakerButton = QtGui.QPushButton('Alignment Line') self.angle = np.float(self.angleEdit.text()) self.alignmentLineMakerButton.clicked.connect(self.alignmentToolAux) self.alignmentCheck = QtGui.QCheckBox('Show Alignment Tool') alignmentLayout.addWidget(QtGui.QLabel('Line Angle'), 0, 0) alignmentLayout.addWidget(self.angleEdit, 0, 1) alignmentLayout.addWidget(self.alignmentLineMakerButton, 1, 0) alignmentLayout.addWidget(self.alignmentCheck, 1, 1) alignmentDock = Dock("Alignment Tool", size=(1, 1)) alignmentDock.addWidget(self.alignmentWidget) illumDockArea.addDock(alignmentDock, 'right') # Z align widget ZalignDock = Dock("Axial Alignment Tool", size=(1, 1)) self.ZalignWidget = guitools.AlignWidgetAverage(self) ZalignDock.addWidget(self.ZalignWidget) illumDockArea.addDock(ZalignDock, 'above', alignmentDock) # Rotational align widget RotalignDock = Dock("Rotational Alignment Tool", size=(1, 1)) self.RotalignWidget = guitools.AlignWidgetXYProject(self) RotalignDock.addWidget(self.RotalignWidget) illumDockArea.addDock(RotalignDock, 'above', alignmentDock) # Dock widget dockArea = DockArea() # Focus Lock widget FocusLockDock = Dock("Focus Lock", size=(400, 400)) self.FocusLockWidget = focus.FocusWidget(pzt, webcam) FocusLockDock.addWidget(self.FocusLockWidget) dockArea.addDock(FocusLockDock) # Scanner scanDock = Dock('Scan', size=(1, 1)) self.scanWidget = scanner.ScanWidget(self.nidaq, self) scanDock.addWidget(self.scanWidget) dockArea.addDock(scanDock, 'below', FocusLockDock) # Piezo positioner piezoDock = Dock('Piezo positioner', size=(1, 1)) self.piezoWidget = scanner.Positionner(self.scanWidget) piezoDock.addWidget(self.piezoWidget) dockArea.addDock(piezoDock, 'bottom', alignmentDock) console = ConsoleWidget(namespace={'pg': pg, 'np': np}) self.setWindowTitle('TempestaDev') self.cwidget = QtGui.QWidget() self.setCentralWidget(self.cwidget) layout = QtGui.QGridLayout() self.cwidget.setLayout(layout) layout.addWidget(self.presetsMenu, 0, 0) layout.addWidget(self.loadPresetButton, 0, 1) layout.addWidget(cameraWidget, 1, 0, 2, 2) layout.addWidget(self.viewCtrl, 3, 0, 1, 2) layout.addWidget(self.recWidget, 4, 0, 1, 2) layout.addWidget(console, 5, 0, 1, 2) layout.addWidget(imageWidget, 0, 2, 6, 1) layout.addWidget(illumDockArea, 0, 3, 2, 1) layout.addWidget(dockArea, 2, 3, 4, 1) layout.setRowMinimumHeight(2, 175) layout.setRowMinimumHeight(3, 100) layout.setRowMinimumHeight(5, 175) layout.setColumnMinimumWidth(0, 275) imageWidget.ci.layout.setColumnFixedWidth(1, 1150) imageWidget.ci.layout.setRowFixedHeight(1, 1150) layout.setColumnMinimumWidth(2, 1350)
def setupUi(self, Console): Console.setObjectName("Console") Console.resize(979, 656) self.horizontalLayout_3 = QtWidgets.QHBoxLayout(Console) self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.verticalLayout_5 = QtWidgets.QVBoxLayout() self.verticalLayout_5.setObjectName("verticalLayout_5") self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.GroupBox_resample = QtWidgets.QGroupBox(Console) sizePolicy = QtWidgets.QSizePolicy( QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.GroupBox_resample.sizePolicy().hasHeightForWidth()) self.GroupBox_resample.setSizePolicy(sizePolicy) self.GroupBox_resample.setMinimumSize(QtCore.QSize(190, 80)) self.GroupBox_resample.setMaximumSize(QtCore.QSize(250, 90)) self.GroupBox_resample.setObjectName("GroupBox_resample") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.GroupBox_resample) self.verticalLayout_3.setObjectName("verticalLayout_3") self.HBoxLayout_resample = QtWidgets.QHBoxLayout() self.HBoxLayout_resample.setObjectName("HBoxLayout_resample") self.RadioButton_min_1 = QtWidgets.QRadioButton(self.GroupBox_resample) self.RadioButton_min_1.setChecked(True) self.RadioButton_min_1.setObjectName("RadioButton_min_1") self.HBoxLayout_resample.addWidget(self.RadioButton_min_1) self.RadioButton_min_5 = QtWidgets.QRadioButton(self.GroupBox_resample) self.RadioButton_min_5.setObjectName("RadioButton_min_5") self.HBoxLayout_resample.addWidget(self.RadioButton_min_5) self.RadioButton_min_10 = QtWidgets.QRadioButton( self.GroupBox_resample) self.RadioButton_min_10.setObjectName("RadioButton_min_10") self.HBoxLayout_resample.addWidget(self.RadioButton_min_10) self.RadioButton_min_30 = QtWidgets.QRadioButton( self.GroupBox_resample) self.RadioButton_min_30.setObjectName("RadioButton_min_30") self.HBoxLayout_resample.addWidget(self.RadioButton_min_30) self.verticalLayout_3.addLayout(self.HBoxLayout_resample) self.horizontalLayout_2.addWidget(self.GroupBox_resample) self.GroupBox_goto = QtWidgets.QGroupBox(Console) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.GroupBox_goto.sizePolicy().hasHeightForWidth()) self.GroupBox_goto.setSizePolicy(sizePolicy) self.GroupBox_goto.setMinimumSize(QtCore.QSize(440, 80)) self.GroupBox_goto.setMaximumSize(QtCore.QSize(16777215, 90)) self.GroupBox_goto.setObjectName("GroupBox_goto") self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.GroupBox_goto) self.verticalLayout_4.setObjectName("verticalLayout_4") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout_his = QtWidgets.QHBoxLayout() self.horizontalLayout_his.setObjectName("horizontalLayout_his") self.verticalLayout_from_to = QtWidgets.QVBoxLayout() self.verticalLayout_from_to.setObjectName("verticalLayout_from_to") self.horizontalLayout_from = QtWidgets.QHBoxLayout() self.horizontalLayout_from.setObjectName("horizontalLayout_from") self.Label_from = QtWidgets.QLabel(self.GroupBox_goto) self.Label_from.setObjectName("Label_from") self.horizontalLayout_from.addWidget(self.Label_from) self.DateTimeEdit_start = QtWidgets.QDateTimeEdit(self.GroupBox_goto) sizePolicy = QtWidgets.QSizePolicy( QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.DateTimeEdit_start.sizePolicy().hasHeightForWidth()) self.DateTimeEdit_start.setSizePolicy(sizePolicy) self.DateTimeEdit_start.setMinimumSize(QtCore.QSize(130, 18)) self.DateTimeEdit_start.setMaximumSize(QtCore.QSize(16777215, 25)) self.DateTimeEdit_start.setLocale( QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates)) self.DateTimeEdit_start.setDateTime( QtCore.QDateTime(QtCore.QDate(2018, 1, 1), QtCore.QTime(0, 0, 0))) self.DateTimeEdit_start.setCurrentSection( QtWidgets.QDateTimeEdit.MonthSection) self.DateTimeEdit_start.setCalendarPopup(True) self.DateTimeEdit_start.setObjectName("DateTimeEdit_start") self.horizontalLayout_from.addWidget(self.DateTimeEdit_start) self.verticalLayout_from_to.addLayout(self.horizontalLayout_from) self.horizontalLayout_to = QtWidgets.QHBoxLayout() self.horizontalLayout_to.setObjectName("horizontalLayout_to") self.label_to = QtWidgets.QLabel(self.GroupBox_goto) self.label_to.setObjectName("label_to") self.horizontalLayout_to.addWidget(self.label_to) self.DateTimeEdit_end = QtWidgets.QDateTimeEdit(self.GroupBox_goto) sizePolicy = QtWidgets.QSizePolicy( QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.DateTimeEdit_end.sizePolicy().hasHeightForWidth()) self.DateTimeEdit_end.setSizePolicy(sizePolicy) self.DateTimeEdit_end.setMinimumSize(QtCore.QSize(130, 18)) self.DateTimeEdit_end.setMaximumSize(QtCore.QSize(16777215, 25)) self.DateTimeEdit_end.setLocale( QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates)) self.DateTimeEdit_end.setButtonSymbols( QtWidgets.QAbstractSpinBox.UpDownArrows) self.DateTimeEdit_end.setDateTime( QtCore.QDateTime(QtCore.QDate(2018, 3, 20), QtCore.QTime(0, 0, 0))) self.DateTimeEdit_end.setCurrentSection( QtWidgets.QDateTimeEdit.MonthSection) self.DateTimeEdit_end.setCalendarPopup(True) self.DateTimeEdit_end.setObjectName("DateTimeEdit_end") self.horizontalLayout_to.addWidget(self.DateTimeEdit_end) self.verticalLayout_from_to.addLayout(self.horizontalLayout_to) self.horizontalLayout_his.addLayout(self.verticalLayout_from_to) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.horizontalLayout_his.addItem(spacerItem) self.Button_history = QtWidgets.QPushButton(self.GroupBox_goto) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.Button_history.sizePolicy().hasHeightForWidth()) self.Button_history.setSizePolicy(sizePolicy) self.Button_history.setMinimumSize(QtCore.QSize(90, 20)) self.Button_history.setMaximumSize(QtCore.QSize(100, 28)) font = QtGui.QFont() font.setPointSize(8) self.Button_history.setFont(font) self.Button_history.setObjectName("Button_history") self.horizontalLayout_his.addWidget(self.Button_history) self.horizontalLayout.addLayout(self.horizontalLayout_his) spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.horizontalLayout.addItem(spacerItem1) self.Button_current = QtWidgets.QPushButton(self.GroupBox_goto) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.Button_current.sizePolicy().hasHeightForWidth()) self.Button_current.setSizePolicy(sizePolicy) self.Button_current.setMinimumSize(QtCore.QSize(90, 20)) self.Button_current.setMaximumSize(QtCore.QSize(100, 28)) font = QtGui.QFont() font.setPointSize(8) self.Button_current.setFont(font) self.Button_current.setObjectName("Button_current") self.horizontalLayout.addWidget(self.Button_current) self.verticalLayout_4.addLayout(self.horizontalLayout) self.horizontalLayout_2.addWidget(self.GroupBox_goto) self.verticalLayout_5.addLayout(self.horizontalLayout_2) self.ConsoleWidget_con = ConsoleWidget(Console) sizePolicy = QtWidgets.QSizePolicy( QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.ConsoleWidget_con.sizePolicy().hasHeightForWidth()) self.ConsoleWidget_con.setSizePolicy(sizePolicy) self.ConsoleWidget_con.setMinimumSize(QtCore.QSize(630, 300)) self.ConsoleWidget_con.setFocusPolicy(QtCore.Qt.StrongFocus) self.ConsoleWidget_con.setObjectName("ConsoleWidget_con") self.verticalLayout_5.addWidget(self.ConsoleWidget_con) self.gridLayout.addLayout(self.verticalLayout_5, 0, 0, 2, 1) self.verticalLayout_6 = QtWidgets.QVBoxLayout() self.verticalLayout_6.setObjectName("verticalLayout_6") self.TabWidget_data = QtWidgets.QTabWidget(Console) sizePolicy = QtWidgets.QSizePolicy( QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.TabWidget_data.sizePolicy().hasHeightForWidth()) self.TabWidget_data.setSizePolicy(sizePolicy) self.TabWidget_data.setMinimumSize(QtCore.QSize(311, 370)) self.TabWidget_data.setObjectName("TabWidget_data") self.tab_ticker = QtWidgets.QWidget() self.tab_ticker.setObjectName("tab_ticker") self.verticalLayout = QtWidgets.QVBoxLayout(self.tab_ticker) self.verticalLayout.setObjectName("verticalLayout") self.TableWidget_tickers = QtWidgets.QTableWidget(self.tab_ticker) sizePolicy = QtWidgets.QSizePolicy( QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.TableWidget_tickers.sizePolicy().hasHeightForWidth()) self.TableWidget_tickers.setSizePolicy(sizePolicy) self.TableWidget_tickers.setMinimumSize(QtCore.QSize(296, 327)) self.TableWidget_tickers.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) self.TableWidget_tickers.setAutoScroll(False) self.TableWidget_tickers.setEditTriggers( QtWidgets.QAbstractItemView.NoEditTriggers) self.TableWidget_tickers.setTabKeyNavigation(False) self.TableWidget_tickers.setObjectName("TableWidget_tickers") self.TableWidget_tickers.setColumnCount(3) self.TableWidget_tickers.setRowCount(0) item = QtWidgets.QTableWidgetItem() self.TableWidget_tickers.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_tickers.setHorizontalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_tickers.setHorizontalHeaderItem(2, item) self.TableWidget_tickers.verticalHeader().setVisible(False) self.verticalLayout.addWidget(self.TableWidget_tickers) self.TabWidget_data.addTab(self.tab_ticker, "") self.tab_price = QtWidgets.QWidget() self.tab_price.setObjectName("tab_price") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab_price) self.verticalLayout_2.setObjectName("verticalLayout_2") self.TableWidget_prices = QtWidgets.QTableWidget(self.tab_price) sizePolicy = QtWidgets.QSizePolicy( QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.TableWidget_prices.sizePolicy().hasHeightForWidth()) self.TableWidget_prices.setSizePolicy(sizePolicy) self.TableWidget_prices.setFrameShape(QtWidgets.QFrame.StyledPanel) self.TableWidget_prices.setFrameShadow(QtWidgets.QFrame.Sunken) self.TableWidget_prices.setVerticalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) self.TableWidget_prices.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) self.TableWidget_prices.setSizeAdjustPolicy( QtWidgets.QAbstractScrollArea.AdjustToContents) self.TableWidget_prices.setEditTriggers( QtWidgets.QAbstractItemView.NoEditTriggers) self.TableWidget_prices.setSelectionMode( QtWidgets.QAbstractItemView.SingleSelection) self.TableWidget_prices.setSelectionBehavior( QtWidgets.QAbstractItemView.SelectRows) self.TableWidget_prices.setGridStyle(QtCore.Qt.DashLine) self.TableWidget_prices.setObjectName("TableWidget_prices") self.TableWidget_prices.setColumnCount(2) self.TableWidget_prices.setRowCount(10) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setVerticalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setVerticalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setVerticalHeaderItem(2, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setVerticalHeaderItem(3, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setVerticalHeaderItem(4, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setVerticalHeaderItem(5, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setVerticalHeaderItem(6, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setVerticalHeaderItem(7, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setVerticalHeaderItem(8, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setVerticalHeaderItem(9, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setHorizontalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setItem(0, 0, item) item = QtWidgets.QTableWidgetItem() brush = QtGui.QBrush(QtGui.QColor(0, 255, 127)) brush.setStyle(QtCore.Qt.NoBrush) item.setBackground(brush) self.TableWidget_prices.setItem(1, 0, item) item = QtWidgets.QTableWidgetItem() brush = QtGui.QBrush(QtGui.QColor(0, 255, 127)) brush.setStyle(QtCore.Qt.NoBrush) item.setBackground(brush) self.TableWidget_prices.setItem(2, 0, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setItem(3, 0, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setItem(4, 0, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setItem(5, 0, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setItem(6, 0, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setItem(7, 0, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setItem(8, 0, item) item = QtWidgets.QTableWidgetItem() self.TableWidget_prices.setItem(9, 0, item) self.TableWidget_prices.horizontalHeader().setDefaultSectionSize(125) self.TableWidget_prices.horizontalHeader().setStretchLastSection(True) self.TableWidget_prices.verticalHeader().setDefaultSectionSize(45) self.verticalLayout_2.addWidget(self.TableWidget_prices) self.TabWidget_data.addTab(self.tab_price, "") self.verticalLayout_6.addWidget(self.TabWidget_data) self.gridLayout.addLayout(self.verticalLayout_6, 0, 1, 1, 1) spacerItem2 = QtWidgets.QSpacerItem(308, 108, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem2, 1, 1, 1, 1) self.horizontalLayout_3.addLayout(self.gridLayout) self.retranslateUi(Console) self.TabWidget_data.setCurrentIndex(1) QtCore.QMetaObject.connectSlotsByName(Console)
from pyqtgraph.console import ConsoleWidget def f(a: int = 1, b: float = 3.14, c: str = 'yay', d: bool = True): pass if __name__ == '__main__': app = QtWidgets.QApplication([]) opts = \ { 'b': { 'use_slider': True, 'minmax': (0, 100), 'step': 1, 'suffix': '%', 'typ': int, 'tooltip': 'yay tooltips' } } func = Function(f, arg_opts=opts) func.widget.show() console = ConsoleWidget(parent=func.widget, namespace={'this': func}) func.vlayout.addWidget(console) app.exec()
def __init__(self): QtWidgets.QMainWindow.__init__(self) centralWidget = QtWidgets.QWidget() self.setCentralWidget(centralWidget) self.running = False self._makeMenuBar() self.imageview = pg.ImageView() self.imageview.view.setAutoPan(False) self.imageview.setMinimumWidth(650) self.console = ConsoleWidget() self.console.setMaximumWidth(400) self.optionsWidget = QtWidgets.QWidget() def errCall(err, a): self.running = False self.imageview.setHistogramRange(0, 2) self.imageview.setLevels(0, 2) np.seterrcall(errCall) np.seterr(over='call') opsL = QtWidgets.QFormLayout() header = QtWidgets.QLabel("Diffusion Simulation") opsL.addRow(header) self.optionsWidget.setMaximumWidth(600) self.optionsWidget.setMinimumWidth(400) self.top_left_label = pg.LabelItem("", justify='right') self.imageview.ui.graphicsView.addItem(self.top_left_label) def timeChanged(m, b): self.top_left_label.setText( "Frame %d, %s ms" % (m, m * self.dtSpin.value() * self.refreshSpin.value())) self.imageview.sigTimeChanged.connect(timeChanged) def viewKeyPress(ev): pg.ViewBox.keyPressEvent(self.imageview.view, ev) self.imageview.view.keyPressEvent = viewKeyPress def saveModel(): puffs = self.puffs model = self.getModel() model.puffs = puffs name = QtWidgets.QInputDialog.getText(self, "Enter a model name", "Enter a model name") if name is not None and len(name) > 0: save_model(name, m) self.startButton = QtWidgets.QPushButton("Start") self.startButton.pressed.connect(self.start) self.saveModelButton = QtWidgets.QPushButton("Save Model") self.saveModelButton.pressed.connect(saveModel) self.progressBar = QtWidgets.QProgressBar() self.progressBar.setRange(0, 100) self.progressBar.setValue(0) buttonBox = QtWidgets.QWidget() buttonLayout = QtWidgets.QGridLayout() buttonLayout.addWidget(self.progressBar, 0, 0, 1, 3) buttonLayout.addWidget(self.saveModelButton, 1, 0) buttonLayout.addWidget(self.startButton, 1, 1) buttonBox.setLayout(buttonLayout) self.imageWidget = self._makeImageWidget() self.modelWidget = self._makeModelWidget() self.puffWidget = self._makePuffWidget() separator = QtWidgets.QWidget() sepLayout = QtWidgets.QHBoxLayout() self.infoLabel = QtWidgets.QLabel() sepLayout.addWidget(self.infoLabel) sepLayout.addStretch() separator.setLayout(sepLayout) def modelSelected(): data = combo.currentData() self.widthSpin.setValue(data.x_max) self.heightSpin.setValue(data.y_max) self.timeSpin.setValue(data.t_max) self.dxSpin.setValue(data.dx) self.dySpin.setValue(data.dy) self.dtSpin.setValue(data.dt) self.dSpin.setValue(data.d) self.sequesterSpin.setValue(data.sequestration) puffs = data.puffs self.pointSpin.setValue(len(puffs)) self.puffTable.setPuffs(puffs) self.refreshSpin.setValue(data.refresh) combo = QtWidgets.QComboBox() combo.currentIndexChanged.connect(modelSelected) for a, b in models.items(): combo.addItem(a, b) opsL.addRow("Saved Models", combo) opsL.addRow(self.imageWidget) opsL.addRow(self.puffWidget) opsL.addRow(self.modelWidget) opsL.addRow(separator) opsL.addRow(buttonBox) self.optionsWidget.setLayout(opsL) self.console.localNamespace.update({ 'self': self, 'set': self.imageview.setImage }) layout = QtWidgets.QGridLayout() layout.addWidget(self.console, 0, 0) layout.addWidget(self.imageview, 0, 1) layout.addWidget(self.optionsWidget, 0, 2) centralWidget.setLayout(layout) self.resize(1850, 600) self.mouse = [0, 0] self.imageview.scene.sigMouseMoved.connect(self.mouseMoved) self.imageview.mousePressEvent = self.mousePressed self.puffs = [] self.scatter = pg.ScatterPlotItem(brush=pg.mkBrush(255, 255, 0)) self.scatter.sigClicked.connect(self.mousePressed) self.imageview.view.addItem(self.scatter) self.imageview.view.setMenuEnabled(False)
def keyPressEvent(self, ev): if ev.text() == 'c': from pyqtgraph.console import ConsoleWidget self.console = ConsoleWidget() self.console.localNamespace['self'] = self self.console.show()
def __init__(self, name): super().__init__(name, terminals={'title':{'io':'in'}}, allowAddInput=True) self.console = ConsoleWidget() self.title = None
class PandasViewer(QtGui.QMainWindow, Ui_MainWindow): def __init__(self, parent=None, *args, df="none", path=None): QtGui.QMainWindow.__init__(self) Ui_MainWindow.__init__(self) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setWindowTitle("Data Explorer") self.setWindowIcon(QtGui.QIcon("icons/pickle.png")) self.show() self.ui.treeWidgetAllColums.setVisible(False) self.path = path try: if type(df) == str: if not df.endswith("pickle"): self.df = pd.read_csv(df, delimiter="\t") else: self.df = pd.read_pickle(df) self.path = os.path.dirname(df) elif type(df) == pd.core.frame.DataFrame: self.df = df except Exception as e: self.df = pd.DataFrame() # QtWidgets.QMessageBox.warning(self, "Could not open DataFrame", str(e)) self.set_data(self.ui.tableWidgetAllData, self.df) self.set_column_widget() self.filters = {} self.ui.pushButtonAddToSelection.clicked.connect(self.add_to_selection) self.ui.pushButtonRemoveFromSelection.clicked.connect( self.remove_from_selection) self.ui.comboBoxSelectedColumns.currentIndexChanged.connect( self.update_unique_values) self.ui.pushButtonApplyFilters.clicked.connect(self.apply_new_filter) self.ui.checkBoxUnique.clicked.connect(self.update_unique_values) self.ui.checkBoxSorting.clicked.connect(self.update_unique_values) self.ui.listWidgetUniqueValues.itemSelectionChanged.connect( self.row_selection) self.ui.checkBoxPreviewSelection.clicked.connect(self.row_selection) self.ui.tableWidgetSelectedData.setContextMenuPolicy( QtCore.Qt.CustomContextMenu) self.ui.tableWidgetSelectedData.customContextMenuRequested.connect( self.contextMenuEvent_SelectedData) self.ui.actionLoad_Dataset_into_Viewer.triggered.connect( self.load_dataset) self.ui.action_as_CSV.triggered.connect( lambda: self.save_selection(as_type="csv")) self.ui.action_as_Pickle.triggered.connect( lambda: self.save_selection(as_type="pickle")) self.toCSVAct = QtWidgets.QAction( "&Save Selection to CSV", self, triggered=lambda: self.save_selection(as_type="csv")) self.removeAllFiltersAct = QtWidgets.QAction( "&Remove all Filters", self, triggered=self.remove_all_filters) self.ui.actionRoaming.triggered.connect( lambda: self.start_roaming_calculator(self.df_selection)) self.ui.actionData.triggered.connect(lambda: self.hide_unhide_widget( self.ui.tabWidget, self.ui.actionData)) self.ui.actionPlotting.triggered.connect( lambda: self.hide_unhide_widget(self.ui.groupBoxPlotting, self.ui. actionPlotting)) self.ui.actionData_Selection.triggered.connect( lambda: self.hide_unhide_widget(self.ui.groupBox, self.ui. actionData_Selection)) self.ui.actionTransforms.triggered.connect( lambda: self.hide_unhide_widget(self.ui.frameTransform, self.ui. actionTransforms)) self.ui.actionStatistics.triggered.connect( lambda: self.hide_unhide_widget(self.ui.frameStatistics, self.ui. actionStatistics)) self.ui.frameConsole.setVisible(False) self.ui.frameStatistics.setVisible(False) self.ui.actionConsole.triggered.connect(self.open_console) self.ui.pushButtonCloseConsole.clicked.connect(self.close_console) self.ui.actionData_Selection.setIcon( QtGui.QIcon("icons/checkmark.png")) self.ui.actionData.setIcon(QtGui.QIcon("icons/checkmark.png")) self.ui.groupBoxPlotting.setVisible(False) self.ui.framePlotWidget.setLayout(QtWidgets.QVBoxLayout()) self.plot = PlotWidget() self.ui.framePlotWidget.layout().addWidget(self.plot) self.ui.pushButtonPlot.clicked.connect(self.update_plot) for plottype in ["violinplot", "lineplot", "scatterplot"]: self.ui.comboBoxPlotType.addItem(plottype) self.ui.listWidgetAppliedFilters.setContextMenuPolicy( QtCore.Qt.CustomContextMenu) self.ui.listWidgetAppliedFilters.customContextMenuRequested.connect( self.contextMenuEvent_AppliedFilters) self.removeFilteract = QtWidgets.QAction("&Remove Selected Filter(s)", self, triggered=self.remove_filters) self.loadFiltersetact = QtWidgets.QAction( "&Load Filterset", self, triggered=self.load_filterset) self.saveFiltersetact = QtWidgets.QAction( "&Save Filterset", self, triggered=self.save_filterset) self.ui.groupBoxPlotting.setContextMenuPolicy( QtCore.Qt.CustomContextMenu) self.ui.groupBoxPlotting.customContextMenuRequested.connect( self.contextMenuEvent_PlottingMenu) self.updatePlottingUIact = QtWidgets.QAction( "&Update...", self, triggered=self.update_plotting_ui) self.ui.comboBoxPlotType.currentTextChanged.connect( self.toggle_colorselection) self.ui.comboBoxColorParam.setVisible(False) self.ui.labelColorParam.setVisible(False) self.ui.frameTransform.setVisible(False) for transform in [ "none", "square root", "natural logarithm", "reciprocal", "reciprocal sqrt", "exponential" ]: self.ui.comboBoxTransformations.addItem(transform) self.ui.pushButtonTransformData.clicked.connect(self.transform) self.ui.pushButtonAddTransformToData.clicked.connect( self.add_transformation_to_data) self.ui.actionScan_for_significance.triggered.connect( self.start_significance_scanner) self.ui.actionPairwaise_Test_Categorical.triggered.connect( self.start_pairwise_scanner) self.ui.actionminmax_scale.triggered.connect( lambda: self.normalize_data("minmax")) self.ui.actionmean_scale.triggered.connect( lambda: self.normalize_data("mean")) self.ui.pushButtonTest.clicked.connect(self.run_statistics) for test in ["Kruskal-Wallis", "Oneway ANOVA"]: self.ui.comboBoxStatisticalTests.addItem(test) self.ui.actionRename_items_in_column.triggered.connect( self.start_item_renamer) def contextMenuEvent_SelectedData(self, event): menu = QtWidgets.QMenu(self) menu.addAction(self.toCSVAct) menu.addAction(self.removeAllFiltersAct) menu.popup(self.ui.tableWidgetSelectedData.mapToGlobal(event)) def contextMenuEvent_AppliedFilters(self, event): menu = QtWidgets.QMenu(self) if len(self.ui.listWidgetAppliedFilters.selectedItems()) > 0: menu.addAction(self.removeFilteract) menu.addAction(self.saveFiltersetact) menu.addAction(self.loadFiltersetact) menu.popup(self.ui.listWidgetAppliedFilters.mapToGlobal(event)) def contextMenuEvent_PlottingMenu(self, event): menu = QtWidgets.QMenu(self) menu.addAction(self.updatePlottingUIact) menu.popup(self.ui.groupBoxPlotting.mapToGlobal(event)) def load_dataset(self): path = QtWidgets.QFileDialog.getOpenFileName( caption="Select a file (.pickle, or tab delimited txt", directory=self.path)[0] self.path = os.path.dirname(path) self.filters = {} try: if type(path) == str: if not path.endswith("pickle"): self.df = pd.read_csv(path, delimiter="\t") else: self.df = pd.read_pickle(path) except Exception as e: print(e) self.df_selection = pd.DataFrame() self.set_data(self.ui.tableWidgetAllData, self.df) self.set_data(self.ui.tableWidgetSelectedData, self.df_selection) self.set_column_widget() def check_datatype(self): def find_datatype(data): try: if len(data.dropna().unique()) / len(data.dropna()) < 0.08: return ("categorical") elif data.dtype == type( "str") or data.dtype == "O" or "index" in col.lower(): return ("categorical") else: return ("numerical") except: return ("categorical") if not hasattr(self, "datatype_columns"): self.datatype_columns = {} for col in self.df.columns: self.datatype_columns[col] = { "datatype": find_datatype(self.df[col]), "userdefined": False } else: for col in self.df.columns: if col in self.datatype_columns.keys(): if not self.datatype_columns[col]["userdefined"]: self.datatype_columns[col] = { "datatype": find_datatype(self.df[col]), "userdefined": False } else: self.datatype_columns[col] = { "datatype": find_datatype(self.df[col]), "userdefined": False } # def set_data(self, tableView, df): # model = PandasModel(df) # tableView.setModel(model) def set_data(self, tableWidget, df): if "index" not in df.columns: df["index"] = df.index tableWidget.setColumnCount(len(df.columns)) tableWidget.setHorizontalHeaderLabels(df.columns) tableWidget.setRowCount(len(df)) for i in range(len(df.index)): for j in range(len(df.columns)): tableWidget.setItem( i, j, QtWidgets.QTableWidgetItem(str(df.iloc[i, j]))) def set_column_widget(self): self.ui.listWidgetAllColumns.clear() self.ui.listWidgetAllColumns.addItems(self.df.columns) self.colour_listwidget_by_datatype(self.ui.listWidgetAllColumns) def colour_listwidget_by_datatype(self, widget): try: self.check_datatype() for i in range(widget.count()): item = widget.item(i) text = item.text() if self.datatype_columns[text]['datatype'] == "categorical": item.setBackground(QtGui.QColor(252, 186, 3, 50)) else: item.setBackground(QtGui.QColor(0, 255, 68, 50)) except Exception as e: print(str(e)) # THIS IS CODE TO SHOW COLUMNS IN A TREE WIDGET ITEM! SET VISIBLE TO TRUE IN __init__ TO SHOW THE WIDGET # to_branch = list(set([x.split("_")[0] for x in self.df.columns if len(x.split("_"))>1])) # singles = list(set([x for x in self.df.columns if len(x.split("_")) == 1 and x not in to_branch])) # # for element in to_branch: # parentItem = QtWidgets.QTreeWidgetItem(self.ui.treeWidgetAllColums, [element]) # to_add = [x for x in self.df.columns if x.startswith(element)] # for item_to_add in to_add: # item = QtWidgets.QTreeWidgetItem(parentItem, [item_to_add]) # item.setData(1,0,item_to_add) # for single in singles: # item = QtWidgets.QTreeWidgetItem(self.ui.treeWidgetAllColums, [single]) # item.setData(1,0,single) def add_to_selection(self): selection_to_add = [ item.text() for item in self.ui.listWidgetAllColumns.selectedItems() ] selected_columns = [ self.ui.listWidgetSelectedColumns.item(i).text() for i in range(self.ui.listWidgetSelectedColumns.count()) ] for item in selection_to_add: if item not in selected_columns: self.ui.listWidgetSelectedColumns.addItem(item) self.update_selected_data() def remove_from_selection(self): selection_to_remove = [ item.text() for item in self.ui.listWidgetSelectedColumns.selectedItems() ] selected_columns = [ self.ui.listWidgetSelectedColumns.item(i).text() for i in range(self.ui.listWidgetSelectedColumns.count()) ] print(selection_to_remove) print(selected_columns) self.ui.listWidgetSelectedColumns.clear() for item in selected_columns: if item not in selection_to_remove: self.ui.listWidgetSelectedColumns.addItem(item) self.update_selected_data() def update_selected_data(self): selection = [ self.ui.listWidgetSelectedColumns.item(i).text() for i in range(self.ui.listWidgetSelectedColumns.count()) ] # self.df_selection = self.df[selection] self.apply_filters() self.set_data(self.ui.tableWidgetSelectedData, self.df_selection) self.ui.comboBoxSelectedColumns.clear() self.ui.comboBoxSelectedColumns.addItem("index") for item in selection: self.ui.comboBoxSelectedColumns.addItem(item) self.update_plotting_ui() self.colour_listwidget_by_datatype(self.ui.listWidgetSelectedColumns) def update_unique_values(self): self.ui.listWidgetUniqueValues.clear() try: col = self.ui.comboBoxSelectedColumns.currentText() if col != "index": if self.ui.checkBoxUnique.isChecked(): list_of_vals = [ x for x in pd.unique(self.df_selection[col]) ] else: list_of_vals = [x for x in self.df_selection[col]] if self.ui.checkBoxSorting.isChecked(): list_of_vals.sort() else: list_of_vals = [str(x) for x in self.df_selection.index] self.ui.listWidgetUniqueValues.addItems( [str(x) for x in list_of_vals]) except: sys.stdout.write("\n No selectable columns") def create_filter(self): col = self.ui.comboBoxSelectedColumns.currentText() filtername = col include = self.ui.radioButtonInclude.isChecked() if self.df[col].dtype == "O": selection = [ x.data(0) for x in self.ui.listWidgetUniqueValues.selectedItems() ] else: selection = [ ast.literal_eval(x.data(0)) for x in self.ui.listWidgetUniqueValues.selectedItems() ] if col in self.filters.keys() and include == False: prev_selection = self.filters[col][2] selection = selection + prev_selection self.filters[filtername] = (col, include, selection) def apply_filters(self): columns = [ self.ui.listWidgetSelectedColumns.item(i).text() for i in range(self.ui.listWidgetSelectedColumns.count()) ] self.df_selection = self.df[columns] self.ui.listWidgetAppliedFilters.clear() for filt in self.filters.keys(): self.ui.listWidgetAppliedFilters.addItem(filt) col, include, selection = self.filters[filt] if col != "index": if include: self.df_selection = self.df_selection[ self.df_selection[col].isin(selection)] else: self.df_selection = self.df_selection[ ~self.df_selection[col].isin(selection)] else: if include: self.df_selection = self.df_selection.loc[ self.df_selection.index.isin(selection)] else: self.df_selection = self.df_selection.loc[ ~self.df_selection.index.isin(selection)] def remove_filters(self): filter_to_remove = self.ui.listWidgetAppliedFilters.selectedItems( )[0].text() print("Removing :", filter_to_remove) self.filters.pop(filter_to_remove) self.update_selected_data() def remove_all_filters(self): self.filters = {} self.update_selected_data() def load_filterset(self): path_to_filter = QtWidgets.QFileDialog.getOpenFileName( directory=self.path)[0] with open(path_to_filter, "rb") as f: self.filters = pickle.load(f) columns = [ self.ui.listWidgetSelectedColumns.item(i).text() for i in range(self.ui.listWidgetSelectedColumns.count()) ] for key in self.filters.keys(): if key not in columns: self.ui.listWidgetSelectedColumns.addItem(key) self.apply_filters() self.update_selected_data() def save_filterset(self): savepath = QtWidgets.QFileDialog.getSaveFileName( directory=self.path)[0] if not savepath.endswith(".flt"): savepath += ".flt" with open(savepath, "wb") as f: pickle.dump(self.filters, f) def row_selection(self): col = self.ui.comboBoxSelectedColumns.currentText() if self.df[col].dtype == "O": selection = [ x.data(0) for x in self.ui.listWidgetUniqueValues.selectedItems() ] else: selection = [ ast.literal_eval(x.data(0)) for x in self.ui.listWidgetUniqueValues.selectedItems() ] if col != "index": if self.ui.radioButtonInclude.isChecked(): self.df_selection_rows = self.df_selection[ self.df_selection[col].isin(selection)] else: self.df_selection_rows = self.df_selection[ ~self.df_selection[col].isin(selection)] else: if self.ui.radioButtonInclude.isChecked(): self.df_selection_rows = self.df_selection.loc[ self.df_selection.index.isin(selection)] else: self.df_selection_rows = self.df_selection.loc[ ~self.df_selection.index.isin(selection)] if self.ui.checkBoxPreviewSelection.isChecked(): self.set_data(self.ui.tableWidgetSelectedData, self.df_selection_rows) else: self.set_data(self.ui.tableWidgetSelectedData, self.df_selection) def apply_new_filter(self): self.create_filter() self.apply_filters() self.set_data(self.ui.tableWidgetSelectedData, self.df_selection) self.ui.checkBoxPreviewSelection.setChecked(False) self.update_unique_values() self.update_plotting_ui() def save_selection(self, as_type): filename = QtWidgets.QFileDialog.getSaveFileName( caption="Select Saving Location", directory=self.path)[0] if as_type == "csv": if not filename.endswith(".txt"): filename += ".txt" self.df_selection.to_csv(filename, sep="\t") elif as_type == "pickle": if not filename.endswith(".pickle"): filename += ".pickle" self.df_selection.to_pickle(filename) print(filename) def update_plotting_ui(self): self.ui.groupBoxPlotting.setVisible(True) xdata_text = self.ui.comboBoxXData.currentText() ydata_text = self.ui.comboBoxYData.currentText() color_text = self.ui.comboBoxColorParam.currentText() for box in [self.ui.comboBoxXData, self.ui.comboBoxYData]: box.clear() box.addItems(self.df_selection.columns) self.ui.comboBoxXData.setCurrentText(xdata_text) self.ui.comboBoxYData.setCurrentText(ydata_text) self.ui.comboBoxColorParam.setCurrentText(color_text) self.toggle_colorselection(text=self.ui.comboBoxPlotType.currentText()) def toggle_colorselection(self, text="None"): if text == "None": text = self.ui.comboBoxColorParam.currentText() if "scatter" in text: self.ui.comboBoxColorParam.setVisible(True) self.ui.labelColorParam.setVisible(True) self.ui.comboBoxColorParam.clear() self.ui.comboBoxColorParam.addItems(self.df_selection.columns) else: self.ui.comboBoxColorParam.setVisible(False) self.ui.labelColorParam.setVisible(False) def update_plot(self): try: self.plot.canvas.clear() plottype = self.ui.comboBoxPlotType.currentText() x_data = self.ui.comboBoxXData.currentText() y_data = self.ui.comboBoxYData.currentText() if plottype == "violinplot": ax = self.plot.canvas.figure.add_subplot(111) groups = self.df_selection[x_data].unique().tolist() to_plot = [] for group in groups: to_plot.append(self.df_selection[y_data] [self.df_selection[x_data] == group].dropna().values.tolist()) ax.violinplot(to_plot) try: ax.set_xticks([x + 1 for x in range(len(groups))]) if max([len(str(x)) for x in groups]) > 10: rotation = 90 else: rotation = 0 ax.set_xticklabels(groups, rotation=rotation) ax.set_xlabel(x_data) ax.set_ylabel(y_data) self.plot.canvas.figure.tight_layout() self.plot.canvas.draw() except: pass elif plottype == "lineplot": ax = self.plot.canvas.figure.add_subplot(111) ax.plot(self.df_selection[x_data], self.df_selection[y_data]) ax.set_xlabel(x_data) ax.set_ylabel(y_data) self.plot.canvas.figure.tight_layout() self.plot.canvas.draw() elif plottype == "scatterplot": ax = self.plot.canvas.figure.add_subplot(111) colorparam = self.ui.comboBoxColorParam.currentText() try: ax.scatter(self.df_selection[x_data].dropna(), self.df_selection[y_data].dropna(), c=self.df_selection.loc[ self.df_selection[x_data].notnull(), colorparam]) except: try: progress = 0 colordict = {} counter = 0 for x in self.df_selection[colorparam].unique(): colordict[x] = counter counter += 1 colors = [ colordict[key] for key in self.df_selection[colorparam] ] x = self.df_selection[x_data] y = self.df_selection[y_data] ax.scatter(x, y, c=colors) except Exception as e: print(progress, str(e)) ax.set_xlabel(x_data) ax.set_ylabel(y_data) self.plot.canvas.figure.tight_layout() self.plot.canvas.draw() except Exception as e: e = str(e) QtWidgets.QMessageBox.warning( self, "Error in plot", "It seems that you are making an impossible plot. Please look at your parameters. \n This is what the computer has to say: \n '" + e + "'") def open_console(self): if not self.ui.frameConsole.isVisible(): if hasattr(self, "console"): if self.ui.frameConsole.isVisible() == False: self.ui.frameConsole.setVisible(True) if self.ui.groupBoxPlotting.isVisible() == False: self.ui.actionPlotting.setIcon( QtGui.QIcon("icons/checkmark.png")) self.ui.groupBoxPlotting.setVisible(True) else: self.ui.frameConsole.setLayout(QtWidgets.QVBoxLayout()) self.console = ConsoleWidget( namespace={ "viewer": self, "pd": pd, "np": np, "os": os }, text= "\r This console has access to everything in the namespace of this viewer. " "\n Example: viewer.df refers to the complete dataframe. viewer.df_selection refers to currently selected data " "\n UI widgets are accessible using viewer.ui, like viewer.ui.console for this console." "\n imported libraries: pandas as pd, numpy as np, os ") self.ui.frameConsole.layout().addWidget(self.console) self.ui.frameConsole.setVisible(True) self.ui.groupBoxPlotting.setVisible(True) self.ui.actionConsole.setIcon( QtGui.QIcon("icons/checkmark.png")) else: self.close_console() def close_console(self): if hasattr(self, "console"): self.console.setParent(None) delattr(self, "console") self.ui.frameConsole.setVisible(False) self.ui.actionConsole.setIcon(QtGui.QIcon()) def hide_unhide_widget(self, widget, action): if widget.isVisible(): widget.setVisible(False) action.setIcon(QtGui.QIcon()) else: widget.setVisible(True) action.setIcon(QtGui.QIcon("icons/checkmark.png")) def _transorm(self, to_transform, transformation): if transformation == "none": transformed = to_transform elif transformation == "square root": transformed = np.sqrt(to_transform) elif transformation == "natural logarithm": transformed = np.log(to_transform) elif transformation == "reciprocal": transformed = 1 / to_transform elif transformation == "reciprocal sqrt": transformed = 1 / (np.sqrt(to_transform)) else: transformed = to_transform**2 return transformed def transform(self): to_transform = self.df_selection[self.ui.comboBoxYData.currentText()] transformation = self.ui.comboBoxTransformations.currentText() transformed = self._transorm(to_transform, transformation) try: self.plot.canvas.clear() plottype = self.ui.comboBoxPlotType.currentText() x_data = self.ui.comboBoxXData.currentText() if plottype == "violinplot": ax = self.plot.canvas.figure.add_subplot(111) groups = self.df_selection[x_data].unique().tolist() to_plot = [] for group in groups: to_plot.append(transformed[self.df_selection[x_data] == group].dropna().values.tolist()) ax.violinplot(to_plot) try: ax.set_xticks([x + 1 for x in range(len(groups))]) if max([len(str(x)) for x in groups]) > 10: rotation = 90 else: rotation = 0 ax.set_xticklabels(groups, rotation=rotation) ax.set_xlabel(x_data) ax.set_ylabel(transformation) self.plot.canvas.figure.tight_layout() self.plot.canvas.draw() except Exception as e: print(f"{e}") elif plottype == "lineplot": ax = self.plot.canvas.figure.add_subplot(111) ax.plot(self.df_selection[x_data], transformed) ax.set_xlabel(x_data) ax.set_ylabel(transformation) self.plot.canvas.figure.tight_layout() self.plot.canvas.draw() elif plottype == "scatterplot": ax = self.plot.canvas.figure.add_subplot(111) colorparam = self.ui.comboBoxColorParam.currentText() try: ax.scatter(self.df_selection[x_data].dropna(), transformed.dropna(), c=self.df_selection.loc[ self.df_selection[x_data].notnull(), colorparam]) except: try: progress = 0 colordict = {} counter = 0 for x in self.df_selection[colorparam].unique(): colordict[x] = counter counter += 1 colors = [ colordict[key] for key in self.df_selection[colorparam] ] x = self.df_selection[x_data] y = transformed ax.scatter(x, y, c=colors) except Exception as e: print(progress, str(e)) ax.set_xlabel(x_data) ax.set_ylabel(transformation) self.plot.canvas.figure.tight_layout() self.plot.canvas.draw() except Exception as e: e = str(e) QtWidgets.QMessageBox.warning( self, "Error in plot", "It seems that you are making an impossible plot. Please look at your parameters. \n This is what the computer has to say: \n '" + e + "'") def add_transformation_to_data(self): names = { "none": "none", "square root": "sqrt", "natural logarithm": "ln", "reciprocal": "rcp", "reciprocal sqrt": "rcpsqrt", "exponential": "exp" } param = self.ui.comboBoxYData.currentText() to_transform = self.df_selection[param] transformation = self.ui.comboBoxTransformations.currentText() transformed = self._transorm(to_transform, transformation) colname = param + "_" + names[transformation] self.df_selection[colname] = transformed self.update_plotting_ui() self.set_data(self.ui.tableWidgetSelectedData, self.df_selection) def normalize_data(self, scaling_type="minmax"): to_scale = [ col for col in self.df_selection.columns if self.datatype_columns[col]["datatype"] == "numerical" ] if scaling_type == "minmax": minimum, ok = QtWidgets.QInputDialog.getDouble(self, "Set min value", "Input a number", value=-1) maximum, ok = QtWidgets.QInputDialog.getDouble(self, "Set max value", "Input a number", value=1) self.df_selection[to_scale] = minmax_scale( self.df_selection[to_scale], feature_range=(minimum, maximum)) else: self.df_selection[to_scale] = scale(self.df_selection[to_scale]) self.set_data(self.ui.tableWidgetSelectedData, self.df_selection) def start_significance_scanner(self): significance_scanner = SignificanceScanner(parent_module=self) significance_scanner.show() def start_pairwise_scanner(self): # pairwise_scanner = PairwiseScanner(parent_module=self) try: pairwise_scanner = SSMDScanner(parent_module=self) pairwise_scanner.show() except Exception as e: QtWidgets.QMessageBox.warning( self, "Error starting scannermodule", "This is what the computer has to say: \n '" + str(e) + " \n \n Have you selected any data?") def run_statistics(self): test = self.ui.comboBoxStatisticalTests.currentText() alpha = self.ui.doubleSpinBoxAlpha.value() x_data = self.ui.comboBoxXData.currentText() y_data = self.ui.comboBoxYData.currentText() groups = self.df_selection[x_data].unique().tolist() to_plot = [] for group in groups: to_plot.append(self.df_selection[y_data][ self.df_selection[x_data] == group].dropna().values.tolist()) if "kruskal" in test.lower(): pval = stats.kruskal(*to_plot)[1] else: pval = stats.f_oneway(*to_plot)[1] self.ui.lineEditPvalue.setText(str(pval)) sys.stdout.write("\n Results for " + test + " " + x_data + " vs " + y_data + " \n pval= " + str(pval) + "\n") def start_item_renamer(self): self.item_renamer = ItemRenamer(parent_module=self) def start_roaming_calculator(self, data): print("Roaming Calculater currently not implemented")
def __init__(self, app_handle = None): super().__init__() self.app_handle = app_handle if os.name == 'posix': pyecog_string = '🇵 🇾 🇪 🇨 🇴 🇬' else: pyecog_string = 'PyEcog' print('\n',pyecog_string,'\n') # Initialize Main Window geometry # self.title = "ℙ𝕪𝔼𝕔𝕠𝕘" self.title = pyecog_string (size, rect) = self.get_available_screen() icon_file = pkg_resources.resource_filename('pyecog2', 'icons/icon.png') print('ICON:', icon_file) self.setWindowIcon(QtGui.QIcon(icon_file)) self.app_handle.setWindowIcon(QtGui.QIcon(icon_file)) self.setWindowTitle(self.title) self.setGeometry(0, 0, size.width(), size.height()) # self.setWindowFlags(QtCore.Qt.FramelessWindowHint) # fooling around # self.setWindowFlags(QtCore.Qt.CustomizeWindowHint| QtCore.Qt.Tool) # self.setAttribute(QtCore.Qt.WA_TranslucentBackground) self.main_model = MainModel() self.autosave_timer = QtCore.QTimer() self.live_recording_timer = QtCore.QTimer() # Populate Main window with widgets # self.createDockWidget() self.dock_list = {} self.paired_graphics_view = PairedGraphicsView(parent=self) self.tree_element = FileTreeElement(parent=self) self.main_model.sigProjectChanged.connect(lambda: self.tree_element.set_rootnode_from_project(self.main_model.project)) self.dock_list['File Tree'] = QDockWidget("File Tree", self) self.dock_list['File Tree'].setWidget(self.tree_element.widget) self.dock_list['File Tree'].setFloating(False) self.dock_list['File Tree'].setObjectName("File Tree") self.dock_list['File Tree'].setAllowedAreas(Qt.RightDockWidgetArea | Qt.LeftDockWidgetArea | Qt.TopDockWidgetArea | Qt.BottomDockWidgetArea) self.dock_list['File Tree'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable) self.plot_controls = PlotControls(self.main_model) self.plot_controls.sigUpdateXrange_i.connect(self.paired_graphics_view.insetview_set_xrange) self.plot_controls.sigUpdateXrange_o.connect(self.paired_graphics_view.overview_set_xrange) self.plot_controls.sigUpdateFilter.connect(self.paired_graphics_view.updateFilterSettings) self.dock_list['Plot Controls'] = QDockWidget("Plot controls", self) self.dock_list['Plot Controls'].setWidget(self.plot_controls) self.dock_list['Plot Controls'].setFloating(False) self.dock_list['Plot Controls'].setObjectName("Plot Controls") self.dock_list['Plot Controls'].setAllowedAreas( Qt.RightDockWidgetArea | Qt.LeftDockWidgetArea | Qt.TopDockWidgetArea | Qt.BottomDockWidgetArea) self.dock_list['Plot Controls'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable) self.dock_list['Hints'] = QDockWidget("Hints", self) self.text_edit = QTextBrowser() hints_file = pkg_resources.resource_filename('pyecog2', 'HelperHints.md') # text = open('HelperHints.md').read() print('hints file:',hints_file) text = open(hints_file).read() text = text.replace('icons/banner_small.png',pkg_resources.resource_filename('pyecog2', 'icons/banner_small.png')) self.text_edit.setMarkdown(text) self.dock_list['Hints'].setWidget(self.text_edit) self.dock_list['Hints'].setObjectName("Hints") # self.dock_list['Hints'].setFloating(False) # self.dock_list['Hints'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable) self.annotation_table = AnnotationTableWidget(self.main_model.annotations,self) # passing self as parent in position 2 self.dock_list['Annotations Table'] = QDockWidget("Annotations Table", self) self.dock_list['Annotations Table'].setWidget(self.annotation_table) self.dock_list['Annotations Table'].setObjectName("Annotations Table") self.dock_list['Annotations Table'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable) self.annotation_parameter_tree = AnnotationParameterTee(self.main_model.annotations) self.dock_list['Annotation Parameter Tree'] = QDockWidget("Annotation Parameter Tree", self) self.dock_list['Annotation Parameter Tree'].setWidget(self.annotation_parameter_tree) self.dock_list['Annotation Parameter Tree'].setObjectName("Annotation Parameter Tree") self.dock_list['Annotation Parameter Tree'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable) self.video_element = VideoWindow(project=self.main_model.project) self.dock_list['Video'] = QDockWidget("Video", self) self.dock_list['Video'].setWidget(self.video_element) self.dock_list['Video'].setObjectName("Video") # self.dock_list['Video'].setFloating(True) # self.dock_list['Video'].hide() self.video_element.mediaPlayer.setNotifyInterval(40) # 25 fps # Video units are in miliseconds, pyecog units are in seconds self.video_element.sigTimeChanged.connect(self.main_model.set_time_position) self.main_model.sigTimeChanged.connect(self.video_element.setGlobalPosition) self.dock_list['FFT'] = QDockWidget("FFT", self) self.dock_list['FFT'].setWidget(FFTwindow(self.main_model)) self.dock_list['FFT'].setObjectName("FFT") # self.dock_list['FFT'].hide() self.dock_list['Wavelet'] = QDockWidget("Wavelet", self) self.dock_list['Wavelet'].setWidget(WaveletWindow(self.main_model)) self.dock_list['Wavelet'].setObjectName("Wavelet") # self.dock_list['Wavelet'].hide() self.dock_list['Console'] = QDockWidget("Console", self) self.dock_list['Console'].setWidget(ConsoleWidget(namespace={'MainWindow':self})) self.dock_list['Console'].setObjectName("Console") self.dock_list['Console'].hide() self.build_menubar() self.setCentralWidget(self.paired_graphics_view.splitter) self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['Console']) self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['File Tree']) self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['Hints']) self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['Plot Controls']) self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['Video']) self.addDockWidget(Qt.RightDockWidgetArea, self.dock_list['Annotation Parameter Tree']) self.addDockWidget(Qt.RightDockWidgetArea, self.dock_list['Annotations Table']) self.addDockWidget(Qt.RightDockWidgetArea, self.dock_list['FFT']) self.setCorner(Qt.BottomLeftCorner,Qt.LeftDockWidgetArea) self.setCorner(Qt.BottomRightCorner,Qt.RightDockWidgetArea) self.addDockWidget(Qt.BottomDockWidgetArea, self.dock_list['Wavelet']) # self.tabifyDockWidget(self.dock_list['Hints'], self.dock_list['File Tree']) self.resizeDocks([self.dock_list['File Tree'], self.dock_list['Hints'], self.dock_list['Plot Controls'],self.dock_list['Video']],[350,100,100,300],Qt.Vertical) self.resizeDocks([self.dock_list['Wavelet']],[400],Qt.Vertical) self.resizeDocks([self.dock_list['Video']],[400],Qt.Vertical) self.resizeDocks([self.dock_list['Video']],[400],Qt.Horizontal) self.resizeDocks([self.dock_list['FFT']],[400],Qt.Vertical) self.resizeDocks([self.dock_list['FFT']],[400],Qt.Horizontal) settings = QSettings("PyEcog","PyEcog") settings.beginGroup("StandardMainWindow") settings.setValue("windowGeometry", self.saveGeometry()) settings.setValue("windowState", self.saveState()) settings.setValue("darkMode", False) settings.setValue("autoSave", True) settings.endGroup() self.settings = QSettings("PyEcog", "PyEcog") print("reading configurations from: " + self.settings.fileName()) self.settings.beginGroup("MainWindow") # print(self.settings.value("windowGeometry", type=QByteArray)) self.restoreGeometry(self.settings.value("windowGeometry", type=QByteArray)) self.restoreState(self.settings.value("windowState", type=QByteArray)) self.action_darkmode.setChecked(self.settings.value("darkMode",type=bool)) self.toggle_darkmode() # pre toggle darkmode to make sure project loading dialogs are made with the correct color pallete try: settings = QSettings("PyEcog","PyEcog") settings.beginGroup("ProjectSettings") fname = settings.value("ProjectFileName") self.show() if fname.endswith('.pyecog'): print('Loading last opened Project:', fname) self.load_project(fname) else: print('Loading last opened directory:', fname) self.load_directory(fname) except Exception as e: print('ERROR in tree build') print(e) self.action_darkmode.setChecked(self.settings.value("darkMode",type=bool)) self.toggle_darkmode() # toggle again darkmode just to make sure the wavelet window and FFT are updated as well self.action_autosave.setChecked(self.settings.value("autoSave",type=bool)) self.toggle_auto_save()
def save(): global state state = area.saveState() restoreBtn.setEnabled(True) def load(): global state area.restoreState(state) saveBtn.clicked.connect(save) restoreBtn.clicked.connect(load) w2 = ConsoleWidget() d2.addWidget(w2) ## Hide title bar on dock 3 d3.hideTitleBar() w3 = pg.PlotWidget(title="Plot inside dock with no title bar") w3.plot(np.random.normal(size=100)) d3.addWidget(w3) w4 = pg.PlotWidget(title="Dock 4 plot") w4.plot(np.random.normal(size=100)) d4.addWidget(w4) w5 = pg.ImageView() w5.setImage(np.random.normal(size=(100, 100))) d5.addWidget(w5)
def __init__(self): QtGui.QMainWindow.__init__(self) self.setObjectName(_fromUtf8("MainWindow")) self.resize(711, 436) self.centralwidget = QtGui.QWidget(self) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.gridLayout = QtGui.QGridLayout(self.centralwidget) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.scriptTabs = QtGui.QTabWidget(self.centralwidget) self.scriptTabs.setTabShape(QtGui.QTabWidget.Triangular) self.scriptTabs.setDocumentMode(False) self.scriptTabs.setTabsClosable(True) self.scriptTabs.setMovable(True) self.scriptTabs.setObjectName(_fromUtf8("scriptTabs")) self.gridLayout.addWidget(self.scriptTabs, 0, 0, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.saveButton = QtGui.QPushButton(self.centralwidget) self.saveButton.setObjectName(_fromUtf8("saveButton")) self.horizontalLayout.addWidget(self.saveButton) self.runButton = QtGui.QPushButton(self.centralwidget) self.runButton.setObjectName(_fromUtf8("runButton")) self.horizontalLayout.addWidget(self.runButton) self.runSelectedButton = QtGui.QPushButton(self.centralwidget) self.runSelectedButton.setObjectName(_fromUtf8("runSelectedButton")) self.horizontalLayout.addWidget(self.runSelectedButton) self.gridLayout.addLayout(self.horizontalLayout, 1, 0, 1, 1) self.consoleWidget = ConsoleWidget(self.centralwidget) self.consoleWidget.setMinimumSize(QtCore.QSize(0, 0)) self.consoleWidget.setObjectName(_fromUtf8("consoleWidget")) self.gridLayout.addWidget(self.consoleWidget, 0, 1, 2, 1) self.gridLayout.setColumnStretch(0, 1) self.gridLayout.setColumnStretch(1, 1) self.gridLayout.setRowStretch(0, 1) self.setCentralWidget(self.centralwidget) self.statusbar = QtGui.QStatusBar(self) self.statusbar.setObjectName(_fromUtf8("statusbar")) self.setStatusBar(self.statusbar) self.menubar = QtGui.QMenuBar(self) self.menubar.setGeometry(QtCore.QRect(0, 0, 711, 21)) self.menubar.setObjectName(_fromUtf8("menubar")) self.menuFile = QtGui.QMenu(self.menubar) self.menuFile.setObjectName(_fromUtf8("menuFile")) self.menuRecent = QtGui.QMenu(self.menuFile) self.menuRecent.setObjectName(_fromUtf8("menuRecent")) self.setMenuBar(self.menubar) self.actionNew = QtGui.QAction(self) self.actionNew.setObjectName(_fromUtf8("actionNew")) self.actionSave = QtGui.QAction(self) self.actionSave.setObjectName(_fromUtf8("actionSave")) self.actionFrom_Window = QtGui.QAction(self) self.actionFrom_Window.setObjectName(_fromUtf8("actionFrom_Window")) self.actionFrom_File = QtGui.QAction(self) self.actionFrom_File.setObjectName(_fromUtf8("actionFrom_File")) self.actionOpen = QtGui.QAction(self) self.actionOpen.setObjectName(_fromUtf8("actionOpen")) self.actionOpen_Recent = QtGui.QAction(self) self.actionOpen_Recent.setObjectName(_fromUtf8("actionOpen_Recent")) self.actionNo_Recent_Files = QtGui.QAction(self) self.actionNo_Recent_Files.setEnabled(False) self.actionNo_Recent_Files.setObjectName(_fromUtf8("actionNo_Recent_Files")) self.menuRecent.addAction(self.actionNo_Recent_Files) self.menuFile.addAction(self.actionNew) self.menuFile.addAction(self.actionOpen) self.menuFile.addAction(self.menuRecent.menuAction()) self.menuFile.addAction(self.actionSave) self.menubar.addAction(self.menuFile.menuAction()) self.retranslateUi() self.scriptTabs.setCurrentIndex(-1) QtCore.QMetaObject.connectSlotsByName(self)
def setupUi(self, MainWindow): MainWindow.setObjectName(_fromUtf8("MainWindow")) MainWindow.resize(978, 711) icon = QtGui.QIcon() icon.addPixmap( QtGui.QPixmap(_fromUtf8(":/exterminator/icons/program_icon.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) MainWindow.setWindowIcon(icon) MainWindow.setToolTip(_fromUtf8("")) MainWindow.setWindowFilePath(_fromUtf8("")) MainWindow.setTabShape(QtGui.QTabWidget.Rounded) self.centralwidget = QtGui.QWidget(MainWindow) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.verticalLayout_5 = QtGui.QVBoxLayout(self.centralwidget) self.verticalLayout_5.setObjectName(_fromUtf8("verticalLayout_5")) self.label_4 = QtGui.QLabel(self.centralwidget) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.label_4.setFont(font) self.label_4.setObjectName(_fromUtf8("label_4")) self.verticalLayout_5.addWidget(self.label_4) self.overviewComboBox = QtGui.QComboBox(self.centralwidget) font = QtGui.QFont() font.setBold(True) font.setItalic(True) font.setWeight(75) self.overviewComboBox.setFont(font) self.overviewComboBox.setObjectName(_fromUtf8("overviewComboBox")) self.verticalLayout_5.addWidget(self.overviewComboBox) self.line = QtGui.QFrame(self.centralwidget) self.line.setLineWidth(17) self.line.setObjectName(_fromUtf8("line")) self.verticalLayout_5.addWidget(self.line) self.tabWidget = QtGui.QTabWidget(self.centralwidget) self.tabWidget.setEnabled(True) self.tabWidget.setFocusPolicy(QtCore.Qt.TabFocus) self.tabWidget.setAcceptDrops(False) self.tabWidget.setAutoFillBackground(False) self.tabWidget.setTabPosition(QtGui.QTabWidget.North) self.tabWidget.setTabShape(QtGui.QTabWidget.Rounded) self.tabWidget.setElideMode(QtCore.Qt.ElideNone) self.tabWidget.setDocumentMode(False) self.tabWidget.setTabsClosable(False) self.tabWidget.setMovable(True) self.tabWidget.setObjectName(_fromUtf8("tabWidget")) self.tab_tiles = QtGui.QWidget() self.tab_tiles.setObjectName(_fromUtf8("tab_tiles")) self.horizontalLayout = QtGui.QHBoxLayout(self.tab_tiles) self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.splitter = QtGui.QSplitter(self.tab_tiles) self.splitter.setOrientation(QtCore.Qt.Vertical) self.splitter.setObjectName(_fromUtf8("splitter")) self.treeDataTiles = QtGui.QTreeWidget(self.splitter) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth( self.treeDataTiles.sizePolicy().hasHeightForWidth()) self.treeDataTiles.setSizePolicy(sizePolicy) self.treeDataTiles.setWhatsThis( _fromUtf8( "This is widget where in tree maner all input data are presented.\n" "This can be composed just from one detector (in. example BSE) images, or can be complicated more than ten element mappings.\n" "This is not interactive view. If this doesn\'t work after importing or appending data something is broken." )) self.treeDataTiles.setObjectName(_fromUtf8("treeDataTiles")) self.treeDataTiles.headerItem().setText(0, _fromUtf8("data files")) self.verticalLayoutWidget = QtGui.QWidget(self.splitter) self.verticalLayoutWidget.setObjectName( _fromUtf8("verticalLayoutWidget")) self.verticalLayout = QtGui.QVBoxLayout(self.verticalLayoutWidget) self.verticalLayout.setMargin(0) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.label_2 = QtGui.QLabel(self.verticalLayoutWidget) self.label_2.setObjectName(_fromUtf8("label_2")) self.verticalLayout.addWidget(self.label_2) self.plainTextEdit = QtGui.QPlainTextEdit(self.verticalLayoutWidget) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth( self.plainTextEdit.sizePolicy().hasHeightForWidth()) self.plainTextEdit.setSizePolicy(sizePolicy) self.plainTextEdit.setMinimumSize(QtCore.QSize(200, 100)) self.plainTextEdit.setWhatsThis( _fromUtf8( "Not inteactive text widget which gets and presents statistics of widget above (data widget)" )) self.plainTextEdit.setReadOnly(True) self.plainTextEdit.setPlainText(_fromUtf8("")) self.plainTextEdit.setObjectName(_fromUtf8("plainTextEdit")) self.verticalLayout.addWidget(self.plainTextEdit) self.horizontalLayout.addWidget(self.splitter) self.tabWidget.addTab(self.tab_tiles, _fromUtf8("")) self.tab_param = QtGui.QWidget() self.tab_param.setEnabled(True) self.tab_param.setObjectName(_fromUtf8("tab_param")) self.gridLayout_4 = QtGui.QGridLayout(self.tab_param) self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4")) self.splitter_2 = QtGui.QSplitter(self.tab_param) self.splitter_2.setOrientation(QtCore.Qt.Horizontal) self.splitter_2.setObjectName(_fromUtf8("splitter_2")) self.gridLayoutWidget = QtGui.QWidget(self.splitter_2) self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget")) self.gridLayout_3 = QtGui.QGridLayout(self.gridLayoutWidget) self.gridLayout_3.setMargin(0) self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) self.treeParameters = ParameterTree(self.gridLayoutWidget) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.treeParameters.sizePolicy().hasHeightForWidth()) self.treeParameters.setSizePolicy(sizePolicy) self.treeParameters.setMinimumSize(QtCore.QSize(280, 0)) self.treeParameters.setObjectName(_fromUtf8("treeParameters")) self.gridLayout_3.addWidget(self.treeParameters, 0, 0, 1, 1) self.setAsDefault = QtGui.QPushButton(self.gridLayoutWidget) self.setAsDefault.setObjectName(_fromUtf8("setAsDefault")) self.gridLayout_3.addWidget(self.setAsDefault, 1, 0, 1, 1) self.gridLayout_4.addWidget(self.splitter_2, 0, 0, 1, 1) self.tabWidget.addTab(self.tab_param, _fromUtf8("")) self.tab_filters = QtGui.QWidget() self.tab_filters.setObjectName(_fromUtf8("tab_filters")) self.verticalLayout_7 = QtGui.QVBoxLayout(self.tab_filters) self.verticalLayout_7.setObjectName(_fromUtf8("verticalLayout_7")) self.splitter_3 = QtGui.QSplitter(self.tab_filters) self.splitter_3.setOrientation(QtCore.Qt.Vertical) self.splitter_3.setObjectName(_fromUtf8("splitter_3")) self.filtersTreeView = ParameterTree(self.splitter_3) self.filtersTreeView.setEditTriggers( QtGui.QAbstractItemView.NoEditTriggers) self.filtersTreeView.setAlternatingRowColors(True) self.filtersTreeView.setObjectName(_fromUtf8("filtersTreeView")) self.filterParamView = ParameterTree(self.splitter_3) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.filterParamView.sizePolicy().hasHeightForWidth()) self.filterParamView.setSizePolicy(sizePolicy) self.filterParamView.setMinimumSize(QtCore.QSize(0, 40)) self.filterParamView.setMaximumSize(QtCore.QSize(16777215, 100)) self.filterParamView.setObjectName(_fromUtf8("filterParamView")) self.verticalLayout_7.addWidget(self.splitter_3) self.tabWidget.addTab(self.tab_filters, _fromUtf8("")) self.tab_finish = QtGui.QWidget() self.tab_finish.setObjectName(_fromUtf8("tab_finish")) self.verticalLayout_3 = QtGui.QVBoxLayout(self.tab_finish) self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3")) self.treeFinalWidget = QtGui.QTreeWidget(self.tab_finish) self.treeFinalWidget.setObjectName(_fromUtf8("treeFinalWidget")) self.treeFinalWidget.headerItem().setText( 0, _fromUtf8("stuff (do not edit!)")) self.treeFinalWidget.headerItem().setText( 1, _fromUtf8("final names and titles (editable)")) self.verticalLayout_3.addWidget(self.treeFinalWidget) self.tabWidget.addTab(self.tab_finish, _fromUtf8("")) self.verticalLayout_5.addWidget(self.tabWidget) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 978, 20)) self.menubar.setFocusPolicy(QtCore.Qt.NoFocus) self.menubar.setObjectName(_fromUtf8("menubar")) self.menuFile = QtGui.QMenu(self.menubar) self.menuFile.setObjectName(_fromUtf8("menuFile")) self.menuEdit = QtGui.QMenu(self.menubar) self.menuEdit.setObjectName(_fromUtf8("menuEdit")) self.menuHelp = QtGui.QMenu(self.menubar) self.menuHelp.setObjectName(_fromUtf8("menuHelp")) self.menuView = QtGui.QMenu(self.menubar) self.menuView.setObjectName(_fromUtf8("menuView")) MainWindow.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(MainWindow) self.statusbar.setObjectName(_fromUtf8("statusbar")) MainWindow.setStatusBar(self.statusbar) self.toolBar = QtGui.QToolBar(MainWindow) self.toolBar.setMouseTracking(False) self.toolBar.setFocusPolicy(QtCore.Qt.NoFocus) self.toolBar.setWhatsThis( _fromUtf8("Toolbar, what else did you expect?")) self.toolBar.setMovable(True) self.toolBar.setIconSize(QtCore.QSize(64, 64)) self.toolBar.setObjectName(_fromUtf8("toolBar")) MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) self.overviewWidget = QtGui.QDockWidget(MainWindow) self.overviewWidget.setEnabled(True) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.overviewWidget.sizePolicy().hasHeightForWidth()) self.overviewWidget.setSizePolicy(sizePolicy) self.overviewWidget.setMinimumSize(QtCore.QSize(350, 150)) self.overviewWidget.setToolTip( _fromUtf8("widget with vector\n" "representation of the tiles")) self.overviewWidget.setAccessibleName(_fromUtf8("")) self.overviewWidget.setAccessibleDescription(_fromUtf8("")) self.overviewWidget.setFloating(True) self.overviewWidget.setFeatures( QtGui.QDockWidget.AllDockWidgetFeatures) self.overviewWidget.setWindowTitle( _fromUtf8("graphical overview of the tiles")) self.overviewWidget.setObjectName(_fromUtf8("overviewWidget")) self.dockWidgetContents = QtGui.QWidget() sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.dockWidgetContents.sizePolicy().hasHeightForWidth()) self.dockWidgetContents.setSizePolicy(sizePolicy) self.dockWidgetContents.setObjectName(_fromUtf8("dockWidgetContents")) self.verticalLayout_2 = QtGui.QVBoxLayout(self.dockWidgetContents) self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) self.graphicalOverview = GraphicsLayoutWidget(self.dockWidgetContents) self.graphicalOverview.setObjectName(_fromUtf8("graphicalOverview")) self.verticalLayout_2.addWidget(self.graphicalOverview) self.overviewWidget.setWidget(self.dockWidgetContents) MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.overviewWidget) self.consoleWidget = QtGui.QDockWidget(MainWindow) self.consoleWidget.setWindowTitle(_fromUtf8("python console / debug")) self.consoleWidget.setObjectName(_fromUtf8("consoleWidget")) self.dockWidgetContents_2 = QtGui.QWidget() self.dockWidgetContents_2.setObjectName( _fromUtf8("dockWidgetContents_2")) self.verticalLayout_4 = QtGui.QVBoxLayout(self.dockWidgetContents_2) self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4")) self.pythonConsole = ConsoleWidget(self.dockWidgetContents_2) self.pythonConsole.setObjectName(_fromUtf8("pythonConsole")) self.verticalLayout_4.addWidget(self.pythonConsole) self.consoleWidget.setWidget(self.dockWidgetContents_2) MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(8), self.consoleWidget) self.stitchWidget = QtGui.QDockWidget(MainWindow) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.stitchWidget.sizePolicy().hasHeightForWidth()) self.stitchWidget.setSizePolicy(sizePolicy) self.stitchWidget.setFloating(False) self.stitchWidget.setFeatures(QtGui.QDockWidget.AllDockWidgetFeatures) self.stitchWidget.setWindowTitle(_fromUtf8("image stitching preview")) self.stitchWidget.setObjectName(_fromUtf8("stitchWidget")) self.dockWidgetContents_5 = QtGui.QWidget() self.dockWidgetContents_5.setObjectName( _fromUtf8("dockWidgetContents_5")) self.horizontalLayout_2 = QtGui.QHBoxLayout(self.dockWidgetContents_5) self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) self.graphicsView = GraphicsView(self.dockWidgetContents_5) self.graphicsView.setObjectName(_fromUtf8("graphicsView")) self.horizontalLayout_2.addWidget(self.graphicsView) self.stitchWidget.setWidget(self.dockWidgetContents_5) MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.stitchWidget) self.filterDockWidget = QtGui.QDockWidget(MainWindow) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.filterDockWidget.sizePolicy().hasHeightForWidth()) self.filterDockWidget.setSizePolicy(sizePolicy) self.filterDockWidget.setMinimumSize(QtCore.QSize(300, 242)) self.filterDockWidget.setObjectName(_fromUtf8("filterDockWidget")) self.dockWidgetContents_3 = QtGui.QWidget() self.dockWidgetContents_3.setObjectName( _fromUtf8("dockWidgetContents_3")) self.gridLayout = QtGui.QGridLayout(self.dockWidgetContents_3) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.label_3 = QtGui.QLabel(self.dockWidgetContents_3) self.label_3.setObjectName(_fromUtf8("label_3")) self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1) self.originalView = ImageView(self.dockWidgetContents_3) self.originalView.setObjectName(_fromUtf8("originalView")) self.gridLayout.addWidget(self.originalView, 1, 0, 1, 1) self.filteredView = ImageView(self.dockWidgetContents_3) self.filteredView.setObjectName(_fromUtf8("filteredView")) self.gridLayout.addWidget(self.filteredView, 3, 0, 1, 1) self.label = QtGui.QLabel(self.dockWidgetContents_3) self.label.setObjectName(_fromUtf8("label")) self.gridLayout.addWidget(self.label, 0, 0, 1, 1) self.filterDockWidget.setWidget(self.dockWidgetContents_3) MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.filterDockWidget) self.actionAbout = QtGui.QAction(MainWindow) self.actionAbout.setObjectName(_fromUtf8("actionAbout")) self.actionImportDataFolder = QtGui.QAction(MainWindow) self.actionImportDataFolder.setEnabled(True) icon1 = QtGui.QIcon() icon1.addPixmap( QtGui.QPixmap( _fromUtf8(":/exterminator/icons/import_from_dir.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionImportDataFolder.setIcon(icon1) self.actionImportDataFolder.setObjectName( _fromUtf8("actionImportDataFolder")) self.actionImportMetadata = QtGui.QAction(MainWindow) self.actionImportMetadata.setEnabled(False) icon2 = QtGui.QIcon() icon2.addPixmap( QtGui.QPixmap(_fromUtf8(":/exterminator/icons/import_rtj.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionImportMetadata.setIcon(icon2) self.actionImportMetadata.setObjectName( _fromUtf8("actionImportMetadata")) self.actionExportHdf5 = QtGui.QAction(MainWindow) self.actionExportHdf5.setEnabled(False) icon3 = QtGui.QIcon() icon3.addPixmap( QtGui.QPixmap(_fromUtf8(":/exterminator/icons/export_hdf5.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionExportHdf5.setIcon(icon3) self.actionExportHdf5.setObjectName(_fromUtf8("actionExportHdf5")) self.actionExportImages = QtGui.QAction(MainWindow) self.actionExportImages.setEnabled(False) icon4 = QtGui.QIcon() icon4.addPixmap( QtGui.QPixmap(_fromUtf8(":/exterminator/icons/export_images.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionExportImages.setIcon(icon4) self.actionExportImages.setObjectName(_fromUtf8("actionExportImages")) self.actionQuit = QtGui.QAction(MainWindow) icon5 = QtGui.QIcon() icon5.addPixmap( QtGui.QPixmap( _fromUtf8(":/exterminator/icons/system-log-out.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionQuit.setIcon(icon5) self.actionQuit.setShortcutContext(QtCore.Qt.ApplicationShortcut) self.actionQuit.setObjectName(_fromUtf8("actionQuit")) self.actionClear = QtGui.QAction(MainWindow) icon6 = QtGui.QIcon() icon6.addPixmap( QtGui.QPixmap(_fromUtf8(":/exterminator/icons/edit-delete.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionClear.setIcon(icon6) self.actionClear.setObjectName(_fromUtf8("actionClear")) self.actionChangelog = QtGui.QAction(MainWindow) self.actionChangelog.setObjectName(_fromUtf8("actionChangelog")) self.actionAbout_Qt = QtGui.QAction(MainWindow) self.actionAbout_Qt.setObjectName(_fromUtf8("actionAbout_Qt")) self.actionDynamicWidgets = QtGui.QAction(MainWindow) self.actionDynamicWidgets.setCheckable(True) self.actionDynamicWidgets.setChecked(True) self.actionDynamicWidgets.setText( _fromUtf8("toggle dynamic visibility of widgets")) self.actionDynamicWidgets.setToolTip( _fromUtf8( "uncheck to prevent closing/showing graphical dockable widgets by changing tabs in main window" )) self.actionDynamicWidgets.setObjectName( _fromUtf8("actionDynamicWidgets")) self.menuFile.addAction(self.actionImportDataFolder) self.menuFile.addAction(self.actionImportMetadata) self.menuFile.addAction(self.actionExportImages) self.menuFile.addAction(self.actionExportHdf5) self.menuFile.addSeparator() self.menuFile.addAction(self.actionQuit) self.menuEdit.addAction(self.actionClear) self.menuHelp.addAction(self.actionAbout) self.menuHelp.addAction(self.actionChangelog) self.menuHelp.addSeparator() self.menuHelp.addAction(self.actionAbout_Qt) self.menuView.addAction(self.actionDynamicWidgets) self.menuView.addSeparator() self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuEdit.menuAction()) self.menubar.addAction(self.menuView.menuAction()) self.menubar.addAction(self.menuHelp.menuAction()) self.toolBar.addAction(self.actionImportDataFolder) self.toolBar.addAction(self.actionImportMetadata) self.toolBar.addAction(self.actionExportImages) self.toolBar.addAction(self.actionExportHdf5) self.toolBar.addAction(self.actionClear) self.retranslateUi(MainWindow) self.tabWidget.setCurrentIndex(0) QtCore.QObject.connect(self.actionQuit, QtCore.SIGNAL(_fromUtf8("triggered()")), MainWindow.close) QtCore.QMetaObject.connectSlotsByName(MainWindow) MainWindow.setTabOrder(self.overviewComboBox, self.tabWidget) MainWindow.setTabOrder(self.tabWidget, self.treeDataTiles) MainWindow.setTabOrder(self.treeDataTiles, self.plainTextEdit) MainWindow.setTabOrder(self.plainTextEdit, self.treeParameters) MainWindow.setTabOrder(self.treeParameters, self.setAsDefault) MainWindow.setTabOrder(self.setAsDefault, self.filtersTreeView) MainWindow.setTabOrder(self.filtersTreeView, self.filterParamView) MainWindow.setTabOrder(self.filterParamView, self.treeFinalWidget) MainWindow.setTabOrder(self.treeFinalWidget, self.graphicalOverview) MainWindow.setTabOrder(self.graphicalOverview, self.graphicsView) MainWindow.setTabOrder(self.graphicsView, self.originalView) MainWindow.setTabOrder(self.originalView, self.filteredView)
class MainWindow(QtWidgets.QMainWindow): def __init__(self): QtWidgets.QMainWindow.__init__(self) centralWidget = QtWidgets.QWidget() self.setCentralWidget(centralWidget) self.running = False self._makeMenuBar() self.imageview = pg.ImageView() self.imageview.view.setAutoPan(False) self.imageview.setMinimumWidth(650) self.console = ConsoleWidget() self.console.setMaximumWidth(400) self.optionsWidget = QtWidgets.QWidget() def errCall(err, a): self.running = False self.imageview.setHistogramRange(0, 2) self.imageview.setLevels(0, 2) np.seterrcall(errCall) np.seterr(over='call') opsL = QtWidgets.QFormLayout() header = QtWidgets.QLabel("Diffusion Simulation") opsL.addRow(header) self.optionsWidget.setMaximumWidth(600) self.optionsWidget.setMinimumWidth(400) self.top_left_label = pg.LabelItem("", justify='right') self.imageview.ui.graphicsView.addItem(self.top_left_label) def timeChanged(m, b): self.top_left_label.setText( "Frame %d, %s ms" % (m, m * self.dtSpin.value() * self.refreshSpin.value())) self.imageview.sigTimeChanged.connect(timeChanged) def viewKeyPress(ev): pg.ViewBox.keyPressEvent(self.imageview.view, ev) self.imageview.view.keyPressEvent = viewKeyPress def saveModel(): puffs = self.puffs model = self.getModel() model.puffs = puffs name = QtWidgets.QInputDialog.getText(self, "Enter a model name", "Enter a model name") if name is not None and len(name) > 0: save_model(name, m) self.startButton = QtWidgets.QPushButton("Start") self.startButton.pressed.connect(self.start) self.saveModelButton = QtWidgets.QPushButton("Save Model") self.saveModelButton.pressed.connect(saveModel) self.progressBar = QtWidgets.QProgressBar() self.progressBar.setRange(0, 100) self.progressBar.setValue(0) buttonBox = QtWidgets.QWidget() buttonLayout = QtWidgets.QGridLayout() buttonLayout.addWidget(self.progressBar, 0, 0, 1, 3) buttonLayout.addWidget(self.saveModelButton, 1, 0) buttonLayout.addWidget(self.startButton, 1, 1) buttonBox.setLayout(buttonLayout) self.imageWidget = self._makeImageWidget() self.modelWidget = self._makeModelWidget() self.puffWidget = self._makePuffWidget() separator = QtWidgets.QWidget() sepLayout = QtWidgets.QHBoxLayout() self.infoLabel = QtWidgets.QLabel() sepLayout.addWidget(self.infoLabel) sepLayout.addStretch() separator.setLayout(sepLayout) def modelSelected(): data = combo.currentData() self.widthSpin.setValue(data.x_max) self.heightSpin.setValue(data.y_max) self.timeSpin.setValue(data.t_max) self.dxSpin.setValue(data.dx) self.dySpin.setValue(data.dy) self.dtSpin.setValue(data.dt) self.dSpin.setValue(data.d) self.sequesterSpin.setValue(data.sequestration) puffs = data.puffs self.pointSpin.setValue(len(puffs)) self.puffTable.setPuffs(puffs) self.refreshSpin.setValue(data.refresh) combo = QtWidgets.QComboBox() combo.currentIndexChanged.connect(modelSelected) for a, b in models.items(): combo.addItem(a, b) opsL.addRow("Saved Models", combo) opsL.addRow(self.imageWidget) opsL.addRow(self.puffWidget) opsL.addRow(self.modelWidget) opsL.addRow(separator) opsL.addRow(buttonBox) self.optionsWidget.setLayout(opsL) self.console.localNamespace.update({ 'self': self, 'set': self.imageview.setImage }) layout = QtWidgets.QGridLayout() layout.addWidget(self.console, 0, 0) layout.addWidget(self.imageview, 0, 1) layout.addWidget(self.optionsWidget, 0, 2) centralWidget.setLayout(layout) self.resize(1850, 600) self.mouse = [0, 0] self.imageview.scene.sigMouseMoved.connect(self.mouseMoved) self.imageview.mousePressEvent = self.mousePressed self.puffs = [] self.scatter = pg.ScatterPlotItem(brush=pg.mkBrush(255, 255, 0)) self.scatter.sigClicked.connect(self.mousePressed) self.imageview.view.addItem(self.scatter) self.imageview.view.setMenuEnabled(False) def _makeMenuBar(self): m = self.menuBar() fileMenu = m.addMenu("File") self.saveResultsAction = fileMenu.addAction("Save Results", self.saveResults) fileMenu.addAction( "Save Movie", lambda: np.savetxt("movie.txt", self.imageview.image)) plotMenu = m.addMenu("Plot") def plotTTO(): vals = [p.timeToOpen for p in self.puffTable.puffs] a, b = np.histogram(vals, 50) pg.plot(x=b, y=a, stepMode=True, title="Puff Time To Open (ms)") def plotOD(): vals = [p.openDuration for p in self.puffTable.puffs] a, b = np.histogram(vals, 50) pg.plot(x=b, y=a, stepMode=True, title="Puff Open Duration (ms)") def plotPuffs(): self.plotItem = pg.PlotWidget() for p in self.puffs: self.plotItem.addItem(pg.PlotDataItem(p.concentrations)) self.plotItem.show() plotMenu.addAction("Plot Time To Open", plotTTO) plotMenu.addAction("Plot Open Duration", plotOD) plotMenu.addAction("Plot Puffs", plotPuffs) m.addAction("Quit", self.close) def saveResults(self): fname = QtWidgets.QFileDialog.getSaveFileName(self, "Save model results") fname = str(fname if type(fname) != tuple else fname[0]) if fname != '': self.model.export(fname) def getModel(self): dt = self.dtSpin.value() dx = self.dxSpin.value() dy = self.dySpin.value() x_max = self.widthSpin.value() y_max = self.heightSpin.value() t_max = self.timeSpin.value() puffs = self.puffTable.puffs sequestration = self.sequesterSpin.value() d = self.dSpin.value() refresh = self.refreshSpin.value() stop_early = self.stopEarlyCheck.isChecked() return Model(d=d, dt=dt, dx=dx, dy=dy, t_max=t_max, x_max=x_max, y_max=y_max, puffs=puffs, sequestration=sequestration, refresh=refresh, stop_early=stop_early) def mouseMoved(self, point): mouse = self.imageview.getImageItem().mapFromScene(point) self.mouse = [int(mouse.x()), int(mouse.y())] def mousePressed(self, ev): if isinstance(ev, pg.ScatterPlotItem): pt = ev.ptsClicked[0] for p in self.puffs: if p.x == int(pt.pos().x()) and p.y == int(pt.pos().y()): p.open = not p.open elif ev.button() == 2: if hasattr(self, 'selectedPoint'): print(self.selectedPoint) puffs = 0 for p in self.puffs: d = np.linalg.norm(np.subtract(self.mouse, [p.x, p.y])) if puffs == 0 and d < 1: return self.puffTable.addPuff(Puff(self.mouse[0], self.mouse[1])) self.generate(image=False) def closeEvent(self, ev): print("Saving models...") save_models() def _makeImageWidget(self): w = QtWidgets.QGroupBox("Model Settings") layout = QtWidgets.QFormLayout() self.widthSpin = QtWidgets.QSpinBox() self.widthSpin.setRange(0, 50000) self.widthSpin.setValue(10000) self.heightSpin = QtWidgets.QSpinBox() self.heightSpin.setRange(0, 50000) self.heightSpin.setValue(10000) self.timeSpin = QtWidgets.QDoubleSpinBox() self.timeSpin.setRange(0, 10000) self.timeSpin.setDecimals(2) self.timeSpin.setValue(2000) self.dxSpin = QtWidgets.QSpinBox() self.dxSpin.setRange(0, 1000) self.dxSpin.setValue(100) self.dySpin = QtWidgets.QSpinBox() self.dySpin.setRange(0, 1000) self.dySpin.setValue(100) self.dtSpin = QtWidgets.QDoubleSpinBox() self.dtSpin.setDecimals(4) self.dtSpin.setValue(.01) imageGenStyle = QtWidgets.QWidget() l = QtWidgets.QHBoxLayout() self.randomRadio = QtWidgets.QRadioButton("Random [0, .05)") self.randomRadio.setChecked(True) self.onesRadio = QtWidgets.QRadioButton("Ones") l.addWidget(self.randomRadio) l.addWidget(self.onesRadio) imageGenStyle.setLayout(l) layout.addRow("Width (micron)", self.widthSpin) layout.addRow("Height (micron)", self.heightSpin) layout.addRow("Time (ms)", self.timeSpin) layout.addRow("X Grid Size (micron)", self.dxSpin) layout.addRow("Y Grid Size (micron)", self.dySpin) layout.addRow("Time Step (ms)", self.dtSpin) layout.addRow(imageGenStyle) w.setLayout(layout) return w def _makePuffWidget(self): w = QtWidgets.QGroupBox("Puff Settings") layout = QtWidgets.QFormLayout() self.pointSpin = QtWidgets.QSpinBox() self.pointSpin.setRange(1, 1000) self.puffTable = PuffTable() self.minPuffSpin = QtWidgets.QSpinBox() self.minPuffSpin.setValue(0) def generatePuffs(): m = self.getModel() m.genPuffs(self.pointSpin.value(), amplitude=AMPLITUDE) m.genPuffs(self.minPuffSpin.value(), amplitude=HIDDEN_AMPLITUDE, reset=False) self.puffTable.setPuffs(m.puffs) genPointsButton = QtWidgets.QPushButton("Generate Points") genPointsButton.pressed.connect(generatePuffs) generateButton = QtWidgets.QPushButton("Generate") generateButton.pressed.connect(self.generate) buttonBox = QtWidgets.QWidget() buttonLayout = QtWidgets.QHBoxLayout() buttonLayout.addWidget(genPointsButton) buttonLayout.addWidget(generateButton) buttonBox.setLayout(buttonLayout) layout.addRow("Puff Sites", self.pointSpin) layout.addRow("Hidden Sites", self.minPuffSpin) layout.addRow(self.puffTable) layout.addRow(buttonBox) w.setLayout(layout) return w def _makeModelWidget(self): widg = QtWidgets.QGroupBox("Model Settings") layout = QtWidgets.QFormLayout() self.dSpin = QtWidgets.QDoubleSpinBox() self.dSpin.setRange(0, 1000) self.dSpin.setValue(20) self.sequesterSpin = QtWidgets.QDoubleSpinBox() self.sequesterSpin.setRange(0, 1) self.sequesterSpin.setDecimals(4) self.sequesterSpin.setValue(.95) self.refreshSpin = QtWidgets.QSpinBox() self.refreshSpin.setRange(1, 1000) self.refreshSpin.setValue(100) self.stopEarlyCheck = QtWidgets.QCheckBox() self.stopEarlyCheck.setChecked(True) layout.addRow("Diffusion Coefficient (micron**2 / s)", self.dSpin) layout.addRow("Sequestration Coefficient", self.sequesterSpin) layout.addRow("Interval Refresh Rate", self.refreshSpin) layout.addRow("Quit when all puffs close", self.stopEarlyCheck) widg.setLayout(layout) return widg def generate(self, image=True): m = self.getModel() if image: self.Z = np.zeros((m.nx + 2, m.ny + 2), dtype=np.float64) z = self.Z[1:-1, 1:-1] if self.onesRadio.isChecked(): z += 1 elif self.randomRadio.isChecked(): z += 0.05 * np.random.random((m.nx, m.ny)) self.puffs = [] points = [] sizes = [] colors = [] for puff in self.puffTable.puffs: if image: puff.openDuration = 0 points.append([puff.x + .5, puff.y + .5]) sizes.append(puff.amplitude) colors.append((255, 255, 0) if not puff.open else (255, 0, 0)) pens = [pg.mkPen(pen) for pen in colors] brushes = [pg.mkBrush(brush) for brush in colors] self.puffs = self.puffTable.puffs if len(self.puffs) > 0: sizes = 5 + 4 * (np.array(sizes) / np.max(sizes)) self.scatter.setPoints(pos=points, size=sizes, pen=pens, brush=brushes) if image: self.showImage(self.Z) def start(self): if not self.running and self.startButton.text() == 'Stop': self.startButton.setText("Start") return if self.running: self.running = False return self.model = self.getModel() m = self.model refreshRate = self.refreshSpin.value() frames = (m.nt) // refreshRate + 1 movie = np.zeros([frames, m.nx + 2, m.ny + 2]) movie[0] = self.imageview.getImageItem().image i = 1 p = 0 self.startButton.setText("Stop") self.running = True for im in m.run(movie[0]): if not self.running: break if i % refreshRate == 0: movie[i // refreshRate] = im if (100 * i) // m.nt > p: p = (100 * i) // m.nt self.progressBar.setValue(p) QtWidgets.qApp.processEvents() i += 1 self.progressBar.setValue(100) self.showImage(movie) self.running = False self.startButton.setText("Start") self.saveResultsAction.setEnabled(True) def keyPressEvent(self, ev): if ev.text() == 'c': from pyqtgraph.console import ConsoleWidget self.console = ConsoleWidget() self.console.localNamespace['self'] = self self.console.show() def closeEvent(self, ev): QtWidgets.QWidget.closeEvent(self, ev) self.running = False def showImage(self, V, **kargs): self.imageview.setImage(V, autoLevels=False, **kargs) self.imageview.setLevels(0, min(1.5, 1.5 * V.max())) self.imageview.setHistogramRange(0, 2) def openPuff(self, puff, clicked=False): if clicked and self.running: return puff.open = not puff.open
if __name__ == '__main__': app = QtWidgets.QApplication([]) opts_A = \ { 'b': { 'use_slider': True, 'minmax': (0, 100), 'step': 1, 'suffix': '%', 'typ': int, 'tooltip': 'yay tooltips' }, 'c': {'ignore': True} } functions = Functions(functions=[func_A, func_B], arg_opts=[opts_A, None], scroll=False, orient='V') console = ConsoleWidget(parent=functions, namespace={'this': functions}) functions.main_layout.addWidget(console) functions.sig_changed.connect(print) functions.show() app.exec()
# make the app first app = pg.mkQApp() # just example of setting up some useful variables namespace = { 'data_path': '/foo/bar/c,rfDC', } # nice words welcome_message = """ Welcome to the AnyWave console. Here you can experiment, using and programming with the AnyWave API. """ # editor, could be useful, could be a preference? editor = "gvim {fileName} +{lineNum}" # make the widget cw = ConsoleWidget( namespace=namespace, text=welcome_message, editor=editor, ) # show it cw.show() # run app.exec_()
def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(1145, 753) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) MainWindow.setSizePolicy(sizePolicy) self.centralwidget = QtGui.QWidget(MainWindow) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth()) self.centralwidget.setSizePolicy(sizePolicy) self.centralwidget.setObjectName("centralwidget") self.verticalLayout_12 = QtGui.QVBoxLayout(self.centralwidget) self.verticalLayout_12.setObjectName("verticalLayout_12") self.gridLayout = QtGui.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.group_io = QtGui.QGroupBox(self.centralwidget) self.group_io.setObjectName("group_io") self.verticalLayout_14 = QtGui.QVBoxLayout(self.group_io) self.verticalLayout_14.setObjectName("verticalLayout_14") self.layout_samples = QtGui.QHBoxLayout() self.layout_samples.setObjectName("layout_samples") self.label = QtGui.QLabel(self.group_io) self.label.setObjectName("label") self.layout_samples.addWidget(self.label) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.layout_samples.addItem(spacerItem) self.field_samples = QtGui.QLineEdit(self.group_io) self.field_samples.setObjectName("field_samples") self.layout_samples.addWidget(self.field_samples) self.button_importSamples = QtGui.QToolButton(self.group_io) self.button_importSamples.setObjectName("button_importSamples") self.layout_samples.addWidget(self.button_importSamples) self.verticalLayout_14.addLayout(self.layout_samples) self.layout_topology = QtGui.QHBoxLayout() self.layout_topology.setObjectName("layout_topology") self.label_2 = QtGui.QLabel(self.group_io) self.label_2.setObjectName("label_2") self.layout_topology.addWidget(self.label_2) spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) self.layout_topology.addItem(spacerItem1) self.field_topology = QtGui.QLineEdit(self.group_io) self.field_topology.setObjectName("field_topology") self.layout_topology.addWidget(self.field_topology) spacerItem2 = QtGui.QSpacerItem(26, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.layout_topology.addItem(spacerItem2) self.verticalLayout_14.addLayout(self.layout_topology) self.layout_properties = QtGui.QHBoxLayout() self.layout_properties.setObjectName("layout_properties") self.label_3 = QtGui.QLabel(self.group_io) self.label_3.setObjectName("label_3") self.layout_properties.addWidget(self.label_3) self.box_sectors = QtGui.QSpinBox(self.group_io) self.box_sectors.setObjectName("box_sectors") self.layout_properties.addWidget(self.box_sectors) spacerItem3 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_properties.addItem(spacerItem3) self.check_discreteIn = QtGui.QCheckBox(self.group_io) self.check_discreteIn.setLayoutDirection(QtCore.Qt.LeftToRight) self.check_discreteIn.setObjectName("check_discreteIn") self.layout_properties.addWidget(self.check_discreteIn) self.check_discreteOut = QtGui.QCheckBox(self.group_io) self.check_discreteOut.setLayoutDirection(QtCore.Qt.LeftToRight) self.check_discreteOut.setObjectName("check_discreteOut") self.layout_properties.addWidget(self.check_discreteOut) spacerItem4 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_properties.addItem(spacerItem4) self.verticalLayout_14.addLayout(self.layout_properties) self.gridLayout.addWidget(self.group_io, 0, 0, 1, 1) self.group_error = QtGui.QGroupBox(self.centralwidget) self.group_error.setObjectName("group_error") self.verticalLayout_3 = QtGui.QVBoxLayout(self.group_error) self.verticalLayout_3.setObjectName("verticalLayout_3") self.layout_stopKeySelect = QtGui.QHBoxLayout() self.layout_stopKeySelect.setObjectName("layout_stopKeySelect") self.label_stopKey = QtGui.QLabel(self.group_error) self.label_stopKey.setObjectName("label_stopKey") self.layout_stopKeySelect.addWidget(self.label_stopKey) spacerItem5 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.layout_stopKeySelect.addItem(spacerItem5) self.combo_stopKey = QtGui.QComboBox(self.group_error) self.combo_stopKey.setObjectName("combo_stopKey") self.combo_stopKey.addItem("") self.combo_stopKey.addItem("") self.combo_stopKey.addItem("") self.combo_stopKey.addItem("") self.combo_stopKey.addItem("") self.layout_stopKeySelect.addWidget(self.combo_stopKey) spacerItem6 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_stopKeySelect.addItem(spacerItem6) self.verticalLayout_3.addLayout(self.layout_stopKeySelect) self.stacked_stopKey = QtGui.QStackedWidget(self.group_error) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.stacked_stopKey.sizePolicy().hasHeightForWidth()) self.stacked_stopKey.setSizePolicy(sizePolicy) self.stacked_stopKey.setObjectName("stacked_stopKey") self.maxError = QtGui.QWidget() self.maxError.setObjectName("maxError") self.verticalLayout_5 = QtGui.QVBoxLayout(self.maxError) self.verticalLayout_5.setObjectName("verticalLayout_5") self.layout_maxGlobal = QtGui.QHBoxLayout() self.layout_maxGlobal.setObjectName("layout_maxGlobal") self.label_10 = QtGui.QLabel(self.maxError) self.label_10.setObjectName("label_10") self.layout_maxGlobal.addWidget(self.label_10) spacerItem7 = QtGui.QSpacerItem(21, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.layout_maxGlobal.addItem(spacerItem7) self.box_maxGlobal = QtGui.QSpinBox(self.maxError) self.box_maxGlobal.setObjectName("box_maxGlobal") self.layout_maxGlobal.addWidget(self.box_maxGlobal) spacerItem8 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_maxGlobal.addItem(spacerItem8) self.verticalLayout_5.addLayout(self.layout_maxGlobal) self.layout_maxLocal = QtGui.QHBoxLayout() self.layout_maxLocal.setObjectName("layout_maxLocal") self.label_11 = QtGui.QLabel(self.maxError) self.label_11.setObjectName("label_11") self.layout_maxLocal.addWidget(self.label_11) spacerItem9 = QtGui.QSpacerItem(29, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.layout_maxLocal.addItem(spacerItem9) self.box_maxLocal = QtGui.QSpinBox(self.maxError) self.box_maxLocal.setObjectName("box_maxLocal") self.layout_maxLocal.addWidget(self.box_maxLocal) spacerItem10 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_maxLocal.addItem(spacerItem10) self.verticalLayout_5.addLayout(self.layout_maxLocal) self.stacked_stopKey.addWidget(self.maxError) self.errorRate = QtGui.QWidget() self.errorRate.setObjectName("errorRate") self.verticalLayout_7 = QtGui.QVBoxLayout(self.errorRate) self.verticalLayout_7.setObjectName("verticalLayout_7") self.layout_errorGlobal = QtGui.QHBoxLayout() self.layout_errorGlobal.setObjectName("layout_errorGlobal") self.label_12 = QtGui.QLabel(self.errorRate) self.label_12.setObjectName("label_12") self.layout_errorGlobal.addWidget(self.label_12) spacerItem11 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.layout_errorGlobal.addItem(spacerItem11) self.box_errorGlobal = QtGui.QDoubleSpinBox(self.errorRate) self.box_errorGlobal.setSuffix("") self.box_errorGlobal.setObjectName("box_errorGlobal") self.layout_errorGlobal.addWidget(self.box_errorGlobal) spacerItem12 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_errorGlobal.addItem(spacerItem12) self.verticalLayout_7.addLayout(self.layout_errorGlobal) self.layout_errorLocal = QtGui.QHBoxLayout() self.layout_errorLocal.setObjectName("layout_errorLocal") self.label_13 = QtGui.QLabel(self.errorRate) self.label_13.setObjectName("label_13") self.layout_errorLocal.addWidget(self.label_13) spacerItem13 = QtGui.QSpacerItem(55, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.layout_errorLocal.addItem(spacerItem13) self.box_errorLocal = QtGui.QSpinBox(self.errorRate) self.box_errorLocal.setObjectName("box_errorLocal") self.layout_errorLocal.addWidget(self.box_errorLocal) spacerItem14 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_errorLocal.addItem(spacerItem14) self.verticalLayout_7.addLayout(self.layout_errorLocal) self.stacked_stopKey.addWidget(self.errorRate) self.mse = QtGui.QWidget() self.mse.setObjectName("mse") self.verticalLayout_8 = QtGui.QVBoxLayout(self.mse) self.verticalLayout_8.setObjectName("verticalLayout_8") self.layout_mseGlobal = QtGui.QHBoxLayout() self.layout_mseGlobal.setObjectName("layout_mseGlobal") self.label_14 = QtGui.QLabel(self.mse) self.label_14.setObjectName("label_14") self.layout_mseGlobal.addWidget(self.label_14) spacerItem15 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.layout_mseGlobal.addItem(spacerItem15) self.box_mseGlobal = QtGui.QDoubleSpinBox(self.mse) self.box_mseGlobal.setObjectName("box_mseGlobal") self.layout_mseGlobal.addWidget(self.box_mseGlobal) spacerItem16 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_mseGlobal.addItem(spacerItem16) self.verticalLayout_8.addLayout(self.layout_mseGlobal) self.layout_mseLocal = QtGui.QHBoxLayout() self.layout_mseLocal.setObjectName("layout_mseLocal") self.label_15 = QtGui.QLabel(self.mse) self.label_15.setObjectName("label_15") self.layout_mseLocal.addWidget(self.label_15) spacerItem17 = QtGui.QSpacerItem(47, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.layout_mseLocal.addItem(spacerItem17) self.box_mseLocal = QtGui.QDoubleSpinBox(self.mse) self.box_mseLocal.setObjectName("box_mseLocal") self.layout_mseLocal.addWidget(self.box_mseLocal) spacerItem18 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_mseLocal.addItem(spacerItem18) self.verticalLayout_8.addLayout(self.layout_mseLocal) self.stacked_stopKey.addWidget(self.mse) self.rmse = QtGui.QWidget() self.rmse.setObjectName("rmse") self.verticalLayout_4 = QtGui.QVBoxLayout(self.rmse) self.verticalLayout_4.setObjectName("verticalLayout_4") self.layout_rmseGlobal = QtGui.QHBoxLayout() self.layout_rmseGlobal.setObjectName("layout_rmseGlobal") self.label_17 = QtGui.QLabel(self.rmse) self.label_17.setObjectName("label_17") self.layout_rmseGlobal.addWidget(self.label_17) spacerItem19 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.layout_rmseGlobal.addItem(spacerItem19) self.box_rmseGlobal = QtGui.QDoubleSpinBox(self.rmse) self.box_rmseGlobal.setObjectName("box_rmseGlobal") self.layout_rmseGlobal.addWidget(self.box_rmseGlobal) spacerItem20 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_rmseGlobal.addItem(spacerItem20) self.verticalLayout_4.addLayout(self.layout_rmseGlobal) self.layout_rmseLocal = QtGui.QHBoxLayout() self.layout_rmseLocal.setObjectName("layout_rmseLocal") self.label_16 = QtGui.QLabel(self.rmse) self.label_16.setObjectName("label_16") self.layout_rmseLocal.addWidget(self.label_16) spacerItem21 = QtGui.QSpacerItem(47, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.layout_rmseLocal.addItem(spacerItem21) self.box_rmseLocal = QtGui.QDoubleSpinBox(self.rmse) self.box_rmseLocal.setObjectName("box_rmseLocal") self.layout_rmseLocal.addWidget(self.box_rmseLocal) spacerItem22 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_rmseLocal.addItem(spacerItem22) self.verticalLayout_4.addLayout(self.layout_rmseLocal) self.stacked_stopKey.addWidget(self.rmse) self.armse = QtGui.QWidget() self.armse.setObjectName("armse") self.verticalLayout_6 = QtGui.QVBoxLayout(self.armse) self.verticalLayout_6.setObjectName("verticalLayout_6") self.layout_armseGlobal = QtGui.QHBoxLayout() self.layout_armseGlobal.setObjectName("layout_armseGlobal") self.label_8 = QtGui.QLabel(self.armse) self.label_8.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) self.label_8.setObjectName("label_8") self.layout_armseGlobal.addWidget(self.label_8) spacerItem23 = QtGui.QSpacerItem(24, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum) self.layout_armseGlobal.addItem(spacerItem23) self.box_armseGlobal = QtGui.QDoubleSpinBox(self.armse) self.box_armseGlobal.setObjectName("box_armseGlobal") self.layout_armseGlobal.addWidget(self.box_armseGlobal) spacerItem24 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_armseGlobal.addItem(spacerItem24) self.verticalLayout_6.addLayout(self.layout_armseGlobal) self.layout_armseLocal = QtGui.QHBoxLayout() self.layout_armseLocal.setObjectName("layout_armseLocal") self.label_9 = QtGui.QLabel(self.armse) self.label_9.setObjectName("label_9") self.layout_armseLocal.addWidget(self.label_9) spacerItem25 = QtGui.QSpacerItem(30, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) self.layout_armseLocal.addItem(spacerItem25) self.box_armseLocal = QtGui.QDoubleSpinBox(self.armse) self.box_armseLocal.setObjectName("box_armseLocal") self.layout_armseLocal.addWidget(self.box_armseLocal) spacerItem26 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_armseLocal.addItem(spacerItem26) self.verticalLayout_6.addLayout(self.layout_armseLocal) self.layout_softMargins = QtGui.QHBoxLayout() self.layout_softMargins.setObjectName("layout_softMargins") self.check_softMargins = QtGui.QCheckBox(self.armse) self.check_softMargins.setLayoutDirection(QtCore.Qt.LeftToRight) self.check_softMargins.setObjectName("check_softMargins") self.layout_softMargins.addWidget(self.check_softMargins) spacerItem27 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_softMargins.addItem(spacerItem27) self.verticalLayout_6.addLayout(self.layout_softMargins) self.stacked_stopKey.addWidget(self.armse) self.verticalLayout_3.addWidget(self.stacked_stopKey) self.gridLayout.addWidget(self.group_error, 0, 1, 1, 1) self.group_weights = QtGui.QGroupBox(self.centralwidget) self.group_weights.setObjectName("group_weights") self.verticalLayout_2 = QtGui.QVBoxLayout(self.group_weights) self.verticalLayout_2.setObjectName("verticalLayout_2") self.layout_initWeights = QtGui.QHBoxLayout() self.layout_initWeights.setObjectName("layout_initWeights") self.label_4 = QtGui.QLabel(self.group_weights) self.label_4.setObjectName("label_4") self.layout_initWeights.addWidget(self.label_4) spacerItem28 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.layout_initWeights.addItem(spacerItem28) self.combo_initWeights = QtGui.QComboBox(self.group_weights) self.combo_initWeights.setObjectName("combo_initWeights") self.combo_initWeights.addItem("") self.combo_initWeights.addItem("") self.layout_initWeights.addWidget(self.combo_initWeights) spacerItem29 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_initWeights.addItem(spacerItem29) self.verticalLayout_2.addLayout(self.layout_initWeights) self.stacked_initWeights = QtGui.QStackedWidget(self.group_weights) self.stacked_initWeights.setObjectName("stacked_initWeights") self.random = QtGui.QWidget() self.random.setObjectName("random") self.verticalLayout_13 = QtGui.QVBoxLayout(self.random) self.verticalLayout_13.setObjectName("verticalLayout_13") self.horizontalLayout_6 = QtGui.QHBoxLayout() self.horizontalLayout_6.setObjectName("horizontalLayout_6") self.button_randomWeights = QtGui.QPushButton(self.random) self.button_randomWeights.setFlat(False) self.button_randomWeights.setObjectName("button_randomWeights") self.horizontalLayout_6.addWidget(self.button_randomWeights) spacerItem30 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_6.addItem(spacerItem30) self.verticalLayout_13.addLayout(self.horizontalLayout_6) spacerItem31 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout_13.addItem(spacerItem31) self.stacked_initWeights.addWidget(self.random) self.user = QtGui.QWidget() self.user.setObjectName("user") self.verticalLayout_10 = QtGui.QVBoxLayout(self.user) self.verticalLayout_10.setObjectName("verticalLayout_10") self.horizontalLayout_5 = QtGui.QHBoxLayout() self.horizontalLayout_5.setObjectName("horizontalLayout_5") self.label_5 = QtGui.QLabel(self.user) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_5.sizePolicy().hasHeightForWidth()) self.label_5.setSizePolicy(sizePolicy) self.label_5.setObjectName("label_5") self.horizontalLayout_5.addWidget(self.label_5) spacerItem32 = QtGui.QSpacerItem(34, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem32) self.field_weightsFile = QtGui.QLineEdit(self.user) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.field_weightsFile.sizePolicy().hasHeightForWidth()) self.field_weightsFile.setSizePolicy(sizePolicy) self.field_weightsFile.setObjectName("field_weightsFile") self.horizontalLayout_5.addWidget(self.field_weightsFile) self.button_weightsFile = QtGui.QToolButton(self.user) self.button_weightsFile.setObjectName("button_weightsFile") self.horizontalLayout_5.addWidget(self.button_weightsFile) spacerItem33 = QtGui.QSpacerItem(27, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem33) self.verticalLayout_10.addLayout(self.horizontalLayout_5) spacerItem34 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout_10.addItem(spacerItem34) self.stacked_initWeights.addWidget(self.user) self.verticalLayout_2.addWidget(self.stacked_initWeights) spacerItem35 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout_2.addItem(spacerItem35) self.gridLayout.addWidget(self.group_weights, 1, 0, 1, 1) self.group_control = QtGui.QGroupBox(self.centralwidget) self.group_control.setObjectName("group_control") self.verticalLayout_11 = QtGui.QVBoxLayout(self.group_control) self.verticalLayout_11.setObjectName("verticalLayout_11") self.layout_control = QtGui.QHBoxLayout() self.layout_control.setObjectName("layout_control") self.layout_timing = QtGui.QVBoxLayout() self.layout_timing.setObjectName("layout_timing") self.layout_timeLimit = QtGui.QHBoxLayout() self.layout_timeLimit.setObjectName("layout_timeLimit") self.check_timeLimit = QtGui.QCheckBox(self.group_control) self.check_timeLimit.setObjectName("check_timeLimit") self.layout_timeLimit.addWidget(self.check_timeLimit) spacerItem36 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_timeLimit.addItem(spacerItem36) self.box_timeLimit = QtGui.QTimeEdit(self.group_control) self.box_timeLimit.setEnabled(False) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.box_timeLimit.sizePolicy().hasHeightForWidth()) self.box_timeLimit.setSizePolicy(sizePolicy) self.box_timeLimit.setFrame(True) self.box_timeLimit.setButtonSymbols(QtGui.QAbstractSpinBox.UpDownArrows) self.box_timeLimit.setCurrentSection(QtGui.QDateTimeEdit.HourSection) self.box_timeLimit.setObjectName("box_timeLimit") self.layout_timeLimit.addWidget(self.box_timeLimit) self.layout_timing.addLayout(self.layout_timeLimit) self.layout_iterLimit = QtGui.QHBoxLayout() self.layout_iterLimit.setObjectName("layout_iterLimit") self.check_iterLimit = QtGui.QCheckBox(self.group_control) self.check_iterLimit.setObjectName("check_iterLimit") self.layout_iterLimit.addWidget(self.check_iterLimit) spacerItem37 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_iterLimit.addItem(spacerItem37) self.box_iterLimit = QtGui.QSpinBox(self.group_control) self.box_iterLimit.setEnabled(False) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.box_iterLimit.sizePolicy().hasHeightForWidth()) self.box_iterLimit.setSizePolicy(sizePolicy) self.box_iterLimit.setLayoutDirection(QtCore.Qt.LeftToRight) self.box_iterLimit.setMaximum(9999) self.box_iterLimit.setObjectName("box_iterLimit") self.layout_iterLimit.addWidget(self.box_iterLimit) self.layout_timing.addLayout(self.layout_iterLimit) self.layout_control.addLayout(self.layout_timing) spacerItem38 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.layout_control.addItem(spacerItem38) self.layout_miscControl = QtGui.QVBoxLayout() self.layout_miscControl.setObjectName("layout_miscControl") self.check_useCuda = QtGui.QCheckBox(self.group_control) self.check_useCuda.setObjectName("check_useCuda") self.layout_miscControl.addWidget(self.check_useCuda) self.line = QtGui.QFrame(self.group_control) self.line.setFrameShape(QtGui.QFrame.HLine) self.line.setFrameShadow(QtGui.QFrame.Sunken) self.line.setObjectName("line") self.layout_miscControl.addWidget(self.line) self.check_plotError = QtGui.QCheckBox(self.group_control) self.check_plotError.setObjectName("check_plotError") self.layout_miscControl.addWidget(self.check_plotError) self.check_useConsole = QtGui.QCheckBox(self.group_control) self.check_useConsole.setObjectName("check_useConsole") self.layout_miscControl.addWidget(self.check_useConsole) self.layout_control.addLayout(self.layout_miscControl) self.verticalLayout_11.addLayout(self.layout_control) self.layout_controlButtons = QtGui.QHBoxLayout() self.layout_controlButtons.setObjectName("layout_controlButtons") self.button_Learn = QtGui.QPushButton(self.group_control) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.button_Learn.sizePolicy().hasHeightForWidth()) self.button_Learn.setSizePolicy(sizePolicy) self.button_Learn.setObjectName("button_Learn") self.layout_controlButtons.addWidget(self.button_Learn) self.button_Test = QtGui.QPushButton(self.group_control) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.button_Test.sizePolicy().hasHeightForWidth()) self.button_Test.setSizePolicy(sizePolicy) self.button_Test.setObjectName("button_Test") self.layout_controlButtons.addWidget(self.button_Test) self.button_Export = QtGui.QPushButton(self.group_control) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.button_Export.sizePolicy().hasHeightForWidth()) self.button_Export.setSizePolicy(sizePolicy) self.button_Export.setObjectName("button_Export") self.layout_controlButtons.addWidget(self.button_Export) spacerItem39 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.layout_controlButtons.addItem(spacerItem39) self.verticalLayout_11.addLayout(self.layout_controlButtons) spacerItem40 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout_11.addItem(spacerItem40) self.gridLayout.addWidget(self.group_control, 1, 1, 1, 1) self.verticalLayout_12.addLayout(self.gridLayout) self.group_Select = QtGui.QGroupBox(self.centralwidget) self.group_Select.setObjectName("group_Select") self.horizontalLayout_8 = QtGui.QHBoxLayout(self.group_Select) self.horizontalLayout_8.setObjectName("horizontalLayout_8") self.horizontalLayout_3 = QtGui.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.verticalLayout_9 = QtGui.QVBoxLayout() self.verticalLayout_9.setObjectName("verticalLayout_9") self.check_lockNet = QtGui.QCheckBox(self.group_Select) self.check_lockNet.setObjectName("check_lockNet") self.verticalLayout_9.addWidget(self.check_lockNet) self.button_Reset = QtGui.QPushButton(self.group_Select) self.button_Reset.setObjectName("button_Reset") self.verticalLayout_9.addWidget(self.button_Reset) self.horizontalLayout_3.addLayout(self.verticalLayout_9) self.scroll_netInstance = QtGui.QScrollArea(self.group_Select) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.scroll_netInstance.sizePolicy().hasHeightForWidth()) self.scroll_netInstance.setSizePolicy(sizePolicy) self.scroll_netInstance.setMaximumSize(QtCore.QSize(16777215, 50)) self.scroll_netInstance.setFrameShape(QtGui.QFrame.Panel) self.scroll_netInstance.setFrameShadow(QtGui.QFrame.Plain) self.scroll_netInstance.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.scroll_netInstance.setWidgetResizable(True) self.scroll_netInstance.setObjectName("scroll_netInstance") self.layout_netInstance = QtGui.QWidget() self.layout_netInstance.setGeometry(QtCore.QRect(0, 0, 597, 48)) self.layout_netInstance.setObjectName("layout_netInstance") self.horizontalLayout = QtGui.QHBoxLayout(self.layout_netInstance) self.horizontalLayout.setObjectName("horizontalLayout") self.button_addNet = QtGui.QToolButton(self.layout_netInstance) self.button_addNet.setObjectName("button_addNet") self.horizontalLayout.addWidget(self.button_addNet) spacerItem41 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem41) self.scroll_netInstance.setWidget(self.layout_netInstance) self.horizontalLayout_3.addWidget(self.scroll_netInstance) self.horizontalLayout_8.addLayout(self.horizontalLayout_3) self.verticalLayout_12.addWidget(self.group_Select) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar() self.menubar.setGeometry(QtCore.QRect(0, 0, 1145, 22)) self.menubar.setObjectName("menubar") self.menuFile = QtGui.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") self.menuEdit = QtGui.QMenu(self.menubar) self.menuEdit.setObjectName("menuEdit") self.menuTools = QtGui.QMenu(self.menubar) self.menuTools.setObjectName("menuTools") self.menuView = QtGui.QMenu(self.menubar) self.menuView.setObjectName("menuView") MainWindow.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.dock_graphPlot = QtGui.QDockWidget(MainWindow) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.dock_graphPlot.sizePolicy().hasHeightForWidth()) self.dock_graphPlot.setSizePolicy(sizePolicy) self.dock_graphPlot.setMinimumSize(QtCore.QSize(400, 286)) self.dock_graphPlot.setAllowedAreas(QtCore.Qt.BottomDockWidgetArea|QtCore.Qt.LeftDockWidgetArea|QtCore.Qt.RightDockWidgetArea) self.dock_graphPlot.setObjectName("dock_graphPlot") self.dockWidgetContents_6 = QtGui.QWidget() self.dockWidgetContents_6.setObjectName("dockWidgetContents_6") self.verticalLayout = QtGui.QVBoxLayout(self.dockWidgetContents_6) self.verticalLayout.setObjectName("verticalLayout") self.graph_plotError = PlotWidget(self.dockWidgetContents_6) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) self.graph_plotError.setBackgroundBrush(brush) self.graph_plotError.setObjectName("graph_plotError") self.verticalLayout.addWidget(self.graph_plotError) self.gridLayout_2 = QtGui.QGridLayout() self.gridLayout_2.setObjectName("gridLayout_2") self.horizontalLayout_4 = QtGui.QHBoxLayout() self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.label_6 = QtGui.QLabel(self.dockWidgetContents_6) self.label_6.setObjectName("label_6") self.horizontalLayout_4.addWidget(self.label_6) spacerItem42 = QtGui.QSpacerItem(21, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.horizontalLayout_4.addItem(spacerItem42) self.box_refreshLimit = QtGui.QSpinBox(self.dockWidgetContents_6) self.box_refreshLimit.setFrame(True) self.box_refreshLimit.setReadOnly(False) self.box_refreshLimit.setButtonSymbols(QtGui.QAbstractSpinBox.UpDownArrows) self.box_refreshLimit.setMinimum(1) self.box_refreshLimit.setObjectName("box_refreshLimit") self.horizontalLayout_4.addWidget(self.box_refreshLimit) spacerItem43 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_4.addItem(spacerItem43) self.gridLayout_2.addLayout(self.horizontalLayout_4, 0, 0, 1, 1) self.horizontalLayout_7 = QtGui.QHBoxLayout() self.horizontalLayout_7.setObjectName("horizontalLayout_7") self.label_7 = QtGui.QLabel(self.dockWidgetContents_6) self.label_7.setObjectName("label_7") self.horizontalLayout_7.addWidget(self.label_7) spacerItem44 = QtGui.QSpacerItem(50, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum) self.horizontalLayout_7.addItem(spacerItem44) self.box_currentIter = QtGui.QSpinBox(self.dockWidgetContents_6) self.box_currentIter.setReadOnly(True) self.box_currentIter.setButtonSymbols(QtGui.QAbstractSpinBox.NoButtons) self.box_currentIter.setMaximum(9999) self.box_currentIter.setObjectName("box_currentIter") self.horizontalLayout_7.addWidget(self.box_currentIter) spacerItem45 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_7.addItem(spacerItem45) self.gridLayout_2.addLayout(self.horizontalLayout_7, 1, 0, 1, 1) self.check_showThresh = QtGui.QCheckBox(self.dockWidgetContents_6) self.check_showThresh.setObjectName("check_showThresh") self.gridLayout_2.addWidget(self.check_showThresh, 0, 1, 1, 1) self.verticalLayout.addLayout(self.gridLayout_2) self.dock_graphPlot.setWidget(self.dockWidgetContents_6) MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.dock_graphPlot) self.dock_graphConsole = QtGui.QDockWidget(MainWindow) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.dock_graphConsole.sizePolicy().hasHeightForWidth()) self.dock_graphConsole.setSizePolicy(sizePolicy) self.dock_graphConsole.setMinimumSize(QtCore.QSize(102, 200)) self.dock_graphConsole.setAllowedAreas(QtCore.Qt.BottomDockWidgetArea|QtCore.Qt.TopDockWidgetArea) self.dock_graphConsole.setObjectName("dock_graphConsole") self.dockWidgetContents_7 = QtGui.QWidget() self.dockWidgetContents_7.setObjectName("dockWidgetContents_7") self.horizontalLayout_2 = QtGui.QHBoxLayout(self.dockWidgetContents_7) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.graph_console = ConsoleWidget(self.dockWidgetContents_7) self.graph_console.setObjectName("graph_console") self.horizontalLayout_2.addWidget(self.graph_console) self.dock_graphConsole.setWidget(self.dockWidgetContents_7) MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(8), self.dock_graphConsole) self.actionImportSamples = QtGui.QAction(MainWindow) self.actionImportSamples.setObjectName("actionImportSamples") self.actionExportWeights = QtGui.QAction(MainWindow) self.actionExportWeights.setObjectName("actionExportWeights") self.actionLearn = QtGui.QAction(MainWindow) self.actionLearn.setObjectName("actionLearn") self.actionTest = QtGui.QAction(MainWindow) self.actionTest.setObjectName("actionTest") self.actionExit = QtGui.QAction(MainWindow) self.actionExit.setObjectName("actionExit") self.actionReset_Simulator = QtGui.QAction(MainWindow) self.actionReset_Simulator.setObjectName("actionReset_Simulator") self.actionCut = QtGui.QAction(MainWindow) self.actionCut.setObjectName("actionCut") self.actionCopy = QtGui.QAction(MainWindow) self.actionCopy.setObjectName("actionCopy") self.actionPaste = QtGui.QAction(MainWindow) self.actionPaste.setObjectName("actionPaste") self.action_loadSettings = QtGui.QAction(MainWindow) self.action_loadSettings.setObjectName("action_loadSettings") self.actionShow_Console = QtGui.QAction(MainWindow) self.actionShow_Console.setObjectName("actionShow_Console") self.actionShow_Error_Plot = QtGui.QAction(MainWindow) self.actionShow_Error_Plot.setObjectName("actionShow_Error_Plot") self.actionUse_CUDA = QtGui.QAction(MainWindow) self.actionUse_CUDA.setCheckable(True) self.actionUse_CUDA.setObjectName("actionUse_CUDA") self.menuFile.addAction(self.actionImportSamples) self.menuFile.addAction(self.actionExportWeights) self.menuFile.addSeparator() self.menuFile.addAction(self.actionLearn) self.menuFile.addAction(self.actionTest) self.menuFile.addSeparator() self.menuFile.addAction(self.actionExit) self.menuEdit.addAction(self.actionCut) self.menuEdit.addAction(self.actionCopy) self.menuEdit.addAction(self.actionPaste) self.menuEdit.addSeparator() self.menuEdit.addAction(self.actionReset_Simulator) self.menuTools.addAction(self.action_loadSettings) self.menuTools.addSeparator() self.menuTools.addAction(self.actionUse_CUDA) self.menuView.addAction(self.actionShow_Console) self.menuView.addAction(self.actionShow_Error_Plot) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuEdit.menuAction()) self.menubar.addAction(self.menuTools.menuAction()) self.menubar.addAction(self.menuView.menuAction()) self.retranslateUi(MainWindow) self.stacked_stopKey.setCurrentIndex(0) self.stacked_initWeights.setCurrentIndex(0) QtCore.QObject.connect(self.combo_initWeights, QtCore.SIGNAL("currentIndexChanged(int)"), self.stacked_initWeights.setCurrentIndex) QtCore.QObject.connect(self.combo_stopKey, QtCore.SIGNAL("currentIndexChanged(int)"), self.stacked_stopKey.setCurrentIndex) QtCore.QObject.connect(self.dock_graphConsole, QtCore.SIGNAL("visibilityChanged(bool)"), self.check_useConsole.setChecked) QtCore.QObject.connect(self.dock_graphPlot, QtCore.SIGNAL("visibilityChanged(bool)"), self.check_plotError.setChecked) QtCore.QObject.connect(self.check_lockNet, QtCore.SIGNAL("toggled(bool)"), self.button_addNet.setDisabled) QtCore.QObject.connect(self.check_timeLimit, QtCore.SIGNAL("toggled(bool)"), self.box_timeLimit.setEnabled) QtCore.QObject.connect(self.check_iterLimit, QtCore.SIGNAL("toggled(bool)"), self.box_iterLimit.setEnabled) QtCore.QObject.connect(self.check_plotError, QtCore.SIGNAL("toggled(bool)"), self.dock_graphPlot.setShown) QtCore.QObject.connect(self.check_useConsole, QtCore.SIGNAL("toggled(bool)"), self.dock_graphConsole.setShown) QtCore.QObject.connect(self.check_lockNet, QtCore.SIGNAL("toggled(bool)"), self.button_Reset.setDisabled) QtCore.QMetaObject.connectSlotsByName(MainWindow)