PyQt: QtNetwork / Signals

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
schnupp
User
Beiträge: 19
Registriert: Samstag 24. Januar 2009, 17:30
Wohnort: Hamburg

Sonntag 29. März 2009, 17:21

Hallo,

ich will einen Netzwerkclient erstellen, der an einem Socket horcht, von Zeit zu Zeit Daten im Hintergrund empfängt und in der GUI anzeigt.
Jemand hatte hier im Forum QtNetwork empfohlen, da man ggf. um Threads herum kommt.
Das ganz sieht bislang schlicht so aus:

Code: Alles auswählen

...
class MeinDialog(QtGui.QDialog, Dlg):
   def __init__(self):
      QtGui.QDialog.__init__(self)
      self.setupUi(self)

      self.socket = QtNetwork.QTcpSocket()
      self.socket.connectToHost(HOST_ADDRESS, PORT, QtCore.QIODevice.ReadOnly)
      self.connect(self.socket, QtCore.SIGNAL("connected()"), self.pok)
...
Was mir jetzt aber fehlt ist der eigentliche Schritt die Daten im Hintergrund zu lesen und z.B. per Signal an die GUI zu geben.
So eine Funktion unterbricht natürlich sofort den Programmablauf:

Code: Alles auswählen

def pok(self):
      print "Ok!"
      print self.socket.readLineData(1024)
Kann mir jemand einen Tipp geben?

Viele Grüße
Frank
jerch
User
Beiträge: 1630
Registriert: Mittwoch 4. März 2009, 14:19

Sonntag 29. März 2009, 20:07

QTcpSocket() kennt ein Signal readyRead(), das immer dann auslöst, wenn neue Daten anliegen und der verbundene Slot nicht aktiv ist.

Code: Alles auswählen

self.connect(self.socket, QtCore.SIGNAL("readyRead()"), self.readSocketData)
...
def readSocketData(self):
  # lesen und darstellen
schnupp
User
Beiträge: 19
Registriert: Samstag 24. Januar 2009, 17:30
Wohnort: Hamburg

Sonntag 29. März 2009, 20:48

Danke! Funktioniert perfekt ... 8)
Antworten