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()
Partager