Question

Je veux faire une application à regarder en permanence le port série et en changeant l'interface utilisateur en fonction de l'entrée reçue du port. J'ai réussi à lire des lignes du port avec pyserial sous Linux, mais je ne suis pas sûr de savoir comment faire cela de façon régulière: créer un thread séparé et vérifier pour l'entrée sur un événement de minuterie? Comment puis-je assurer que je ne manque rien? (Mise en œuvre une sorte de poignée de main / protocole semble comme un surpuissant pour cela ...) Et surtout: comment dois-je faire avec les installations de Qt4

Modifier Voici ce que je fais maintenant (je veux le faire périodiquement avec le reste de la course d'application et ne pas attendre)

class MessageBox(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        ser = serial.Serial('/dev/ttyS0', 9600, bytesize=serial.EIGHTBITS,
        parity=serial.PARITY_NONE,     
        stopbits=serial.STOPBITS_ONE, 
        timeout=None,           
        xonxoff=0,              
        rtscts=0,
        interCharTimeout=None)

        self.label = QtGui.QLabel(ser.readline(), self)
        self.label.move(15, 10)
        ser.close()
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Authentication')

        self.color = QtGui.QColor(0, 0, 0) 

        self.square = QtGui.QWidget(self)
        self.square.setGeometry(120, 20, 100, 100)
        self.square.setStyleSheet("QWidget { background-color: %s }" % self.color.name())
Était-ce utile?

La solution

Vous ne manquerez aucun octets, une entrée en attente est tamponne.

Vous avez plusieurs options:

  1. utiliser un fil qui interroge le port série avec pyserial / inWaiting ()

  2. Utilisez une minuterie dans le thread principal qui interroge le port série avec pyserial / inWaiting.

  3. trouver la poignée du port et de le transmettre à QSocketNotifier. Cela ne fonctionne que sur linux, mais dans ce cas, QSocketNotifier regardera le fichier associé à votre port série et d'envoyer un signal quand il y a quelque chose de disponible.

Méthode 2 et 3 sont mieux parce que vous n'avez pas besoin d'un fil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top