python聊天室socket+tkinter_Tkinter 之socket聊天室

importjsonimporttimefrom tkinter importmessageboxfrom threading importThreadfrom socketClient importSocketClientfrom LoginWindow importLoginWindowfrom MainWindow importMainWindowfrom RegisterWindow importRegisterWindow

ip= '127.0.0.1'port= 12346

defopen_main_window():globalmain_window

main_window=MainWindow(send_message, close_main_window)

t= Thread(target=recv_data)

t.setDaemon(True)

t.start()

main_window.show()defrecv_data():

time.sleep(1)

client_socket=client.get_client()whileTrue:try:

data= client_socket.recv(1024).decode()print('=====recv_data====')

data=json.loads(data)print(data)

_type= data.get('type')if _type == 'logout':break

elif _type == 'online':

user_name_list= data.get('data')

user_name_list.reverse()print('在线用户:')print(user_name_list)

main_window.set_user_list(user_name_list)elif _type == 'message':

main_window.set_user_message(data.get('data'))exceptException as e:print(e)breakclient.disconnect()defclose_main_window():

client.send_message('{"type": "logout"}')

main_window.window.destroy()deflogin():globalusername

username, password=login_window.get_input()if username == '' or password == '':

messagebox.showerror(title='提示', message='请输入用户名或密码')returnresult=client.check_user(username, password)

data=json.loads(result)

data= data.get('data')if data == 'uerror':

messagebox.showerror(title="错误", message="用户名不存在")elif data == 'perror':

messagebox.showerror(title="错误", message="密码不正确")elif data == 'ok':

login_window.window.destroy()

client.get_online_user()

open_main_window()defregister():print('register...')globalregister_window

login_window.window.destroy()

register_window=RegisterWindow(do_cancel, do_register, close_register_window)

register_window.show()defclose_register_window():

client.send_message('{"type": "logout"}')

register_window.close_register_window()defdo_cancel():

register_window.window.destroy()

login_window.show()defdo_register():

username, password, rpassword=register_window.get_input()if username == '':

messagebox.showerror(title='提示', message='请输入用户名')return

if password == '':

messagebox.showerror(title='提示', message='请输入密码')return

if rpassword == '':

messagebox.showerror(title='提示', message='请再次输入密码')return

if password !=rpassword:

messagebox.showerror(title='提示', message='两次密码输入不一致')returnresult=client.register_user(username, password)

data=json.loads(result)

data= data.get('data')print(data)if data == 'exists':

messagebox.showerror(title='错误', message='用户已经被注册')return

elif data == 'ok':

messagebox.showinfo(title='提示', message='注册用户成功')

do_cancel()defclose_login_window():print('close_login_window...')

client.send_message('{"type": "logout"}')

login_window.close_login_window()defsend_message():print('send_message...')

message=main_window.get_message()if len(message) ==0:

messagebox.showerror(title='提示', message='请输入消息')returnmsg= '{"type":"message", "username": "%s", "message": "%s"}' %(username, message)

client.send_message(msg)defmain():globalclient, login_window

client=SocketClient(ip, port)

login_window=LoginWindow(login, register, close_login_window)

login_window.show()if __name__ == '__main__':

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值