When i try to run this code and to connect to server (server is written in java that part of code is ok) everything stalls. Thread that i created here occupies processor all the time and GUI freezes. It's supposed to be waiting for message from server. (asynchronous one) Is there something that i did wrong here, or is there better way to do this?
from tkinter import * from threading import * import time import socket import sys comPort=0 msg="" name=socket.gethostbyname(socket.gethostname()) sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM) testArea=0 thread=0 def threadFunc(): global sock global textArea data="" while(data==""): try: data=str((sock.recvfrom(256)),"UTF-8") except BlockingIOError: print("failed") time.sleep(1) data="" textArea.add((data+"\n")) def sendMsg(): global sock message=name+": "+msg.get()+"\n" sock.send(bytes(message,"UTF-8")) def aboutCommand(): messagebox.showinfo(title="About",message="This is first (serious) aplication in python.") def helpCommand(): messagebox.showinfo(title="Help",message="BAZINGA!") def Connect(): global sock global thread sock.connect((serverIPString.get(), 16000)) sock.send(bytes("#connect request#\n",'UTF-8')) data=sock.recvfrom(256) reply=str(data[0],"UTF-8") answer=(reply.split("#",3)) if(answer[1]!="connected"): messagebox.showinfo(title="Error",message="Connection failed!") return sock.close(); sock=None comPort=int(answer[2]) #for new connection sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((serverIPString.get(), comPort)) sock.setblocking(0) thread=Thread(target=threadFunc()) thread.start() def Disconnect(): global sock sock.send(bytes("#END#\n","UTF-8")) sock.close() def ExitApplication(): Disconnect() mGui.destroy() return mGui=Tk() msg=StringVar() serverIPString=StringVar() mGui.geometry("400x600+200+20") mGui.title("Chat client v1.0") labServer=Label(mGui,text="Server IP adress: ").pack() entServer=Entry(mGui,textvariable=serverIPString).pack() btnConnect=Button(mGui,text="Connect",fg="red",bg="blue",command=Connect).pack() btnDisconnect=Button(mGui,text="Disconnect",fg="red",bg="blue",command=Disconnect).pack() textArea=Text(mGui,bg="yellow").pack() entMessage=Entry(mGui,textvariable=msg).pack() btnSendMsg=Button(mGui,text="Send message",fg="white",bg="black",command=sendMsg).pack() menuBar=Menu(mGui) fileMenu=Menu(menuBar,tearoff=0) fileMenu.add_command(label="Exit",command=ExitApplication) menuBar.add_cascade(label="File",menu=fileMenu) optionsMenu=Menu(menuBar,tearoff=0) optionsMenu.add_command(label="Change chat name") optionsMenu.add_command(label="Connect",command=Connect) optionsMenu.add_command(label="Disconnect",command=Disconnect) menuBar.add_cascade(label="Options",menu=optionsMenu) helpMenu=Menu(menuBar,tearoff=0) helpMenu.add_command(label="Help",command=helpCommand) helpMenu.add_command(label="About",command=aboutCommand) menuBar.add_cascade(label="Info",menu=helpMenu) mGui.config(menu=menuBar) mGui.mainloop() -- http://mail.python.org/mailman/listinfo/python-list