Archived
1
0
Fork 0
This repository has been archived on 2024-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
PyTchat/gui.py

75 lines
1.9 KiB
Python
Raw Normal View History

from tkinter import Tk, Frame, Scrollbar, Label, Text, Button, Entry, StringVar, IntVar
from tkinter.messagebox import showerror
from client import Client
from threading import Thread
def on_closing():
try:
client.quit()
except NameError:
pass
def start():
if host.get() and port.get():
try:
global client
client = Client(host.get(), port.get())
except ConnectionError:
2019-07-19 18:36:45 +02:00
showerror("Error", "can't connect to server !")
else:
login.destroy()
def receive():
while True:
msg = client.receive_server()
if msg.lower() == "quit":
break
if msg[-1:] != "\n":
msg += "\n"
chat_message.configure(state="normal")
chat_message.insert("end", msg)
chat_message.configure(state="disable")
def send(event=None):
client.send_server(message.get())
if message.get().lower() == "quit":
tchat.destroy()
message.set("")
login = Tk()
login.title("Login")
host = StringVar()
port = IntVar()
Label(login, text="Host & port:").pack()
login_f = Frame(login)
login_f.pack()
Entry(login_f, textvariable=host, width=14).grid(row=0, column=0)
Entry(login_f, textvariable=port, width=4).grid(row=0, column=1)
Button(login, text="Submit", command=start).pack()
login.mainloop()
tchat = Tk()
tchat.title("PyTchat")
tchat.protocol("WM_DELETE_WINDOW", on_closing)
chat = Frame(tchat)
chat.pack()
scrollbar = Scrollbar(chat)
scrollbar.pack(side="right", fill="y")
chat_message = Text(chat, height=15, width=50, yscrollcommand=scrollbar.set, state="disable")
chat_message.pack(side="left", fill="both")
Thread(target=receive).start()
entry = Frame(tchat)
entry.pack()
message = StringVar()
field = Entry(entry, textvariable=message)
field.bind("<Return>", send)
field.grid(row=0, column=0)
Button(entry, text="Send", command=send).grid(row=0, column=1)
tchat.mainloop()