-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver_window.py
More file actions
131 lines (101 loc) · 3.96 KB
/
server_window.py
File metadata and controls
131 lines (101 loc) · 3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import tkinter
from tkinter import ttk
import file_handler
import threading
from connection import Connection
fh = file_handler.File_Handler("data.txt")
fh.create_new_file()
myServer = Connection()
myServer.init_as_server()
myServer.accept_client_connection()
myServer.send_json_array(fh.read_json_array())
window = tkinter.Tk()
window.title("Server Window")
window.geometry("400x300")
def mesg_entered(a = None):
msg = enter_message_text.get()
if msg == "":
return
enter_message_text.delete(0, tkinter.END)
print(f'Entered text: {msg}')
fh.append_json_data({"index": fh.get_last_json()['index']+1, "sender": "server", "message": msg})
myServer.send_json_array(fh.read_json_array())
read_and_update_data()
def meg_recv():
while True:
recv_mesg = myServer.recv_mesg()
if recv_mesg =="":
return
if recv_mesg.startswith("DELETE"):
delete_request_index = recv_mesg.split(':')[1].strip()
# print(recv_mesg)
# print(delete_request_index)
# print(f'Delete requrest: {delete_request_index}')
fh.del_json_with_index(int(delete_request_index))
myServer.send_json_array(fh.read_json_array())
else:
fh.append_json_data({"index": fh.get_last_json()['index']+1, "sender": "client", "message": recv_mesg})
myServer.send_json_array(fh.read_json_array())
read_and_update_data()
enter_text_label = tkinter.Label(window, text="Enter text:")
enter_text_label.pack()
enter_message_text = tkinter.Entry(window)
enter_message_text.pack()
message_send_button = tkinter.Button(window, text="send", command=mesg_entered)
message_send_button.pack()
scrollbar = ttk.Scrollbar(window)
scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y)
canvas = tkinter.Canvas(window, yscrollcommand=scrollbar.set)
canvas.pack(side=tkinter.LEFT, fill=tkinter.BOTH, expand=True)
scrollbar.config(command=canvas.yview)
frame = tkinter.ttk.Frame(canvas)
canvas.create_window((0, 0), window=frame, anchor=tkinter.NW)
class Chat:
def __init__(self,frame,ind,send,msg,row):
self.ind = ind
self.send = send
self.msg = msg
self.frame = frame
self.row = row
label = ttk.Label(self.frame, text=f'index: {self.ind}, sender: {self.send}, message: {self.msg}')
label.grid(row=self.row, column=0, padx=10, pady=5, sticky=tkinter.W)
# del_key_button = tkinter.Button(frame, text="del", command=lambda: del_msg(d["index"]))
del_button = tkinter.Button(self.frame, text="del")
del_button.config(command=lambda : self.del_msg(self.ind))
del_button.grid(row=self.row, column=1, padx=10, pady=5, sticky=tkinter.W)
def del_msg(self,ind):
del_msg(ind)
# print(f'Delete called for : {ind}')
def del_msg(ind):
# print(f'Delete called for : {ind}')
fh.del_json_with_index(ind)
myServer.send_json_array(fh.read_json_array())
read_and_update_data()
def populate_frame(data):
# Clear the frame
for widget in frame.winfo_children():
widget.destroy()
# Iterate over the JSON data and create labels for each key-value pair
row = fh.get_len_of_json_array()
for d in data:
c = Chat(frame,d["index"], d["sender"],d["message"],row)
row -= 1
# Function to read and update JSON data from file
def read_and_update_data():
# Load the JSON data from a file (replace with your own JSON file)
# nfh = fh("data.txt")
data = fh.read_json_array()
# Populate the frame with the JSON data
populate_frame(data)
# Update the scrollable area
frame.update_idletasks()
canvas.configure(scrollregion=canvas.bbox("all"))
# Schedule the next update after 1 second
# window.after(100, read_and_update_data)
# Start the initial read and update process
read_and_update_data()
window.bind("<Return>", mesg_entered)
recv_thread = threading.Thread(target=meg_recv)
recv_thread.daemon = True
recv_thread.start()
window.mainloop()