ich scheitere an dem Punkt, dem Server-thread meine Queue q mitzugeben. Problem in Zeile 34.
die __init__ gehört zum Originalbeispiel nicht dazu, die habe ich reingebastelt, ich vermute aber so in dieses Richtung müsste man das machen?
Wie gesagt, ich finde einfach keinen Weg die Queue beim erstellen mitzugeben.
mein Ziel: Ich möchte eigentlich nur die empfangenen Daten des UDP-Server (data) aus der Klasse 'MyUdpHandler' an die Klasse 'mainWindow' weiterreichen.
Aber ich finde nicht raus wie ich diese Queue hier reinbauen muss. Was hab ich hier nur wieder nicht richtig gemacht?
Code: Alles auswählen
#socketserverUDP von docs.python.org
from socketserver import BaseRequestHandler, UDPServer
from threading import Thread
from queue import Queue, Empty
from tkinter import Tk, Label
class MyUdpHandler(BaseRequestHandler):
def __init__(self, request, client_address, server, myQueue):
BaseRequestHandler.__init__(self, request, client_address, server)
self.q = myQueue
pass
def handle(self):
self.data = self.request[0].strip()
## socket = self.request[1]
print("[{}] - {} - {}".format(self.client_address[0], self.client_address[1], self.data.decode()))
class mainWindow(Tk):
def __init__(self, q):
self.q = q
Tk.__init__(self)
self.labelData = Label(self, text='-----')
self.labelData.pack()
self.mainloop()
if __name__ == "__main__":
q = Queue()
## Serverstart als eigener Thread ------------------------------------
HOST, PORT = "", 51456
server = UDPServer((HOST, PORT), MyUdpHandler)
serverThread = Thread(target=server.serve_forever, myQueue=(q))
serverThread.start()
## Ende Serverstart
## Starte Fenster ----------------------------------------------------
mainWindowThread = Thread(target=mainWindow, args=(q,)).start()
## Ende Start Fenster
Traceback (most recent call last):
File "C:/socketserver_01g_QueueQueue.py", line 34, in <module>
serverThread = Thread(target=server.serve_forever, myQueue=(q))
TypeError: __init__() got an unexpected keyword argument 'myQueue'
Process finished with exit code 1
Vielen Dank