Seite 1 von 1

Problem: pySerial Status abfragen und an GUI weitergeben

Verfasst: Mittwoch 18. September 2013, 14:53
von MattiBo
Hallo Leute,

ich möchte gerne mein Python Programm mit dem Arduino über pySerial koppeln. Dies klappt alles wunderbar. Über einen separaten Thread wird über eine while-Schleife der COM-Port abgefragt. Dies klappt schon alles hervorragend. Nun möchte ich allerdings die Verbindung überprüfen und eine optische Rückmeldung an das GUI geben. Ich möchte also feststellen, ob der Arduino noch am PC angeschlossen ist, bzw. ob überhaupt noch Daten empfangen werden können. Ich habe dies über die "isOpen()" Funktion der pySerial API probiert, allerdings gibt diese ständig die Rückgabe True, obwohl ich den Arduino abgezogen habe. Gibt es eine andere Möglichkeit dieses festzustellen?

Desweiteren möchte ich diesen Wert gerne an das GUI weitergeben. Ich übergebe diesen Wert mit Hilfe eines Events (siehe: http://www.valuedlessons.com/2008/04/ev ... ython.html). Das GUI ändert sich entsprechend, allerdings wirft Eclipse den folgenden Fehler:

Code: Alles auswählen

QObject::connect: Cannot queue arguments of type 'QModelIndex'
(Make sure 'QModelIndex' is registered using qRegisterMetaType().)
QObject::connect: Cannot queue arguments of type 'QModelIndex'
(Make sure 'QModelIndex' is registered using qRegisterMetaType().)
Wie kann man diesen Fehler beheben? Liegt es eventuell daran, dass sich der Rückgabewert in dem Arduino Thread befindet und ich das GUI nur im Main Thread ändern kann?

Ich hoffe, ihr könnt mir diesbezüglich helfen.
Gruß Matti

Re: Problem: pySerial Status abfragen und an GUI weitergeben

Verfasst: Mittwoch 18. September 2013, 14:58
von BlackJack
@MattiBo: Der Event-Mechanismus von Qt sind Signale und Slots. Da musst Du nicht noch selber eine `Event`-Klasse erfinden. Das ist wahrscheinlich auch der Grund warum es in Python so etwas nicht wirklich „solo” gibt: Dort wo man ereignisbasierte Programmierung braucht, bringt das entsprechende Rahmenwerk schon alles dafür mit. Signale/Slots sollten auch threadsafe sein.