Я пытаюсь интегрировать этот модуль в Tkinter с помощью функции Entry () Tkinter. Однако после его интеграции терминал ожидает ввода. Без ввода с терминала чат не продолжится в окне ввода графического интерфейса Tkinter.
Я считаю, что это вызвано «sys.stdin» в «sockets_list = [sys.stdin, socket]». Я не знаю, чем заменить sys.stdin на GUI. Помогите, пожалуйста, спасибо!
def get_chat_entry(player, packet, lobby_id, connectPacket, event=None):
# maintains a list of possible input streams
sockets_list = [sys.stdin, socket]
#Instantiate chat packet
chatPacket = packet.ChatPacket()
read_sockets,write_socket,error_socket = select.select([socket],[],[])
for socks in read_sockets:
if socks == socket:
packet_received = bytearray(socket.recv(2048))
packet.ParseFromString(packet_received)
packet_type = packet.type
#Chat packet type
if packet_type == 3:
#Receive broadcasted data from server
chatPacket.ParseFromString(packet_received)
print(chatPacket.message)
#update chat_text_box
chat_history_Txt.config(state=NORMAL)
chat_history_Txt.insert(END, chatPacket.message + '\n')
chat_history_Txt.see("end")
chat_history_Txt.config(state=DISABLED)
else:
# #Write your message here
chatPacket.type = TcpPacket.CHAT
chatPacket.message = chat_entry.get()
socket.send(chatPacket.SerializeToString())
Почему вы включили sys.stdin в sockets_list? Единственные входные данные должны быть либо от sockets (другие участники), либо от вашего ввода через chat_entry. Итак, удалите sys.stdin из sockets_list.
да спасибо. Я знаю, что его следует удалить и заменить на chat_entry, однако sockets_list принимает только ввод-вывод файлов. Chat_entry не является файлом ввода / вывода
Я не имею в виду, что вам нужно добавлять chat_entry в sockets_list. Вам нужно либо создать новый поток, либо использовать after() в основном потоке, чтобы дождаться ввода из сокета и обновить chat_history_Txt. Вам также необходимо подключить функцию bind к chat_entry, чтобы всякий раз, когда вы вводили сообщение и нажимали клавишу Enter, функция привязки выполнялась для обновления chat_history_Txt.






Думали ли вы о чтении учебника по программированию графического интерфейса, управляемого событиями? «Я не знаю, чем заменить sys.stdin на GUI» - хороший показатель того, что программирование культа карго не работает.