python socket + tkinter实现网络聊天室

个人博客文章链接:http://www.huqj.top/article?id=169

最近突然想用socket做个聊天室程序,之前用java写过一个文件传输的程序,这次就用python做一下,顺便也学习一下python的界面设计。界面库选择了python自带的tkinter。

    总的来说聊天室功能比较简单,只是一个练习用的demo,但是其中一些关于tk和socket的东西值得记录一下。最终的功能包括:注册、登录、显示聊天室在线成员、聊天。先来几张运行截图:

image.png

image.png      image.png

image.png

因为代码比较少,所以服务端和客户端的代码写在一起的,整个代码结构如下:

image.png

其中只有Server.py是服务器端的代码,服务器端没有界面。其它文件的作用分别如下:

  •  Client.py  负责和Server的socket通信,主要是收发数据

  • LoginPanel.py  登陆界面

  • Main.py  客户端的入口,负责调度各个界面之间的切换和调用client发送接收数据

  • MainPanel.py  聊天室主界面

  • MD5  md5算法

  • RegisterPanel.py  注册界面

  • data  目录,存放用户帐号密码数据

  • image  目录,存放图标

完整的代码和打包的exe文件可以从 https://download.csdn.net/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地址换成服务器地址即可,换端口也是同理。

image.png


一些值得记录的技术细节:

①tkinter界面上显示图片的方法:

使用tkinter模块的PhotoImage类,和Lbael组件即可,代码参考下面

1

2

3

4

5

6

7

form_frame = Frame(self.login_frame, bg="#333333")

user_img = PhotoImage(file="image\\user.png", master=self.login_frame)

key_img = PhotoImage(file="image\\key.png", master=self.login_frame)

user_img_label = Label(form_frame, image=user_img, width=30, height=30, bg="#333333")

key_img_label = Label(form_frame, image=key_img, width=30, height=30, bg="#333333")

user_img_label.grid(row=0, column=0, padx=5)

key_img_label.grid(row=1, column=0, padx=5)

②tkinter的Entry组件实现密码框效果:

这个还是可以使用Entry组件,只需要加上属性show="*",即可将输入显示为"*"

  • 27
    点赞
  • 180
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值