当前位置:   article > 正文

Tkinter 之socket聊天室

Tkinter 之socket聊天室

一、效果图

 

 

 

 二、代码

  1. import json
  2. import time
  3. from tkinter import messagebox
  4. from threading import Thread
  5. from socketClient import SocketClient
  6. from LoginWindow import LoginWindow
  7. from MainWindow import MainWindow
  8. from RegisterWindow import RegisterWindow
  9. ip = '127.0.0.1'
  10. port = 12346
  11. def open_main_window():
  12. global main_window
  13. main_window = MainWindow(send_message, close_main_window)
  14. t = Thread(target=recv_data)
  15. t.setDaemon(True)
  16. t.start()
  17. main_window.show()
  18. def recv_data():
  19. time.sleep(1)
  20. client_socket = client.get_client()
  21. while True:
  22. try:
  23. data = client_socket.recv(1024).decode()
  24. print('=====recv_data====')
  25. data = json.loads(data)
  26. print(data)
  27. _type = data.get('type')
  28. if _type == 'logout':
  29. break
  30. elif _type == 'online':
  31. user_name_list = data.get('data')
  32. user_name_list.reverse()
  33. print('在线用户:')
  34. print(user_name_list)
  35. main_window.set_user_list(user_name_list)
  36. elif _type == 'message':
  37. main_window.set_user_message(data.get('data'))
  38. except Exception as e:
  39. print(e)
  40. break
  41. client.disconnect()
  42. def close_main_window():
  43. client.send_message('{"type": "logout"}')
  44. main_window.window.destroy()
  45. def login():
  46. global username
  47. username, password = login_window.get_input()
  48. if username == '' or password == '':
  49. messagebox.showerror(title='提示', message='请输入用户名或密码')
  50. return
  51. result = client.check_user(username, password)
  52. data = json.loads(result)
  53. data = data.get('data')
  54. if data == 'uerror':
  55. messagebox.showerror(title="错误", message="用户名不存在")
  56. elif data == 'perror':
  57. messagebox.showerror(title="错误", message="密码不正确")
  58. elif data == 'ok':
  59. login_window.window.destroy()
  60. client.get_online_user()
  61. open_main_window()
  62. def register():
  63. print('register...')
  64. global register_window
  65. login_window.window.destroy()
  66. register_window = RegisterWindow(do_cancel, do_register, close_register_window)
  67. register_window.show()
  68. def close_register_window():
  69. client.send_message('{"type": "logout"}')
  70. register_window.close_register_window()
  71. def do_cancel():
  72. register_window.window.destroy()
  73. login_window.show()
  74. def do_register():
  75. username, password, rpassword = register_window.get_input()
  76. if username == '':
  77. messagebox.showerror(title='提示', message='请输入用户名')
  78. return
  79. if password == '':
  80. messagebox.showerror(title='提示', message='请输入密码')
  81. return
  82. if rpassword == '':
  83. messagebox.showerror(title='提示', message='请再次输入密码')
  84. return
  85. if password != rpassword:
  86. messagebox.showerror(title='提示', message='两次密码输入不一致')
  87. return
  88. result = client.register_user(username, password)
  89. data = json.loads(result)
  90. data = data.get('data')
  91. print(data)
  92. if data == 'exists':
  93. messagebox.showerror(title='错误', message='用户已经被注册')
  94. return
  95. elif data == 'ok':
  96. messagebox.showinfo(title='提示', message='注册用户成功')
  97. do_cancel()
  98. def close_login_window():
  99. print('close_login_window...')
  100. client.send_message('{"type": "logout"}')
  101. login_window.close_login_window()
  102. def send_message():
  103. print('send_message...')
  104. message = main_window.get_message()
  105. if len(message) == 0:
  106. messagebox.showerror(title='提示', message='请输入消息')
  107. return
  108. msg = '{"type":"message", "username": "%s", "message": "%s"}' % (username, message)
  109. client.send_message(msg)
  110. def main():
  111. global client, login_window
  112. client = SocketClient(ip, port)
  113. login_window = LoginWindow(login, register, close_login_window)
  114. login_window.show()
  115. if __name__ == '__main__':
  116. main()

三、获取源码

QQ:2575404985

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/686386
推荐阅读
相关标签
  

闽ICP备14008679号