コード例 #1
0
    def initUI(self):
        self.grid = QtGui.QGridLayout()
        self.setLayout(self.grid)
        self.lbl1 = QtGui.QLabel("Select beamline")
        self.lbl2 = QtGui.QLabel(
            "Enter theta position pv if other than default")
        self.lbl3 = QtGui.QLabel("Warning Message")
        self.lbl4 = QtGui.QLabel(
            "NOTE: PV for 2-IDE data processed before Feb 2018 is 657")
        self.btn = QtGui.QPushButton("Okay")
        self.txtfield = QtGui.QLineEdit("8")
        self.txtfield2 = QtGui.QLineEdit("663")
        self.button = QtGui.QCheckBox("Bionanoprobe")
        self.button2 = QtGui.QCheckBox("2-IDE")
        self.setWindowTitle('Configuration')
        self.btn.setAutoRepeat(True)

        vb = QtGui.QVBoxLayout()
        vb.addWidget(self.lbl1, 1)
        vb.addWidget(self.button, 2)
        vb.addWidget(self.button2, 3)
        vb2 = QtGui.QVBoxLayout()
        vb2.addWidget(self.lbl2, 1)
        vb2.addWidget(self.txtfield, 2)
        vb2.addWidget(self.txtfield2, 3)
        vb3 = QtGui.QVBoxLayout()
        vb3.addWidget(self.lbl3)
        vb3.addWidget(self.lbl4)
        vb4 = QtGui.QVBoxLayout()
        vb4.addWidget(self.btn)

        self.grid.addLayout(vb, 0, 0, 2, 1)
        self.grid.addLayout(vb2, 0, 1, 2, 2)
        self.grid.addLayout(vb3, 4, 0, 2, 3)
        self.grid.addLayout(vb4, 6, 1, 1, 1)
コード例 #2
0
    def createMessageWidget(self):
        '''create message box widget. return group
		'''
        GridStartVal = '2'
        vbox = QtGui.QVBoxLayout()
        hbox = QtGui.QHBoxLayout()
        hbox2 = QtGui.QHBoxLayout()
        self.lbl = QtGui.QLineEdit("Step 1) Open configuration file", self)
        self.lbl2 = QtGui.QLineEdit()
        self.lbl2.setText(os.getcwd())
        self.directoryButton = QtGui.QPushButton("Change Directory")
        hbox.addWidget(QtGui.QLabel("Message"))
        hbox.addWidget(self.lbl)
        hbox2.addWidget(QtGui.QLabel("Set Directory"))
        hbox2.addWidget(self.lbl2)
        hbox2.addWidget(self.directoryButton)
        vbox.addLayout(hbox)
        vbox.addLayout(hbox2)
        messageGroup = QtGui.QGroupBox("Message Box")
        messageGroup.setLayout(vbox)

        if self.tab_widget.currentIndex() == 1:
            self.lbl.setText("click hotspot, press n or press S to skip frame")
        else:
            self.lbl.setText("")
        return messageGroup
コード例 #3
0
 def __init__(self, apiKey, parent=None):
     super(Login, self).__init__(parent)
     self.apiKey = apiKey
     self.setWindowTitle('IG Login')
     self.textName = QtGui.QLineEdit(self)
     self.textPass = QtGui.QLineEdit(self)
     self.textPass.setEchoMode(QtGui.QLineEdit.Password)
     self.saveLogin = QtGui.QCheckBox('Save Login', self)
     self.saveLogin.setChecked(True)
     self.buttonLogin = QtGui.QPushButton('Login', self)
     self.buttonLogin.clicked.connect(self.handleLogin)
     layout = QtGui.QVBoxLayout(self)
     layout.addWidget(self.textName)
     layout.addWidget(self.textPass)
     layout.addWidget(self.saveLogin)
     layout.addWidget(self.buttonLogin)
コード例 #4
0
    def getparameters(self):
        self.parametersquit = QtGui.QVBoxLayout()

        self.entertime = QtGui.QLineEdit()
        self.entertimeinterval = QtGui.QLineEdit()

        self.parameters = QtGui.QFormLayout()

        self.parameters.addRow('Time:', self.entertime)
        self.parameters.addRow('Time Interval:', self.entertimeinterval)

        self.parametersquit.addLayout(self.parameters)

        self.quitbutton = QtGui.QPushButton('Quit')

        self.parametersquit.addWidget(self.quitbutton)
コード例 #5
0
ファイル: pyqtgui.py プロジェクト: yuntingcheng/TIME_Software
    def getparameters(self):
        self.parametersquit = QtGui.QVBoxLayout()

        #creating user input boxes
        self.enterobserver = QtGui.QLineEdit('VLB')
        self.enterobserver.setMaxLength(3)
        self.enterdatamode = QtGui.QComboBox()
        self.enterdatamode.addItems([
            'Error', 'Raw', 'Low Pass Filtered', 'Mixed Mode', 'SQ1 Feedback'
        ])
        self.enterreadoutcard = QtGui.QComboBox()
        for i in range(8):
            if i < 4:
                self.enterreadoutcard.addItem('MCE 1 RC %s' % (i % 4 + 1))
            else:
                self.enterreadoutcard.addItem('MCE 2 RC %s' % (i % 4 + 1))
        self.enterreadoutcard.addItem('All')
        self.enterframenumber = QtGui.QLineEdit('1350000')
        self.enterframenumber.setMaxLength(9)
        self.enterdatarate = QtGui.QLineEdit('45')
        self.entertimeinterval = QtGui.QLineEdit('120')
        self.enterchanneldelete = QtGui.QComboBox()
        self.enterchanneldelete.addItems(['No', 'Yes'])
        self.entershowmcedata = QtGui.QComboBox()
        self.entershowmcedata.addItems(['Yes', 'No'])
        self.submitbutton = QtGui.QPushButton('Submit')

        self.parameters = QtGui.QFormLayout()
        self.parameters.addRow('Observer', self.enterobserver)
        self.parameters.addRow('Datamode', self.enterdatamode)
        self.parameters.addRow('Readout Card', self.enterreadoutcard)
        self.parameters.addRow('Frame Number', self.enterframenumber)
        self.parameters.addRow('Data Rate', self.enterdatarate)
        self.parameters.addRow('Delete Old Columns', self.enterchanneldelete)
        self.parameters.addRow('Time Interval (s)', self.entertimeinterval)
        self.parameters.addRow('Show MCE Data', self.entershowmcedata)
        self.parameters.addRow(self.submitbutton)

        self.parametersquit.addLayout(self.parameters)

        #creating quit button
        self.quitbutton = QtGui.QPushButton('Quit')
        self.parametersquit.addWidget(self.quitbutton)

        self.readoutcardselect = QtGui.QComboBox()
        self.selectchannel = QtGui.QComboBox()
        self.selectrow = QtGui.QComboBox()
コード例 #6
0
 def createWidgets(self):
     """
     Create some widgets to be placed inside
     """        
     self.btn = QtGui.QPushButton('press me')
     self.text = QtGui.QLineEdit('enter text')
     self.listw = QtGui.QListWidget()
     self.plot = pg.PlotWidget()
コード例 #7
0
ファイル: layout.py プロジェクト: dioph/tapioca
    def init_gui(self):
        self.layout = QtGui.QGridLayout()
        self.setLayout(self.layout)

        self.title = QtGui.QLabel('<b>ANALISE DE CURVAS DE LUZ</b>',
                                  alignment=0x0004)
        self.bt_n = QtGui.QPushButton('usar um novo arquivo')
        self.kic = QtGui.QPushButton('buscar online')
        self.txt1 = QtGui.QLineEdit()
        self.txt2 = QtGui.QLineEdit()
        self.sub = QtGui.QPushButton('submit')

        self.layout.addWidget(self.title, 0, 0, 1, 2)
        self.layout.addWidget(self.bt_n, 1, 0)
        self.layout.addWidget(self.kic, 1, 1)
        self.layout.addWidget(self.txt1, 2, 0)
        self.layout.addWidget(self.txt2, 2, 1)
        self.layout.addWidget(self.sub, 2, 2)
        self.setGeometry(10, 10, 1000, 600)
        self.txt1.hide()
        self.txt2.hide()
        self.sub.hide()
        self.show()
コード例 #8
0
ファイル: RasGui.py プロジェクト: gopshyam/RAS_GUI
    def __init__(self, dataGenerator, parent=None):
        super(SpeedButton, self).__init__(parent=parent)

        self.verticalLayout = QtGui.QVBoxLayout(self)
        self.speed = 0.10
        #self.label = QtGui.QLabel(self)
        #self.label.setText("Speed")
        #self.label.setFixedHeight(25)

        #self.startButton = QtGui.QPushButton('Apply Contingency', self)
        #self.startButton.clicked.connect(dataGenerator.start)

        #self.stopButton = QtGui.QPushButton('Reset', self)
        #self.stopButton.clicked.connect(dataGenerator.stop)

        self.fullPlotButton = QtGui.QPushButton("View Full Plot", self)

        self.zoomButton = QtGui.QPushButton("Zoom Out", self)

        self.textbox = QtGui.QLineEdit(self)
        self.textbox.setText('0.85')
        self.textButton = QtGui.QPushButton("Set Wind Power", self)
        #self.textButton.clicked.connect(self.setSlider)
        '''self.sb1 = QtGui.QRadioButton("x1")
        self.sb1.toggled.connect(lambda: self.setSpeed(1))
        self.sb2 = QtGui.QRadioButton("x0.5")
        self.sb2.toggled.connect(lambda: self.setSpeed(0.5))
        self.sb3 = QtGui.QRadioButton("x0.25")
        self.sb3.toggled.connect(lambda: self.setSpeed(0.25))
        self.sb3.setChecked(True)
        self.sb4 = QtGui.QRadioButton("x0.10")
        self.sb4.toggled.connect(lambda: self.setSpeed(0.1))'''

        #self.speedLayout = QtGui.QVBoxLayout()
        #self.speedLayout.addWidget(self.label)
        #self.speedLayout.addWidget(self.sb1)

        self.verticalLayout.setAlignment(QtCore.Qt.AlignTop)

        #self.verticalLayout.addWidget(self.startButton)
        #self.verticalLayout.addWidget(self.stopButton)
        self.verticalLayout.addWidget(self.fullPlotButton)
        self.verticalLayout.addWidget(self.zoomButton)
        self.verticalLayout.addWidget(self.textbox)
        self.verticalLayout.addWidget(self.textButton)
コード例 #9
0
ファイル: dirreader.py プロジェクト: whigg/h5browse
 def __init__(self, parent=None):
     super(DirReader, self).__init__(parent=parent)
     self.settings = QtCore.QSettings('dataviz', 'dirreader')
     self.baseDirLabel = QtGui.QLabel('Base directory')
     self.baseDirEdit = QtGui.QLineEdit('.')
     self.baseDirButton = QtGui.QPushButton('Open')
     self.baseDirButton.clicked.connect(self.selectBaseDir)
     self.baseDirWidget = QtGui.QWidget()
     layout = QtGui.QHBoxLayout()
     self.baseDirWidget.setLayout(layout)
     layout.addWidget(self.baseDirLabel)
     layout.addWidget(self.baseDirEdit)
     layout.addWidget(self.baseDirButton)
     self.pathTree = ptree.ParameterTree(showHeader=False)
     self.pathRules = PathParams(name='Path rules')
     self.pathTree.setParameters(self.pathRules, showTop=True)
     self.setLayout(QtGui.QVBoxLayout())
     self.layout().addWidget(self.baseDirWidget)
     self.layout().addWidget(self.pathTree)
コード例 #10
0
    def __init__(self, parentWidget,
                 onSearchString,
                 onChooseSearchResult):

        self.onChooseSearchResult = onChooseSearchResult
        self.onSearchString = onSearchString

        completer = QtGui.QCompleter()
        completer.setCaseSensitivity(Qt.CaseInsensitive)
        completer.setMaxVisibleItems(20)
        completer.setCompletionMode(QtGui.QCompleter.UnfilteredPopupCompletion)
        self.model = QtGui.QStringListModel()
        completer.setModel(self.model)

        self.edit = edit = QtGui.QLineEdit(parentWidget)
        edit.setMinimumWidth(600)
        edit.setCompleter(completer)

        edit.textChanged.connect(self.textChanged)
        edit.returnPressed.connect(self.returnPressed)
        edit.keyPressEvent = self.keyPressEvent
        self.completer = completer
        self.threads = []
コード例 #11
0
    def initUI(self):
        self.xSize = 20
        self.ySize = 20

        self.bgBtn = QtGui.QPushButton("Bg Value")
        self.delHotspotBtn = QtGui.QPushButton("Delete HS")
        self.normalizeBtn = QtGui.QPushButton("Normalize")
        self.cutBtn = QtGui.QPushButton("Cut")
        self.gaussian33Btn = QtGui.QPushButton("3*3 gauss")
        self.gaussian55Btn = QtGui.QPushButton("5*5 gauss")
        self.xUpBtn = QtGui.QPushButton("x: +")
        self.xUpBtn.clicked.connect(self.xUp)
        self.xDownBtn = QtGui.QPushButton("x: -")
        self.xDownBtn.clicked.connect(self.xDown)
        self.yUpBtn = QtGui.QPushButton("y: +")
        self.yUpBtn.clicked.connect(self.yUp)
        self.yDownBtn = QtGui.QPushButton("y: -")
        self.yDownBtn.clicked.connect(self.yDown)

        self.xSizeLbl = QtGui.QLabel("x Size")
        self.ySizeLbl = QtGui.QLabel("y Size")

        self.xSizeTxt = QtGui.QLineEdit(str(self.xSize))
        self.ySizeTxt = QtGui.QLineEdit(str(self.ySize))

        self.combo1 = QtGui.QComboBox()
        self.combo2 = QtGui.QComboBox()

        hb1 = QtGui.QHBoxLayout()
        hb1.addWidget(self.xUpBtn)
        hb1.addWidget(self.xDownBtn)
        hb2 = QtGui.QHBoxLayout()
        hb2.addWidget(self.xSizeLbl)
        hb2.addWidget(self.xSizeTxt)
        hb3 = QtGui.QHBoxLayout()
        hb3.addWidget(self.yUpBtn)
        hb3.addWidget(self.yDownBtn)
        hb4 = QtGui.QHBoxLayout()
        hb4.addWidget(self.ySizeLbl)
        hb4.addWidget(self.ySizeTxt)

        vb1 = QtGui.QVBoxLayout()
        vb1.addLayout(hb1)
        vb1.addLayout(hb2)
        vb2 = QtGui.QVBoxLayout()
        vb2.addLayout(hb3)
        vb2.addLayout(hb4)
        xSG = QtGui.QGroupBox("x Size")
        xSG.setLayout(vb1)
        ySG = QtGui.QGroupBox("y Size")
        ySG.setLayout(vb2)
        vb3 = QtGui.QVBoxLayout()
        vb3.addWidget(self.combo1)
        vb3.addWidget(self.combo2)
        vb3.addWidget(xSG)
        vb3.addWidget(ySG)

        hb6 = QtGui.QHBoxLayout()
        hb6.addWidget(self.bgBtn, stretch=0)
        hb6.addWidget(self.delHotspotBtn, stretch=0)

        hb7 = QtGui.QHBoxLayout()
        hb7.addWidget(self.normalizeBtn, stretch=0)
        hb7.addWidget(self.cutBtn, stretch=0)

        hb8 = QtGui.QHBoxLayout()
        hb8.addWidget(self.gaussian33Btn, stretch=0)
        hb8.addWidget(self.gaussian55Btn, stretch=0)

        vb3.addLayout(hb6)
        vb3.addLayout(hb7)
        vb3.addLayout(hb8)

        self.setLayout(vb3)
コード例 #12
0
    def initUI(self):
        self.combo = QtGui.QComboBox(self)
        self.method = QtGui.QComboBox(self)
        self.btn = QtGui.QPushButton('Click2')
        self.save = QtGui.QPushButton("Save tiff files")
        self.save.setHidden(True)
        self.btn.setText("Sinogram")
        self.sld = QtGui.QSlider(QtCore.Qt.Horizontal, self)
        self.lcd = QtGui.QLineEdit("0")
        self.lbl = QtGui.QLabel()
        self.cbox = QtGui.QCheckBox("")
        self.lbl2 = QtGui.QLabel("Center")
        self.lbl.setText("")

        self.threshLbl = QtGui.QLabel("threshold")
        self.threshLe = QtGui.QLineEdit("")
        self.threshBtn = QtGui.QPushButton("Apply")

        centerBox = QtGui.QHBoxLayout()
        centerBox.addWidget(self.cbox)
        centerBox.addWidget(self.lbl2)
        centerBox.addWidget(self.lcd)
        self.lcd.setEnabled(False)
        self.methodname = ["mlem", "gridrec", "art", "pml_hybrid", "pml_quad"]

        self.mulBtn = QtGui.QPushButton("x 10")
        self.divBtn = QtGui.QPushButton("/ 10")
        mdBox = QtGui.QHBoxLayout()
        mdBox.addWidget(self.mulBtn)
        mdBox.addWidget(self.divBtn)

        self.maxLbl = QtGui.QLabel("Max")
        self.minLbl = QtGui.QLabel("Min")
        self.maxText = QtGui.QLineEdit()
        self.minText = QtGui.QLineEdit()

        maxBox = QtGui.QHBoxLayout()
        minBox = QtGui.QHBoxLayout()
        maxBox.addWidget(self.maxLbl)
        maxBox.addWidget(self.maxText)
        minBox.addWidget(self.minLbl)
        minBox.addWidget(self.minText)

        self.betaName = QtGui.QLabel("Beta")
        self.deltaName = QtGui.QLabel("Delta")
        self.itersName = QtGui.QLabel("Iteration")
        self.beta = QtGui.QLineEdit("1")
        self.delta = QtGui.QLineEdit("0.01")
        self.iters = QtGui.QLineEdit("10")

        betaBox = QtGui.QHBoxLayout()
        deltaBox = QtGui.QHBoxLayout()
        itersBox = QtGui.QHBoxLayout()
        threshBox = QtGui.QHBoxLayout()
        betaBox.addWidget(self.betaName)
        betaBox.addWidget(self.beta)
        deltaBox.addWidget(self.deltaName)
        deltaBox.addWidget(self.delta)
        itersBox.addWidget(self.itersName)
        itersBox.addWidget(self.iters)
        threshBox.addWidget(self.threshLbl)
        threshBox.addWidget(self.threshLe)
        threshBox.addWidget(self.threshBtn)

        for k in arange(len(self.methodname)):
            self.method.addItem(self.methodname[k])
        vb = QtGui.QVBoxLayout()
        vb.addWidget(self.combo)
        vb.addWidget(self.method)
        vb.addWidget(self.btn)
        vb.addWidget(self.save)
        vb.addLayout(centerBox)
        vb.addLayout(threshBox)
        vb.addWidget(self.sld)
        vb.addWidget(self.lbl)
        vb.addLayout(mdBox)
        vb.addLayout(maxBox)
        vb.addLayout(minBox)
        vb.addLayout(itersBox)
        vb.addLayout(betaBox)
        vb.addLayout(deltaBox)
        self.setLayout(vb)
コード例 #13
0
ファイル: test_gui.py プロジェクト: zemcov/TIME_Software
    def getparameters(self):
        #creating user input boxes
        self.enterobserver = QtGui.QLineEdit('VLB')
        self.enterobserver.setMaxLength(3)
        self.enterdatamode = QtGui.QComboBox()
        self.enterdatamode.addItems(
            ['Error', 'Raw', 'Filtered SQ1 Feedback', 'Debugging', 'Mixed Mode (25:7)','Mixed Mode (22:10)','Mixed Mode (24:8)','Mixed mode (18:14)'])
        self.enterreadoutcard = QtGui.QComboBox()
        for i in range(8):
            if i < 4:
                self.enterreadoutcard.addItem('MCE 1 RC %s' % (i % 4 + 1))
            else:
                self.enterreadoutcard.addItem('MCE 2 RC %s' % (i % 4 + 1))
        self.enterreadoutcard.addItem('All')
        self.enterframenumber = QtGui.QLineEdit('1350000')
        self.enterframenumber.setMaxLength(9)
        self.enterdatarate = QtGui.QLineEdit('45')
        self.entertimeinterval = QtGui.QLineEdit('120')
        self.enterchanneldelete = QtGui.QComboBox()
        self.enterchanneldelete.addItems(['No', 'Yes'])
        self.entershowmcedata = QtGui.QComboBox()
        self.entershowmcedata.addItems(['Yes', 'No'])
        self.submitbutton = QtGui.QPushButton('Submit')

        self.mceGroupBox = QtGui.QGroupBox("MCE Parameters")
        self.parameters = QtGui.QFormLayout()
        self.mcetitle = QtGui.QLabel(self)
        self.mcetitle.setAlignment(QtCore.Qt.AlignCenter)
        self.mcetitle.setText('MCE Parameters')
        self.parameters.addRow(self.mcetitle)
        self.parameters.addRow('Observer', self.enterobserver)
        self.parameters.addRow('Datamode', self.enterdatamode)
        self.parameters.addRow('Readout Card', self.enterreadoutcard)
        self.parameters.addRow('Frame Number', self.enterframenumber)
        self.parameters.addRow('Data Rate', self.enterdatarate)
        self.parameters.addRow('Delete Old Columns', self.enterchanneldelete)
        self.parameters.addRow('Time Interval (s)', self.entertimeinterval)
        self.parameters.addRow('Show MCE Data', self.entershowmcedata)
        self.parameters.addRow(self.submitbutton)
        self.mceGroupBox.setLayout(self.parameters)

        # telescope options =================================================
        self.telescan = QtGui.QComboBox()
        self.telescan.addItems(['1D','2D','BowTie (constant el)'])

        self.tel_delay = QtGui.QLineEdit('0')

        self.init_tel = QtGui.QComboBox()
        self.init_tel.addItems(['No','Yes'])



        self.telGroupBox = QtGui.QGroupBox("Telescope Parameters")
        self.telparams = QtGui.QFormLayout()
        self.teltitle = QtGui.QLabel(self)
        self.teltitle.setAlignment(QtCore.Qt.AlignCenter)
        self.teltitle.setText('Telescope Parameters')
        self.telparams.addRow(self.teltitle)
        self.telparams.addRow('Activate Telescope', self.init_tel)
        self.telparams.addRow('Scan Strategy', self.telescan)
        self.telparams.addRow('Delayed Start (sec)', self.tel_delay)
        self.starttel = QtGui.QPushButton('Initialize Telescope')
        self.telparams.addRow(self.starttel)
        self.telGroupBox.setLayout(self.telparams)
        # =====================================================================
        self.parametersquit = QtGui.QVBoxLayout()
        self.parametersquit.setAlignment(QtCore.Qt.AlignCenter)
        self.parametersquit.addWidget(self.telGroupBox)
        self.parametersquit.addWidget(self.mceGroupBox)
        self.quitbutton = QtGui.QPushButton('Quit')
        self.parametersquit.addWidget(self.quitbutton)

        self.readoutcardselect = QtGui.QComboBox()
        self.selectchannel = QtGui.QComboBox()
        self.selectrow = QtGui.QComboBox()
コード例 #14
0
    def initUI(self):
        """Initialise the GUI."""
        self.usemock = False
        hbmain = QtGui.QHBoxLayout()
        
        self.plt1 = pg.PlotWidget()
        self.plt1.setLabel('left', "y (mm)")
        self.plt1.setLabel('bottom', "x (mm)")
        self.plt1.showGrid(x=True, y=True)
        self.plt_headposition_x = pg.InfiniteLine(angle=90, movable=False)
        self.plt_headposition_y = pg.InfiniteLine(angle=0, movable=False)
        self.plt1.addItem(self.plt_headposition_x)
        self.plt1.addItem(self.plt_headposition_y)
        self.plt_gcode = self.plt1.plot(pen=pg.mkPen('r', width=2))
        self.plt1.setAspectLocked(True,ratio=1)
        
        hbmain.addWidget(self.plt1)
        
        
        vbconsole = QtGui.QVBoxLayout()
        gb = QtGui.QGroupBox('console:')
        gbvb = QtGui.QVBoxLayout()
        
        gbvbhb = QtGui.QHBoxLayout()
        self.gui_console_date_cb = QtGui.QCheckBox('show date', self, checkable=True, checked=False)
        self.gui_console_time_cb = QtGui.QCheckBox('show time', self, checkable=True, checked=False)
        gbvbhb.addWidget(self.gui_console_date_cb)
        gbvbhb.addWidget(self.gui_console_time_cb)
        gbvb.addLayout(gbvbhb)

        self.gui_consoletext = QtGui.QTextEdit()
        gbvb.addWidget(self.gui_consoletext)
        
        self.gui_command = QtGui.QLineEdit('', self)
        self.gui_command.returnPressed.connect(self.respond_gui_command)
        gbvb.addWidget(self.gui_command)
        
        gb.setLayout(gbvb)
        vbconsole.addWidget(gb)

        hbmain.addLayout(vbconsole)


        vbcontrols = QtGui.QVBoxLayout()
        
        gb = QtGui.QGroupBox('connection:')
        gbvb = QtGui.QVBoxLayout()
        hbox = QtGui.QHBoxLayout()
        pb = QtGui.QPushButton("Scan")
        pb.clicked.connect(self.scan)
        self.scanbtn = pb
        hbox.addWidget(pb)
        cb=QtGui.QComboBox()
        self.port_list=cb
        self.port_list.setMinimumWidth(200)
        hbox.addWidget(cb)
        cb=QtGui.QCheckBox("Open")
        self.opened=cb
        cb.stateChanged.connect(self.toggle_connection)
        hbox.addWidget(cb)
        gbvb.addLayout(hbox)
        gb.setLayout(gbvb)
        vbcontrols.addWidget(gb)

        # gb = QtGui.QGroupBox('controls:')
        # gbvb = QtGui.QVBoxLayout()
        # gbvbhb = QtGui.QHBoxLayout()
        # btn = QtGui.QPushButton('unlock')
        # btn.clicked.connect(self.unlock)
        # gbvbhb.addWidget(btn)
        # btn = QtGui.QPushButton('FEED HOLD')
        # btn.clicked.connect(self.feed_hold)
        # gbvbhb.addWidget(btn)
        # btn = QtGui.QPushButton('RESUME')
        # btn.clicked.connect(self.feed_resume)
        # gbvbhb.addWidget(btn)
        # gbvb.addLayout(gbvbhb)
        # gb.setLayout(gbvb)
        # vbcontrols.addWidget(gb)

        gb = QtGui.QGroupBox('main:')
        gbvb = QtGui.QVBoxLayout()
        
        
        gbvbhb = QtGui.QHBoxLayout()
        btn = QtGui.QPushButton('unlock')
        btn.clicked.connect(self.unlock)
        gbvbhb.addWidget(btn)
        
        self.motorlock_enable_cb = QtGui.QCheckBox('motorlock', self, checkable=True, checked=True)
        self.motorlock_enable_cb.clicked.connect(self.motorlock_toggle)
        gbvbhb.addWidget(self.motorlock_enable_cb)
        
        btn = QtGui.QPushButton('set MCS zero (home)!')
        btn.clicked.connect(self.gui_set_mcs_zero)
        gbvbhb.addWidget(btn)
        btn = QtGui.QPushButton('set WCS zero!')
        btn.clicked.connect(self.gui_set_wcs_zero)
        gbvbhb.addWidget(btn)
        gbvb.addLayout(gbvbhb)
        
        gbvbhb = QtGui.QHBoxLayout()
        btn = QtGui.QPushButton('G0 go to MCS origin')
        btn.clicked.connect(self.go_to_mcs_origin)
        gbvbhb.addWidget(btn)
        btn = QtGui.QPushButton('G0 go to WCS origin')
        btn.clicked.connect(self.go_to_wcs_origin)
        gbvbhb.addWidget(btn)
        gbvb.addLayout(gbvbhb)

        gb.setLayout(gbvb)
        vbcontrols.addWidget(gb)

        gb = QtGui.QGroupBox('position:')
        gbvb = QtGui.QVBoxLayout()
        gbvbhb = QtGui.QHBoxLayout()
        btn = QtGui.QPushButton('get state')
        btn.clicked.connect(self.gui_get_state)
        gbvbhb.addWidget(btn)
        self.gui_get_state_online_cb = QtGui.QCheckBox('online', self, checkable=True, checked=False)
        self.gui_get_state_online_cb.clicked.connect(self.gui_get_state_online_cb_clicked)
        gbvbhb.addWidget(self.gui_get_state_online_cb)
        
        
        
        gbvb.addLayout(gbvbhb)
        
        gbvbhb = QtGui.QHBoxLayout()
        self.gui_info_state1 = QtGui.QLabel('state', self)
        self.gui_info_state2 = QtGui.QLabel('state', self)
        self.gui_info_mcs_x = QtGui.QLabel('MCS x', self)
        self.gui_info_mcs_y = QtGui.QLabel('MCS y', self)
        self.gui_info_wcs_x = QtGui.QLabel('WCS x', self)
        self.gui_info_wcs_y = QtGui.QLabel('WCS y', self)        
        
        gbvb.addWidget(self.gui_info_state1)
        gbvb.addWidget(self.gui_info_state2)
        
        gbvbhb = QtGui.QHBoxLayout()
        gbvbhb.addWidget(self.gui_info_mcs_x)
        gbvbhb.addWidget(self.gui_info_mcs_y)
        # gbvb.addLayout(gbvbhb)
        
        #gbvbhb = QtGui.QHBoxLayout()
        gbvbhb.addWidget(self.gui_info_wcs_x)
        gbvbhb.addWidget(self.gui_info_wcs_y)
        gbvb.addLayout(gbvbhb)

        gbvb.addLayout(gbvbhb)
        
        gb.setLayout(gbvb)
        vbcontrols.addWidget(gb)
        
        

        

        gb = QtGui.QGroupBox('jogging controls:')
        gbvb = QtGui.QVBoxLayout()
        
        gbvbhb = QtGui.QHBoxLayout()
        #btn = QtGui.QPushButton('1')
        #btn.clicked.connect(self.unlock)
        #gbvbhb.addWidget(btn)
        self.gui_jog_stepsize = Spinner('jog step size (mm):', 1, step=1, guic=gbvbhb)
        self.gui_jog_feedrate = Spinner('feed rate (mm/min):', 5000, step=100, guic=gbvbhb)
        gbvb.addLayout(gbvbhb)

        horizontalGroupBox = QtGui.QGroupBox("")
        layout = QtGui.QGridLayout()
        layout.setColumnStretch(0, 1)
        layout.setColumnStretch(1, 1)
        layout.setColumnStretch(2, 1)
        
        def set_jogfun(what):
            def fun():
                self.jog(what)
            return fun
        
        
        #d = {'what': '-x +y', 'n': 0, 'm': 0}
        
        def makebutton(d):
            btn = QtGui.QPushButton(d['what'])
            btn.clicked.connect(set_jogfun(d['what']))
            layout.addWidget(btn,d['n'],d['m'])
            
        makebutton({'what': '-x +y', 'n': 0, 'm': 0})   
        makebutton({'what': '+y',    'n': 0, 'm': 1})   
        makebutton({'what': '+x +y', 'n': 0, 'm': 2})   

        makebutton({'what': '-x',    'n': 1, 'm': 0})   
        # makebutton({'what': '',      'n': 1, 'm': 1})   
        makebutton({'what': '+x',    'n': 1, 'm': 2})   

        makebutton({'what': '-x -y', 'n': 2, 'm': 0})   
        makebutton({'what': '-y',    'n': 2, 'm': 1})   
        makebutton({'what': '+x -y', 'n': 2, 'm': 2})        
        
        horizontalGroupBox.setLayout(layout)
        gbvb.addWidget(horizontalGroupBox)
        
        gb.setLayout(gbvb)
        vbcontrols.addWidget(gb)
        
        
        gb = QtGui.QGroupBox('absolute positioning:')
        gbvb = QtGui.QVBoxLayout()
        
        
        
        gbvbhb = QtGui.QHBoxLayout()
        self.gui_g1_xpos_mm = Spinner('x (mm):', 0, step=1, guic=gbvbhb)
        self.gui_g1_ypos_mm = Spinner('y (mm):', 0, step=1, guic=gbvbhb)
        gbvb.addLayout(gbvbhb)
        self.gui_g1_feedrate = Spinner('feed rate (mm/min):', 5000, step=100, guic=gbvb)
        
        gbvbhb = QtGui.QHBoxLayout()
        btn = QtGui.QPushButton('G0 GO')
        btn.clicked.connect(self.g0_go_to_position)
        gbvbhb.addWidget(btn)
        btn = QtGui.QPushButton('G1 GO')
        btn.clicked.connect(self.g1_go_to_position)
        gbvbhb.addWidget(btn)
        gbvb.addLayout(gbvbhb)
        
        gb.setLayout(gbvb)
        vbcontrols.addWidget(gb)
        
        
        gb = QtGui.QGroupBox('spindle control:')
        gbvb = QtGui.QVBoxLayout()
        
        gbvbhb = QtGui.QHBoxLayout()
        self.gui_spindlespeed = Spinner('spindle / servo:', 600, step=50, bounds=[0, 1000], guic=gbvbhb, fun=self.set_spindle_speed)
        
        self.gui_spindle_enable_cb = QtGui.QCheckBox('Spindle', self, checkable=True, checked=False)
        self.gui_spindle_enable_cb.clicked.connect(self.gui_spindle_enable_cb_clicked)
        gbvbhb.addWidget(self.gui_spindle_enable_cb)
        
        #btn = QtGui.QPushButton('ON')
        #btn.clicked.connect(self.set_spindle_on)
        #gbvbhb.addWidget(btn)
        #btn = QtGui.QPushButton('OFF')
        #btn.clicked.connect(self.set_spindle_off)
        #gbvbhb.addWidget(btn)
        
        gbvb.addLayout(gbvbhb)
        gb.setLayout(gbvb)
        vbcontrols.addWidget(gb)
        
        
        
        gb = QtGui.QGroupBox('G-code streaming:')
        gbvb = QtGui.QVBoxLayout()
        
        gbvbhb = QtGui.QHBoxLayout()
        l = QtGui.QLabel('file:')
        gbvbhb.addWidget(l)
        self.gcodefile_text = QtGui.QTextEdit(os.path.join(os.path.expanduser('~'), 'test.gcode'))
        self.gcodefile_text.setMinimumWidth(150)
        self.gcodefile_text.setMaximumHeight(30)
        gbvbhb.addWidget(self.gcodefile_text)
        btn = QtGui.QPushButton('...')
        btn.clicked.connect(self._browse_gcodefile)
        gbvbhb.addWidget(btn)
        btn = QtGui.QPushButton('load')
        btn.clicked.connect(self.gcode_load_file)
        gbvbhb.addWidget(btn)
        gbvb.addLayout(gbvbhb)
        
        gbvbhb = QtGui.QHBoxLayout()
        self.gcode_stream_progressbar = QtGui.QProgressBar(self)
        gbvbhb.addWidget(self.gcode_stream_progressbar)
        
        
        btn = QtGui.QPushButton('start streaming')
        btn.clicked.connect(self.gcode_stream_start)
        gbvbhb.addWidget(btn)
        btn = QtGui.QPushButton('stop streaming')
        btn.clicked.connect(self.gcode_stream_stop)
        gbvbhb.addWidget(btn)
        gbvb.addLayout(gbvbhb)
        
        self.gui_eta_info = QtGui.QLabel('--- streaming ETA info ---', self)
        gbvb.addWidget(self.gui_eta_info)
        
        gbvb.addLayout(gbvbhb)
        gb.setLayout(gbvb)
        vbcontrols.addWidget(gb)
        
        gb = QtGui.QGroupBox('')
        gbhb = QtGui.QHBoxLayout()
        
        btn = QtGui.QPushButton('FEED HOLD')
        btn.clicked.connect(self.feed_hold)
        btn.setMinimumHeight(60)
        gbhb.addWidget(btn)
        btn = QtGui.QPushButton('RESUME')
        btn.clicked.connect(self.feed_resume)
        btn.setMinimumHeight(60)
        gbhb.addWidget(btn)
        
        gb.setLayout(gbhb)
        vbcontrols.addWidget(gb)
        
        
        
        hbmain.addLayout(vbcontrols)
        hbmain.setStretch(0,2)
        hbmain.setStretch(1,1)
        hbmain.setStretch(2,1)
        
        self.setLayout(hbmain)
        self.setGeometry(20, 40, 1400, 900)
        self.setWindowTitle('Vplotter Controller')
        self.setStyleSheet("font-size: 12pt")
        self.show()
        self.scan()
        
        self.get_state_timer = QtCore.QTimer()
        self.get_state_timer.timeout.connect(self.gui_get_state)
        self.serial_active = False
        self.gcode_stream_running = False