Bonjour,

Je voudrais récupérer dans une interface PyQt les messages mavlink envoyé par un robot.

J'ai écrit un composant de type QWidget avec un label, et ce label doit être mis à jour à chaque fois que l'appli reçoit un message mavlink. Pour ça, j'ai une méthode update() dans mon composant.

Ensuite dans mon main :

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
if __name__ == '__main__':
    app = QApplication(sys.argv)
    cb = MonComposant()
 
    w = QWidget()
    layout = QHBoxLayout()
    layout.addWidget(cb)
    w.setLayout(layout)
 
    w.show()
 
    master = mavutil.mavlink_connection(url_de_connexion)
    master.wait_heartbeat()
    master.mav.param_request_list_send(master.target_system, master.target_component)
 
    while True:
        try:
            #pass
            ack_msg2 = master.recv_match(type=['NAMED_VALUE_FLOAT',
                                               'SERVO_OUTPUT_RAW',
                                               'RC_CHANNELS',
                                               'HEARTBEAT',
                                               'VFR_HUD',
                                               'SYS_STATUS',
                                               'SCALED_PRESSURE2',
                                               'CAMERA_CAPTURE_STATUS'], blocking=True)
            ack_msg2 = ack_msg2.to_dict()
 
            if ack_msg2['mavpackettype'] == 'SYS_STATUS':
                # Niveau batterie
                print('mavpackettype == SYS_STATUS', 'voltage_battery=', ack_msg2['voltage_battery'])
                cb.update(round(ack_msg2['voltage_battery'] / 1000, 2))
 
        except:
            pass
 
    sys.exit(app.exec_())
Si j'affiche mon composant sans la connexion mavlink, il s'affiche bien.
Mais si je lance avec la connexion, j'ai bien les messages mavlink qui s'affichent dans la console (commande print), mais pour l'affichage du widget, j'ai juste une fenêtre avec un fond blanc, le label qui doit être mis à jour avec le message mavlink ne s'affiche pas.

Pourquoi ?
Est-ce qu'il faut utiliser des threads? et si oui, comment faire ça ?

Merci,
Nico