问题描述
新手程序员在这里。 我正在使用 socket python 创建一个聊天室,我很好奇是否有一种方法可以在单独的列表框中显示在线用户列表而不是用于显示消息的列表。下面是我正在使用的客户端代码,带有 tkinter 和套接字。
from socket import AF_INET,socket,SOCK_STREAM
from threading import Thread
import tkinter
from tkinter import END
from datetime import *
def receive():
while True:
try:
msg = client_socket.recv(BUFSIZ).decode("utf8")
Now = datetime.Now()
current_time = Now.strftime("%H:%M:%s")
msg_list.insert(tkinter.END,'[' + current_time + '] ' + msg)
msg_list.yview(END)
except OSError:
break
def send(event=None):
msg = my_msg.get()
my_msg.set("")
client_socket.send(bytes(msg,"utf8"))
msg_list.yview(END)
if msg == "{quit}":
client_socket.close()
top.quit()
def on_closing(event=None):
my_msg.set("{quit}")
send()
top = tkinter.Tk()
top.title("Chat Room 90")
messages_frame = tkinter.Frame(top)
my_msg = tkinter.StringVar()
my_msg.set("[type here]")
scrollbar = tkinter.Scrollbar(messages_frame)
msg_list = tkinter.ListBox(messages_frame,height=30,width=100,yscrollcommand=scrollbar.set)
scrollbar.pack(side=tkinter.RIGHT,fill=tkinter.Y)
msg_list.pack(side=tkinter.LEFT,fill=tkinter.BOTH)
msg_list.pack()
messages_frame.pack()
entry_field = tkinter.Entry(top,textvariable=my_msg,width=100)
entry_field.bind("<Return>",send)
entry_field.pack()
send_button = tkinter.Button(top,text="Send",command=send)
send_button.pack()
top.protocol("WM_DELETE_WINDOW",on_closing)
HOST = input('Enter host: ')
PORT = input('Enter port: ')
if not PORT:
PORT = 33000
else:
PORT = int(PORT)
BUFSIZ = 1024
ADDR = (HOST,PORT)
client_socket = socket(AF_INET,SOCK_STREAM)
client_socket.connect(ADDR)
receive_thread = Thread(target=receive)
receive_thread.start()
tkinter.mainloop()
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)