个人博客文章链接:http://www.huqj.top/article?id=169
最近突然想用socket做个聊天室程序,之前用java写过一个文件传输的程序,这次就用python做一下,顺便也学习一下python的界面设计。界面库选择了python自带的tkinter。
总的来说聊天室功能比较简单,只是一个练习用的demo,但是其中一些关于tk和socket的东西值得记录一下。最终的功能包括:注册、登录、显示聊天室在线成员、聊天。先来几张运行截图:
因为代码比较少,所以服务端和客户端的代码写在一起的,整个代码结构如下:
其中只有Server.py是服务器端的代码,服务器端没有界面。其它文件的作用分别如下:
-
Client.py 负责和Server的socket通信,主要是收发数据
-
LoginPanel.py 登陆界面
-
Main.py 客户端的入口,负责调度各个界面之间的切换和调用client发送接收数据
-
MainPanel.py 聊天室主界面
-
MD5 md5算法
-
RegisterPanel.py 注册界面
-
data 目录,存放用户帐号密码数据
-
image 目录,存放图标
完整的代码和打包的exe文件可以从 https://download.youkuaiyun.com/download/qq_32216775/10903517 下载。
启动方式为:
1)先启动Server.exe开始监听端口(12323),或者直接用python运行Server.py
2)再启动一个或多个Main.exe打开客户端的界面,或者直接用python运行Main.py
这里再代码中写的是直接连接本地(127.0.0.1)的服务器,如果需要测试客户端连接远程服务器,只需要将Client.py中第10行的ip地址换成服务器地址即可,换端口也是同理。
一些值得记录的技术细节:
①tkinter界面上显示图片的方法:
使用tkinter模块的PhotoImage类,和Lbael组件即可,代码参考下面
1 2 3 4 5 6 7 |
|
②tkinter的Entry组件实现密码框效果:
这个还是可以使用Entry组件,只需要加上属性show="*",即可将输入显示为"*"