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()
Beispiel #2
0
 def __init__(self, name):
     super().__init__(name,
                      terminals={'title': {
                          'io': 'in'
                      }},
                      allowAddInput=True)
     self.console = ConsoleWidget()
     self.title = None
Beispiel #3
0
 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())))
Beispiel #4
0
 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)
Beispiel #5
0
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'])
Beispiel #6
0
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
Beispiel #8
0
    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)
Beispiel #9
0
    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)
Beispiel #10
0
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()
Beispiel #13
0
	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")
Beispiel #15
0
    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()
Beispiel #16
0
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)
Beispiel #17
0
    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)
Beispiel #18
0
    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
Beispiel #20
0
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()
Beispiel #21
0
# 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_()
Beispiel #22
0
    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)