我试图在python上使用终端和curses创建一个web聊天客户端。然而,我不能使它刷新时,有新的数据接收,我需要发送一条消息,然后它得到的数据。。。你知道吗
代码如下:
chat_msg_list = list()
global_chat = curses.newwin(10, 50, 2, 23)
user_chat = curses.newwin(3, 45, 22, 32)
ready = select.select([s], [], [], 0)
if ready[0]:
data = s.recv(1024)
chat_msg_list.append(data.decode())
for i in range(len(chat_msg_list)):
global_chat.addstr(i, 1, chat_msg_list[ i ])
global_chat.refresh()
但是,如果在按下CTRL+G之前没有发生:
box = Textbox(user_chat)
box.edit()
message = box.gather()
screen.nodelay(1)
s.send(message.encode())
有什么想法吗?当接收器上有新数据时,我如何重新绘制屏幕?你知道吗
编辑:根据要求完成示例:
def main(screen):
"""Main client order call and loop"""
user_chat = curses.newwin(3, 45, 22, 32)
user_chat.scrollok(True)
user_chat.idlok(True)
screen.addstr(0, 3, "Users List:")
# Rectangles:
rectangle(screen, 1, 0, 23,20) # user list rectangle
rectangle(screen, 1, 21, 19, 78) # chat rectangle
rectangle(screen, 21, 21, 23, 78) # user input rectangle
# Get the user name on screen
user_name = login()
screen.addstr(22, 22, user_name)
# Help:
screen.addstr(20, 25, "Press CTRL + G to send [CTRL + C exits]")
screen.refresh()
# Add the user list:
user_list_box = curses.newwin(15, 19, 2, 1)
data = s.recv(1024)
chat_msg_list.append(data.decode())
for i in range(len(user_list)):
user_list_box.addstr(i, 1, user_list [ i ])
# Global chat window:
global_chat = curses.newwin(10, 50, 2, 23)
for i in range(len(chat_msg_list)):
global_chat.addstr(i, 1, chat_msg_list[ i ])
global_chat.refresh()
# Input from user:
box = Textbox(user_chat)
box.edit()
message = box.gather()
send_message = message_string(message, login()) # login should not come here.
s.send(send_message) # send msg to srv
if __name__ == '__main__':
s.connect((HOST, PORT))
try:
screen = curses.initscr()
while True:
curses.wrapper(main)
except KeyboardInterrupt:
s.close() # I believe the srv crash is here?
sys.exit("Program Finished")
目前没有回答
相关问题 更多 >
编程相关推荐