我运行着一个小型的聊天服务器,人们可以在其中相互聊天。我想使用tkinter列表框监视传入的连接。
这是启动服务器脚本后的GUI。
用户连接到服务器后,我的列表框中将显示诸如“ XXX.XX.XXX.XXX:XXXXX”的消息:
我不知道为什么列表框在这一点上重复。
附加代码:
def accept_incoming_connections():
"""Sets up handling for incoming clients."""
while True:
client, client_address = SERVER.accept()
s = str("%s:%s has connected." % client_address)
client.send(bytes("Greetings from the cave!" + "Now type your name and press enter!", "utf8"))
addresses[client] = client_address
print(s)
App().insert_log(s)
Thread(target=handle_client, args=(client,)).start()
class App(tkinter.Tk):
def __init__(self, *args, **kwargs):
tkinter.Tk.__init__(self, *args, **kwargs)
self.label = tkinter.Label(self, text="", width=20, anchor="w")
self.label.pack(side="top", fill="both", expand=True)
self.title('Chat - Server')
self.geometry('400x400')
self.messages_frame = tkinter.Frame()
self.messages_frame.pack()
self.msg_list = tkinter.Listbox(self.messages_frame, height=15, width=50)
self.msg_list.insert(tkinter.END, 'Server ONLINE!')
self.msg_list.insert(tkinter.END, 'AP: ' + str(ap))
self.msg_list.insert(tkinter.END, 'IP: ' + str(ip))
self.msg_list.insert(tkinter.END, 'Port: ' + str(PORT))
self.msg_list.insert(tkinter.END, 'Waiting for connections..')
self.msg_list.pack()
def insert_log(self, logtext):
self.msg_list.insert(tkinter.END, logtext)
def create_gui():
app = App()
app.mainloop()
def main():
SERVER.listen(5) # Listens for 5 connections at max.
ACCEPT_THREAD = Thread(target=accept_incoming_connections)
ACCEPT_THREAD.start() # Starts the infinite loop
GUI = Thread(target=create_gui)
GUI.start() # Starts the gui
print('Server running. Waiting for clients...')
ACCEPT_THREAD.join()
SERVER.close()
if __name__ == "__main__":
main()
该列表框项是在def accept_incoming_connections()上创建的:-> App()。insert_log(s)
重复来自哪里?