Записать элемент в список tkinter из функции снаружи - PullRequest
0 голосов
/ 25 апреля 2019

Я запускаю небольшой чат-сервер, где люди могут общаться и общаться друг с другом. Я хочу использовать список tkinter для мониторинга входящих соединений.

Это мой графический интерфейс после запуска серверного скрипта.

enter image description here

После того, как пользователь подключился к серверу, в моем списке появляется сообщение «XXX.XX.XXX.XXX:XXXXX:

enter image description here

Я не знаю, почему список дублируется в этом пункте.

Прикрепленный код:

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)

Откуда происходит дублирование?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...