#!/usr/bin/env python3 """Script for Tkinter GUI chat client.""" from socket import AF_INET, socket, SOCK_STREAM from threading import Thread import tkinter def receive(): """Handles receiving of messages.""" while True: try: msg = client_socket.recv(BUFSIZ).decode("utf8") msg_list.insert(tkinter.END, msg) except OSError: # Possibly client has left the chat. break def send(event=None): # event is passed by binders. """Handles sending of messages.""" msg = my_msg.get() my_msg.set("") # Clears input field. client_socket.send(bytes(msg, "utf8")) if msg == "{quit}": client_socket.close() top.quit() def on_closing(event=None): """This function is to be called when the window is closed.""" my_msg.set("{quit}") send() def start_messenger(event=None): messengerstart_button.pack_forget() background_label.pack_forget() scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) msg_list.pack(side=tkinter.LEFT) msg_list.pack() messages_frame.pack() entry_field.pack(fill=tkinter.X) send_button.pack(fill=tkinter.X) top = tkinter.Tk() top.title("Brieftaube") #top.attributes('-fullscreen', True) top["bg"]="red3" #canvas = tkinter.Canvas(top, #width=300, #height=300) #canvas.pack(side=tkinter.BOTTOM, fill=tkinter.BOTH) img = tkinter.PhotoImage(file="Smiley.ppm") #canvas.create_image(200,200, image=img) background_label = tkinter.Label(top, image=img) background_label.place(x=0, y=0, relwidth=1, relheight=1) #background_label["bg"] = "black" background_label.pack() messengerstart_button = tkinter.Button(top, text="Start", command=start_messenger, activebackground="red3", bg="black", fg="red3", font="C059") messengerstart_button.pack(fill=tkinter.X) messages_frame = tkinter.Frame(top) my_msg = tkinter.StringVar() # For the messages to be sent. my_msg.set("") scrollbar = tkinter.Scrollbar(messages_frame, activebackground="red3", bg="black") # To navigate through past messages. # Following will contain the messages. msg_list = tkinter.Listbox(messages_frame, background="black", fg="red3", height=20, width=50, yscrollcommand=scrollbar.set) #canvas.pack() entry_field = tkinter.Entry(top, textvariable=my_msg, bg="black", fg="red3") entry_field.bind("", send) send_button = tkinter.Button(top, text="SEND", command=send, activebackground="red3", bg="black", fg="red3", font="C059") top.protocol("WM_DELETE_WINDOW", on_closing) #----Now comes the sockets part---- HOST = input('Enter host: ') PORT = input('Enter port: ') if not PORT: PORT = 33000 else: PORT = int(PORT) BUFSIZ = 1024 ADDR = (HOST, PORT) client_socket = socket(AF_INET, SOCK_STREAM) client_socket.connect(ADDR) receive_thread = Thread(target=receive) receive_thread.start() tkinter.mainloop() # Starts GUI execution.