From f98742e71dbe705c295b62a9abafa2b48b5d4b8b Mon Sep 17 00:00:00 2001
From: unknown <asoalexandros@gmail.com>
Date: Thu, 15 May 2025 15:40:24 +0200
Subject: [PATCH] Better control over the widgets in pyqt

---
 hp4194/cv_qt_inteface.py | 232 ++++++++++++++++++++++++++++-----------
 1 file changed, 166 insertions(+), 66 deletions(-)

diff --git a/hp4194/cv_qt_inteface.py b/hp4194/cv_qt_inteface.py
index 10ec0c4..9fa3f8f 100644
--- a/hp4194/cv_qt_inteface.py
+++ b/hp4194/cv_qt_inteface.py
@@ -17,87 +17,187 @@ class MainWinow(QMainWindow):
     def __init__(self):
         super().__init__()
 
-        widget = QWidget() # Abstarct main widget
-        app_grid = QGridLayout() # App Layout
+        self.widget = QWidget() # Abstarct main widget
+        self.app_grid = QGridLayout() # App Layout
         
         
-        sample_information= QGroupBox("Sample Information")
-        sample_grid = QGridLayout()
+        self.sample_information= QGroupBox("Sample Information") # keep a self reference for later
+        self.sample_grid = QGridLayout()
+
+        # create the actual widgets
+        self.wafer = QLineEdit()
+        self.comment = QLineEdit()
+        self.sample = QLineEdit()
+        self.field = QLineEdit()
+        
+        self.temperature = QSpinBox()
+        self.temperature.setRange(0,2**31-1)
+        self.temperature.setValue(295)
 
-        sample_grid.addWidget(QLabel("Wafer"),0,0)
-        sample_grid.addWidget(QLineEdit(),1,0)
-        sample_grid.addWidget(QLabel("Sample"),2,0)
-        sample_grid.addWidget(QLineEdit(),3,0)
-        sample_grid.addWidget(QLabel("Field"),4,0)
-        sample_grid.addWidget(QLineEdit(),5,0)
 
-        sample_grid.addWidget(QLabel("Comment"),0,1)
-        sample_grid.addWidget(QLineEdit(),1,1)
-        sample_grid.addWidget(QLabel("Temperature (K)"),4,1)
-        sample_grid.addWidget(QSpinBox(),5,1)
+        self.sample_grid.addWidget(QLabel("Wafer"),0,0)
+        self.sample_grid.addWidget(self.wafer,1,0)
+        self.sample_grid.addWidget(QLabel("Sample"),2,0)
+        self.sample_grid.addWidget(self.sample,3,0)
+        self.sample_grid.addWidget(QLabel("Field"),4,0)
+        self.sample_grid.addWidget(self.field,5,0)
+        self.sample_grid.addWidget(QLabel("Comment"),0,1)
+        self.sample_grid.addWidget(self.comment,1,1)
+        self.sample_grid.addWidget(QLabel("Temperature (K)"),4,1)
+        self.sample_grid.addWidget(self.temperature,5,1)
 
-        sample_information.setLayout(sample_grid)
-        app_grid.addWidget(sample_information,0,0)
+        self.sample_information.setLayout(self.sample_grid)
+        self.app_grid.addWidget(self.sample_information,0,0)
 
         # Measuring parameters
-        parameters = QGroupBox("Measurement Parameters")
-        parameters_grid = QVBoxLayout()
-
-        parameters_grid.addWidget(QLabel("U_start"))
-        parameters_grid.addWidget(QDoubleSpinBox())
-        parameters_grid.addWidget(QLabel("U_stop"))
-        parameters_grid.addWidget(QDoubleSpinBox())
-        parameters_grid.addWidget(QLabel("U_step"))
-        parameters_grid.addWidget(QDoubleSpinBox())
-        parameters_grid.addWidget(QLabel("Wait in voltage point"))
-        parameters_grid.addWidget(QDoubleSpinBox())
-        parameters_grid.addWidget(QLabel("Area of the test structure"))
-        parameters_grid.addWidget(QDoubleSpinBox())
-        parameters_grid.addWidget(QLabel("Observed frequency point"))
-        parameters_grid.addWidget(QSpinBox())
-        parameters_grid.addWidget(QLabel("Observed voltage point"))
-        parameters_grid.addWidget(QSpinBox())
-
-        parameters.setLayout(parameters_grid)
-        app_grid.addWidget(parameters,1,0)
+        self.parameters = QGroupBox("Measurement Parameters")
+        self.parameters_grid = QVBoxLayout()
+
+        #create the widgets
+        self.v_start = QDoubleSpinBox()
+        self.v_start.setDecimals(3)
+        self.v_start.setRange(-40,40)
+        self.v_start.setValue(1)
+
+        self.v_stop = QDoubleSpinBox()
+        self.v_stop.setDecimals(3)
+        self.v_stop.setRange(-40,40)
+        self.v_stop.setValue(-3)
+
+        self.v_step = QDoubleSpinBox()
+        self.v_step.setDecimals(3)
+        self.v_step.setRange(-80,80)
+        self.v_step.setValue(0.1)
+
+        self.wait = QDoubleSpinBox()
+        self.wait.setDecimals(3)
+        self.wait.setRange(0,sys.float_info.max)
+        self.wait.setValue(0)
+
+        self.radius= QSpinBox()
+        self.radius.setRange(0,2**31-1)
+        self.radius.setValue(50)
+
+        self.f_point= QSpinBox() # Observed frequency point
+        self.f_point.setRange(1,2**31-1)
+        self.f_point.setValue(1)
+
+        self.v_point = QSpinBox() # observed voltage point
+        self.v_point.setRange(1,2**31-1)
+        self.v_point.setValue(1)
+
+        self.hysterisis = QCheckBox("Measure Hysteris")
+        self.hysterisis.setChecked(False)
+
+
+        # Create the second grid
+        self.parameters_grid.addWidget(QLabel("V_start (V)"))
+        self.parameters_grid.addWidget(self.v_start)
+        self.parameters_grid.addWidget(QLabel("V_stop (V)"))
+        self.parameters_grid.addWidget(self.v_stop)
+        self.parameters_grid.addWidget(QLabel("V_step (V)"))
+        self.parameters_grid.addWidget(self.v_step)
+        self.parameters_grid.addWidget(QLabel("Wait in voltage point (s)"))
+        self.parameters_grid.addWidget(self.wait)
+        self.parameters_grid.addWidget(QLabel("Radius of the test structure (um)"))
+        self.parameters_grid.addWidget(self.radius)
+        self.parameters_grid.addWidget(QLabel("Observed frequency point"))
+        self.parameters_grid.addWidget(self.f_point)
+        self.parameters_grid.addWidget(QLabel("Observed voltage point"))
+        self.parameters_grid.addWidget(self.v_point)
+        self.parameters_grid.addWidget(self.hysterisis)
+
+
+        self.parameters.setLayout(self.parameters_grid)
+        self.app_grid.addWidget(self.parameters,1,0)
 
         # Sweep Parameters
-        sweep = QGroupBox("Sweep Parameters")
-        sweep_grid = QGridLayout()
-
-        sweep_grid.addWidget(QLabel("Number of frequency points"),0,0)
-        sweep_grid.addWidget(QSpinBox(),1,0)
-        sweep_grid.addWidget(QLabel("f_start (Hz)"),2,0)
-        sweep_grid.addWidget(QDoubleSpinBox(),3,0)
-        sweep_grid.addWidget(QLabel("f_stop (Hz)"),4,0)
-        sweep_grid.addWidget(QDoubleSpinBox(),5,0)
-        sweep_grid.addWidget(QLabel("Sweep Type"),6,0) # here sweep direction
-        sweep_grid.addWidget(QComboBox(),7,0)
-        sweep_grid.addWidget(QLabel("Integration Time"),8,0) 
-        sweep_grid.addWidget(QComboBox(),9,0)
-
-        sweep_grid.addWidget(QLabel("Delay(ms)"),0,1)
-        sweep_grid.addWidget(QDoubleSpinBox(),1,1)
-        sweep_grid.addWidget(QLabel("Delay Apperture"),2,1)
-        sweep_grid.addWidget(QDoubleSpinBox(),3,1)
-
-        sweep_grid.addWidget(QLabel("Sweep direction"),6,1) 
-        sweep_grid.addWidget(QComboBox(),7,1)
-        sweep_grid.addWidget(QLabel("Averaging Number"),8,1) 
-        sweep_grid.addWidget(QComboBox(),9,1)
-
-        sweep.setLayout(sweep_grid)
-        app_grid.addWidget(sweep,2,0)
+        self.sweep = QGroupBox("Sweep Parameters")
+        self.sweep_grid = QGridLayout()
+
+        #create the widgets
+        self.points = QDoubleSpinBox()
+        self.points.setDecimals(3)
+        self.points.setRange(1,401)
+        self.points.setValue(4)
+
+
+        self.f_start = QDoubleSpinBox()
+        self.f_start.setDecimals(3)
+        self.f_start.setRange(100,40e6)
+        self.f_start.setValue(100000)
+
+        self.f_stop = QDoubleSpinBox()
+        self.f_stop.setDecimals(3)
+        self.f_stop.setRange(100,40e6)
+        self.f_stop.setValue(1000000)
+
+        self.osc = QDoubleSpinBox()
+        self.osc.setDecimals(3)
+        self.osc.setRange(10e-3,1)
+        self.osc.setValue(0.5)
+
+        self.sweep_type = QComboBox()
+        self.sweep_type.insertItems(0,["Logarithmic","Linear"])
+        self.sweep_type.setCurrentText("Linear")
+
+        self.integration = QComboBox()
+        self.integration.insertItems(0,["Short","Medium","Long"])
+        self.integration.setCurrentText("Medium")
+
+        self.delay = QDoubleSpinBox()
+        self.delay.setDecimals(3)
+        self.delay.setRange(0,3.6e6)
+        self.delay.setValue(0)
+
+        self.apperture = QDoubleSpinBox()
+        self.apperture.setDecimals(3)
+        self.apperture.setRange(0.5,100)
+        self.apperture.setValue(0.5)
+
+        self.sweep_direction = QComboBox()
+        self.sweep_direction.insertItems(0,["Up","Down"])
+        self.sweep_direction.setCurrentText("Up")
+
+        self.averaging = QComboBox() 
+        self.averaging.insertItems(0,[str(2**i) for i in range(9)])
+        self.averaging.setCurrentText("4")
+
+        self.sweep_grid.addWidget(QLabel("Number of frequency points"),0,0)
+        self.sweep_grid.addWidget(self.points,1,0)
+        self.sweep_grid.addWidget(QLabel("f_start (Hz)"),2,0)
+        self.sweep_grid.addWidget(self.f_start,3,0)
+        self.sweep_grid.addWidget(QLabel("f_stop (Hz)"),4,0)
+        self.sweep_grid.addWidget(self.f_stop,5,0)
+        self.sweep_grid.addWidget(QLabel("OSC level (V)"),6,0)
+        self.sweep_grid.addWidget(self.osc,7,0)
+        self.sweep_grid.addWidget(QLabel("Sweep Type"),8,0) # here sweep direction
+        self.sweep_grid.addWidget(self.sweep_type,9,0)
+        self.sweep_grid.addWidget(QLabel("Integration Time"),10,0) 
+        self.sweep_grid.addWidget(self.integration,11,0)
+
+        self.sweep_grid.addWidget(QLabel("Delay (ms)"),0,1)
+        self.sweep_grid.addWidget(self.delay,1,1)
+        self.sweep_grid.addWidget(QLabel("Delay Apperture (%)"),2,1)
+        self.sweep_grid.addWidget(self.apperture,3,1)
+
+        self.sweep_grid.addWidget(QLabel("Sweep direction"),8,1) 
+        self.sweep_grid.addWidget(self.sweep_direction,9,1)
+        self.sweep_grid.addWidget(QLabel("Averaging Number"),10,1) 
+        self.sweep_grid.addWidget(self.averaging,11,1)
+
+        self.sweep.setLayout(self.sweep_grid)
+        self.app_grid.addWidget(self.sweep,2,0)
 
         # add the plot below
         sc = MplCanvas(self,width=10,height=8,dpi=100)
         sc.axes.plot([0,1,2,3,4],[10,1,20,3,40])
 
-        app_grid.addWidget(sc,0,1,3,1)
+        self.app_grid.addWidget(sc,0,1,3,1)
 
-        widget.setLayout(app_grid)
-        self.setCentralWidget(widget)
-        self.show()
+        self.widget.setLayout(self.app_grid)
+        self.setCentralWidget(self.widget)
+        self.showMaximized()
 
 app= QApplication(sys.argv)
 w= MainWinow()
-- 
GitLab