i made a messenger that works with the socket library. it has 2 sides : server and client. i later decided to make a GUI for it , too. ( with tkinter ) when i was making it , i realized that programs does not work correctly. here :
import socket
from tkinter import *
win = Tk()
win.geometry("300x300")
win.resizable(False,False)
def disc() :
s = socket.socket()
ip = "0.0.0.0"
port = 9999
s.bind((ip,port))
s.listen()
print ('please wait...')
c , addr =s.accept()
print ('someone has joined!')
while True :
msg = input('your message : ' )
c.send(msg.encode('utf8'))
print (c.recv(1024).decode())
lbl_1 = Label(win,text="mychat",bg="light blue")
lbl_1.place(x=130,y=20)
lbl_2 = Label(win,text="your message: ")
lbl_2.place(x=130,y=50)
lbl_3 = Label(win,text="recieved message: ")
lbl_3.place(x=130,y=70)
btn_1 = Button(win,text="make your device discoverable",command=disc)
btn_1.pack()
txt_1 = Text(win)
txt_1.pack()
word = "messages"
txt_1.insert(END, word)
win.mainloop()
here , you can see what i've tried. i have two parts : the socket part and the gui part. the socket part is in the def block. but this does not work correctly. if you put the mainloop before socket part , it will never be executed because mainloop is not finished until i close the program.
if you put main loop after socket part , the GUI will not be displayed until someone join the server.(because socket part is not finished)
here , you see i've tried another thing. i put the socket part in def and then made a button for it. but this doesn't work either. when you press the button , the program stops and gives a ( not responding ) error on title bar . ( so until someone has joined , it will not respond. )
i want a solution for this code that the GUI part works and doesn't care to socket part(dismissing it). in other words , python executes the 2 parts in one time.