-
-
Save yousefazizi1982/150ea8a61560303fe5f10e4d6c7dba6e to your computer and use it in GitHub Desktop.
GUI client script for my chat app
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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() | |
top = tkinter.Tk() | |
top.title("Chatter") | |
messages_frame = tkinter.Frame(top) | |
my_msg = tkinter.StringVar() # For the messages to be sent. | |
my_msg.set("Type your messages here.") | |
scrollbar = tkinter.Scrollbar(messages_frame) # To navigate through past messages. | |
# Following will contain the messages. | |
msg_list = tkinter.Listbox(messages_frame, height=15, width=50, yscrollcommand=scrollbar.set) | |
scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) | |
msg_list.pack(side=tkinter.LEFT, fill=tkinter.BOTH) | |
msg_list.pack() | |
messages_frame.pack() | |
entry_field = tkinter.Entry(top, textvariable=my_msg) | |
entry_field.bind("<Return>", send) | |
entry_field.pack() | |
send_button = tkinter.Button(top, text="Send", command=send) | |
send_button.pack() | |
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. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment