Bonjour à tous,
Je reviens vers vous car j'ai un petit problème. Je m'explique car j'ai eu du mal à trouver un nom pertinent.
Je laisse la possibilité dans mon soft aux utilisateurs d'écrire leur propre script en python et de les charger via l'IHM. Pour cela j'ai une classe script qui vient exécuter le fichier (avec exec). Pour garder la gestion de mon IHM, je leur fournis des fonctions tel que l'envoi d'une commande (sendCommand), l'écriture à une adresse (write)...
Ces fonctions émettent le signal qui va bien pour ensuite dispatcher les actions (affichage dans un widget de message, affichage des données dans un autre Dock... etc).
Mon problème est que l'appelle de la fonction exec avec le fichier associé s'exécute bien mais cela 'bloc' le soft et à la fin de l'exécution seulement je vois les infos apparaitre un peu partout.
Ce que je voudrais c'est que cela s'exécute comme si j'avais dans mon code sendCommand("toto"), pause sendCommand("toto") avec tout le reste de mon IHM qui se met à jour au fur et à mesure et non d'un coup à la fin.
Je me dis que le problème viens peut etre de mon pause, je regarde le truc...
Voici mon code:
et mon fichier test:
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 class Script2(QObject): def __init__(self, filename, signalSendCommand): super(Script2, self).__init__() self.createConnections(signalSendCommand) self.file = QFile(filename) if self.file.open(QIODevice.ReadOnly | QIODevice.Text): if '.py' in filename: exec(self.file.readAll()) # ------------------------------------------------------------------ # Methods def createConnections(self, signalSendCommand): self.signalSendCommand.connect(signalSendCommand) def sendCommand(self, command): self.signalSendCommand.emit(bytes(command + '\n', 'utf-8')) def pause(self, t = 1000): time.sleep(t / 1000)
Merci a tous et bonne journée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 self.write(0x2000, 0x00, 'b') self.pause(1000) self.read(0x2000, 'b', 1) self.pause(1000) self.read(0x2000, 'b', 1) self.pause(1000) self.read(0x2000, 'b', 1) self.pause(1000) self.read(0x2000, 'b', 1)
Bastien
Partager