Bonjour,
Mon programme ouvre une fenêtre principale, et dans la foulée une boite de dialogue qui attend la validation d'un paramètre (str). Une fois ce paramètre obtenu, la boite de dialogue se ferme. J'aimerais ensuite que le code de la fenêtre principale utilise ce paramètre. Avec le code que j'ai écrit, utilisant signal et slot, le code de la fenêtre principale continue à se dérouler bien avant que je reçoive le paramètre, que je ne peux donc pas utiliser. Pour le démontrer, j'ai placé 3 print que j'aimerais voir s'afficher dans l'ordre 1, 2 (validation), 3 (utilisation), mais hélas ils s'affichent 1, 3, 2.
Je souhaiterais donc que le code de la fenêtre principale se mette en pause jusqu'à réception du paramètre. Merci de votre aide.

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
77
78
79
80
 
from PyQt5.QtWidgets import QMainWindow, QWidget # ,QApplication
from  PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject
import win_tbite as ihm
import widg_config
import serial.tools.list_ports
 
class myInterface(QMainWindow, ihm.Ui_MainWin):
    '''
    Dessine l'interface graphique principale
    '''
 
    def __init__(self):
        super(myInterface, self).__init__()
        self.setupUi(self)
        self.show()         # ouvre la fenêtre principale
        self.newConnect()
        print('3 port: {}'.format(self.portName)) 
 
    def newConnect(self):
        self.myWidgConf = myFormConfig()
        self.portName = ''
        self.myWidgConf.widgSign.connect(self.recupParam)
        self.myWidgConf.show()
        print('1 port: {}'.format(self.portName)) 
 
    @pyqtSlot('QString')
    def recupParam(self, param):
        '''
        Parameters
        ----------
        param : TYPE str
        DESCRIPTION. le nom du port
        Returns  None.
        -------
        '''
        self.portName = param
        print('2 port: {}'.format(self.portName))
 
    def sendCmd():
        pass
 
    def disConnect():
        pass
 
class myFormConfig(QWidget, widg_config.Ui_FormConfig):
    '''
    Dessine le formulaire de configuration du port
    '''
    widgSign = pyqtSignal(str)
 
    def __init__(self):
        super(myFormConfig, self).__init__()
        self.setupUi(self)
        self.detectPort()
 
    def detectPort(self):
        ports = serial.tools.list_ports.comports()
        listPorts = []
        listDec = []
        for port, dec, hwid in sorted(ports):
            listPorts.append(port)
            listDec.append(dec)
        for i in range (len(listDec)):
            self.cbPortSelect.addItem(listDec[i])
        self.cbPortSelect.setEditable(False)
        if listPorts != []:
            self.myPort = listPorts[self.cbPortSelect.currentIndex()]
        else:
            self.myPort = ''
 
    def configOk(self):
        '''
        Appelé lors du clic sur le poussoir OK
                Envoie en signal le nom du port (string)
        '''
        # renvoie le nom du port
        self.widgSign.emit(self.myPort)
        # ferme le widget
        self.close()