Bonjour,
désolé si je suis pas très clair dans mes explications mais je débute avec python et pyqt5.

Pour mon boulot je souhaite utiliser un spectromètre sous python, qui utilise obligatoirement (d'après ce que j'ai compris) une interface graphique pour activer la communication, lancer des mesures.... Or, pour effectuer des mesures je ne souhaite pas cliquer à chaque fois sur le bouton "start measurements". Ma question est donc: comment faire pour appeler une fonction liée à un widget sans cliquer sur ce widget? Ou sinon, existe-t-il une commande pour simuler le clic sur un bouton?
Je joins ci-dessous le code de création de l'interface graphique, ainsi que le code associant à cette interface les fonctions utiles au spectromètre.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(679, 462)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.OpenCommBtn = QtWidgets.QPushButton(self.centralwidget)
        self.OpenCommBtn.setGeometry(QtCore.QRect(30, 50, 141, 23))
        self.OpenCommBtn.setObjectName("OpenCommBtn")
        self.CloseCommBtn = QtWidgets.QPushButton(self.centralwidget)
        self.CloseCommBtn.setGeometry(QtCore.QRect(30, 90, 141, 23))
        self.CloseCommBtn.setObjectName("CloseCommBtn")
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setGeometry(QtCore.QRect(30, 150, 141, 191))
        self.groupBox.setObjectName("groupBox")
        self.IntTimeEdt = QtWidgets.QLineEdit(self.groupBox)
        self.IntTimeEdt.setGeometry(QtCore.QRect(10, 50, 51, 20))
        self.IntTimeEdt.setObjectName("IntTimeEdt")
        self.NumAvgEdt = QtWidgets.QLineEdit(self.groupBox)
        self.NumAvgEdt.setGeometry(QtCore.QRect(10, 100, 51, 20))
        self.NumAvgEdt.setObjectName("NumAvgEdt")
        self.NumMeasEdt = QtWidgets.QLineEdit(self.groupBox)
        self.NumMeasEdt.setGeometry(QtCore.QRect(10, 150, 51, 20))
        self.NumMeasEdt.setObjectName("NumMeasEdt")
        self.label = QtWidgets.QLabel(self.groupBox)
        self.label.setGeometry(QtCore.QRect(10, 30, 111, 16))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.groupBox)
        self.label_2.setGeometry(QtCore.QRect(10, 80, 111, 16))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.groupBox)
        self.label_3.setGeometry(QtCore.QRect(10, 130, 131, 16))
        self.label_3.setObjectName("label_3")
        self.StartMeasBtn = QtWidgets.QPushButton(self.centralwidget)
        self.StartMeasBtn.setGeometry(QtCore.QRect(30, 370, 141, 23))
        self.StartMeasBtn.setObjectName("StartMeasBtn")
        self.StopMeasBtn = QtWidgets.QPushButton(self.centralwidget)
        self.StopMeasBtn.setGeometry(QtCore.QRect(30, 410, 141, 23))
        self.StopMeasBtn.setObjectName("StopMeasBtn")
        self.plot = RenderArea(self.centralwidget)
        self.plot.setGeometry(QtCore.QRect(190, 50, 471, 391))
        self.plot.setObjectName("plot")
        MainWindow.setCentralWidget(self.centralwidget)
 
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        MainWindow.setTabOrder(self.OpenCommBtn, self.CloseCommBtn)
        MainWindow.setTabOrder(self.CloseCommBtn, self.IntTimeEdt)
        MainWindow.setTabOrder(self.IntTimeEdt, self.NumAvgEdt)
        MainWindow.setTabOrder(self.NumAvgEdt, self.NumMeasEdt)
        MainWindow.setTabOrder(self.NumMeasEdt, self.StartMeasBtn)
        MainWindow.setTabOrder(self.StartMeasBtn, self.StopMeasBtn)
 
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.OpenCommBtn.setText(_translate("MainWindow", "Open Communication"))
        self.CloseCommBtn.setText(_translate("MainWindow", "Close Communication"))
        self.groupBox.setTitle(_translate("MainWindow", "Measurement Parameters"))
        self.label.setText(_translate("MainWindow", "Integration Time [ms]"))
        self.label_2.setText(_translate("MainWindow", "Number of Averages"))
        self.label_3.setText(_translate("MainWindow", "Number of Measurements"))
        self.StartMeasBtn.setText(_translate("MainWindow", "Start Measurements"))
        self.StopMeasBtn.setText(_translate("MainWindow", "Stop Measurements"))
 
from renderarea import RenderArea
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
 
import os
import platform
import sys
import time
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from avaspec import *
import globals
import form1
 
class MainWindow(QMainWindow, form1.Ui_MainWindow):
    newdata = pyqtSignal()
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.IntTimeEdt.setText("{:3.1f}".format(5.0))
        self.NumAvgEdt.setText("{0:d}".format(1))
        self.NumMeasEdt.setText("{0:d}".format(1))
        self.StartMeasBtn.setEnabled(False)
        self.newdata.connect(self.handle_newdata)
 
    @pyqtSlot()
 
    def on_OpenCommBtn_clicked(self):
        ret = AVS_Init(0)    
        ret = AVS_GetNrOfDevices()
        req = 0
        mylist = AvsIdentityType * 1
        ret = AVS_GetList(75, req, mylist)
        serienummer = str(ret[1].SerialNumber.decode("utf-8"))
        QMessageBox.information(self,"Info","Found Serialnumber: " + serienummer)
        globals.dev_handle = AVS_Activate(ret[1])
        devcon = DeviceConfigType
        reqsize = 0
        ret = AVS_GetParameter(globals.dev_handle, 63484, reqsize, devcon)
        globals.pixels = ret[1].m_Detector_m_NrPixels
        self.StartMeasBtn.setEnabled(True)
        return
 
    @pyqtSlot()
 
    def on_StartMeasBtn_clicked(self):
        measconfig = MeasConfigType
        measconfig.m_StartPixel = 0
        measconfig.m_StopPixel = globals.pixels - 1
        measconfig.m_IntegrationTime = float(self.IntTimeEdt.text())
        measconfig.m_IntegrationDelay = 0
        measconfig.m_NrAverages = int(self.NumAvgEdt.text())
        measconfig.m_CorDynDark_m_Enable = 0  # nesting of types does NOT work!!
        measconfig.m_CorDynDark_m_ForgetPercentage = 0
        measconfig.m_Smoothing_m_SmoothPix = 0
        measconfig.m_Smoothing_m_SmoothModel = 0
        measconfig.m_SaturationDetection = 0
        measconfig.m_Trigger_m_Mode = 0
        measconfig.m_Trigger_m_Source = 0
        measconfig.m_Trigger_m_SourceType = 0
        measconfig.m_Control_m_StrobeControl = 0
        measconfig.m_Control_m_LaserDelay = 0
        measconfig.m_Control_m_LaserWidth = 0
        measconfig.m_Control_m_LaserWaveLength = 0.0
        measconfig.m_Control_m_StoreToRam = 0
        ret = AVS_PrepareMeasure(globals.dev_handle, measconfig)
        nummeas = int(self.NumMeasEdt.text())
        ret = AVS_Measure(globals.dev_handle, int(self.winId()), nummeas)
 
        return
 
def main():
    app = QApplication(sys.argv)
    app.lastWindowClosed.connect(app.quit)
    app.setApplicationName("PyQt5 simple demo")
    form = MainWindow()
    form.show()
    app.exec_()
Merci d'avance