使用前请下载以下库

pip install wxpython

下载使用前wxpython前请查看相应python版本是否支持
最好是python3.6版本

ip绑定的是本机ip,有多ip者也可以绑定其他ip,可以在内网通信也可以在使用外网ip和外网通信
# coding=utf-8
import wx,socket,sqlite3
from threading import Thread
from time import sleep,localtime
from datetime import datetimehost_name=socket.gethostname()#获取主机名
host_ip=socket.gethostbyname(host_name)#获取主机ip地址
socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#创建一个udp套接字
socket.bind((host_ip,8080))#绑定本机ip地址和8080端口号接收消息
conn=sqlite3.connect("liaotian.db",check_same_thread=False)#打开或者创建一个db数据文件
#创建一张存聊天记录的表
sujuku=conn.cursor()
try:sujuku.execute("create table ltjlu(name char(100),time char(100),neirong char(100))")
except:print("已经创建过表")
sujuku.close()class chuangkou(wx.Frame):def __init__(self):'''方法体①send_out()需要发送内容输入框的绑定函数②chat_box()接收对方发送内容的函数③view_records()查看聊天记录的绑定函数'''self.liaotian=0#判断是否取过消息记录self.c=Thread(target=self.chat_box)#创建一个线程用于接收upd数据包self.c.start()#开始该线程'''添加成员区域'''super(chuangkou,self).__init__(None,-1,title="对等聊天程序",size=(600,600))#继承父类创建一个窗口self.a=wx.Panel(self)#创建一个画板self.e=wx.TextCtrl(self.a,value="请输入要发送的ip地址")#创建一个输出对方ip地址的输入框self.f = wx.Button( self.a,wx.ID_ANY,"查看消息记录")#创建一个可以查看聊天记录的按钮#创建一个聊天创建的输入框self.d=wx.TextCtrl(self.a,style=wx.TE_READONLY|wx.TE_MULTILINE|wx.TE_RICH2|wx.BORDER_SIMPLE|wx.HSCROLL)self.d.SetBackgroundColour('#d1d1d1')#颜色改变为灰self.b = wx.TextCtrl(self.a, style=wx.TE_PROCESS_ENTER | wx.TE_MULTILINE,value="请输入要发送的内容按 回车发送")  # 创建一个输入发送聊天内容的输入框'''成员的绑定函数区域'''self.b.Bind(wx.EVT_TEXT_ENTER,self.send_out)#把该输入框绑定send_out函数self.f.Bind(wx.EVT_BUTTON,self.view_records)#把该按钮绑定view_resords函数'''成员的布局区域'''box=wx.BoxSizer(wx.HORIZONTAL)#创建一个垂直布局box1= wx.BoxSizer(wx.VERTICAL)#创建一个平行布局box1.Add(self.e,proportion=3, flag=wx.EXPAND|wx.TOP,border=0)#输入ip地址的输入框的布局box1.Add(self.f,proportion=1, flag=wx.EXPAND|wx.TOP,border=0)#查看聊天记录按钮的布局box1.Add(self.d,proportion=30, flag=wx.EXPAND|wx.TOP,border=0)#接收输入框的布局box1.Add(self.b,proportion=20, flag=wx.EXPAND|wx.TOP,border=0)#发送的输入框的布局self.a.SetSizer(box1)#布局设置在a画板上def send_out(self,can):#发送消息的函数'''该函数的作用是发送内容到指定的ip地址并且保存到聊天数据库中'''#将我发送的内容存储到数据表中sujuku = conn.cursor()try:sujuku.execute("insert into ltjlu(name,time,neirong) values (?,?,?)",("我发送",datetime.now(),self.b.GetValue()))except:print("保存数据到数据库失败")sujuku.close()conn.commit()try:# 获取输入框的内容发送到指定ip的地址上socket.sendto(self.b.GetValue().encode(),(self.e.GetValue(),8080))# 将我发送的内容输入到聊天框中self.d.AppendText("我发送\n"+self.b.GetValue()+"\n\n")except:print('发送字数超过上限或者没输入ip地址')self.b.Clear()#最后清空输入框的内容def chat_box(self):#接收对方发送消息的函数'''该函数的作用是循环不断的监听对方发送的内容'''while True:sleep(0.3)try:#监听对方发送的内容self.chuang2_1,self.chuang2_2=socket.recvfrom(1024)#将对方发送的内容输入到聊天框中self.d.AppendText(self.chuang2_2[0] + "发送\n" + self.chuang2_1.decode() + "\n\n")#将对方发送的内容存储到数据表中sujuku = conn.cursor()try:sujuku.execute("insert into ltjlu(name,time,neirong) values (?,?,?)", (self.chuang2_2[0] + "发送", \datetime.now(), \self.chuang2_1))except:passsujuku.close()conn.commit()except:print("接收超过聊天字数\n")def view_records(self,can):#查看聊天记录的函数'''该函数的作用是当点击查看聊天记录按钮时从数据库中循环的读取内容并添加到聊天框中'''#如果没点击过查看聊天记录就执行if self.liaotian==0:sujuku=conn.cursor()ltjl=sujuku.execute("select name,time,neirong from ltjlu")for i in ltjl:#循环取出每一条消息并添加到聊天框self.d.AppendText('\n'+i[0])self.d.AppendText("\t\t"+i[1]+'\n')self.d.AppendText(i[2])self.d.AppendText('\n\n')sujuku.close()self.liaotian+=1#加1后再次点击查看消息记录无效if __name__=="__main__":#主代码app=wx.App()#初始化shili=chuangkou()#创建实例shili.Show()#显示窗口app.MainLoop()#窗口主循环

最好用局域网中的两台电脑进行测试
【请输入要发送的地址填写ip地址】
运行后

本人菜鸟,写的不好的地方请批评 留言。

python的wxpyton库开发的聊天程序相关推荐

  1. python写机器人程序_用Python写的一个多线程机器人聊天程序

    本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows).后来发现实现起来特别麻烦, 就想到python.听说这家伙在什么地方都能发挥作用.所以想用python来做通讯模块...所 ...

  2. python socket编程 实现简单p2p聊天程序

    转载自:https://www.cnblogs.com/wuxie1989/p/7204887.html python socket编程 实现简单p2p聊天程序 目标是写一个python的p2p聊天的 ...

  3. 探索 Python、机器学习和 NLTK 库 开发一个应用程序,使用 Python、NLTK 和机器学习对 RSS 提要进行分类

    挑战:使用机器学习对 RSS 提要进行分类 最近,我接到一项任务,要求为客户创建一个 RSS 提要分类子系统.目标是读取几十个甚至几百个 RSS 提要,将它们的许多文章自动分类到几十个预定义的主题领域 ...

  4. 使用Xamarin开发手机聊天程序 -- 基础篇(大量图文讲解 step by step,附源码下载)

    如果是.NET开发人员,想学习手机应用开发(Android和iOS),Xamarin 无疑是最好的选择,编写一次,即可发布到Android和iOS平台,真是利器中的利器啊!而且,Xamarin已经被微 ...

  5. 移动应用(手机应用)开发IM聊天程序解决方案

    这个解决方法已经定制下来很久了,上一段时间比较忙,没有时间整这些东西.最近稍微好些,不怎么加班.所以抽空总结下,同时也分享给大家,也算是给大家一个借鉴吧!或许这并不是最好的解决方案,但只要能满足当前需 ...

  6. javascript不依赖库开发windows应用程序

    其实javascript不仅可以做网页应用,也可以不依赖任何环境开发windows应用程序.windows系统自带mshta.exe,相当于一个javascript虚拟机,我们把.html文件扩展名改 ...

  7. Python 使用Qt可视化开发窗体应用程序

    1.先下载qt开发工具,文档说的很清楚 方法一: (本文用的是此下载安装方式) 官方下载链接库:https://download.qt.io/https://download.qt.io/安装文档:h ...

  8. (已完善)基于Python的TCP 协议实现人机聊天(程序具有服务端和客户端)

    服务端 实现目标 GUI显示人机互动聊天内容,当客户端输入不完整内容,如'how old',服务器能回复年龄等. GUI当客户端输入"send a file",服务器端回复&quo ...

  9. python 实战之模仿开发QQ聊天软件(三)TCP/IP服务器与客户端建设

    无论是p2p还是c/s还是b/s,只要用到通讯,必然是要用到今天写的这个. python+MYSQL 在pycharm中的使用 TCP/IP是网络软件最核心的部分,缺少这个你只能当做单机游戏玩. TC ...

最新文章

  1. 什么是RNA-Seq (RNA Sequencing)
  2. 并行口设计数字键盘实验
  3. Java编程的逻辑 (62) - 神奇的序列化
  4. 二级联动,三级联动,初学者,纯javascript,不含jQuery
  5. Unity UGUI —— 无限循环List(转载)
  6. ZOJ 1586 QS Network
  7. react-native viewpager用法
  8. 计算机硬盘中没有什么 a文件夹,为什么硬盘上没有A和B盘?
  9. Java方法实现是什么意思_Java中实现可调用的最佳方法是什么,需要一段时间才能完成...
  10. html div英文自动换行,div 实现长英文字母自动换行CSS
  11. 文本加密算法matlab,matlab希尔加密算法
  12. 移动互联网“大开放”之死
  13. json 插入数据_让繁琐的工作自动化——python处理JSON文件
  14. Emeditor 常用的正则表达式
  15. java web中的监听器
  16. 《图解TCPIP》知识学习(1.4):协议由谁规定
  17. 触发Full GC执行的情况
  18. 如何用计算机看苹果手机的文件,如何在电脑上管理iphone文件?
  19. mysql explain row_MySQL explain详解
  20. Elasticsearch - 短语匹配(match_phrase)以及slop参数

热门文章

  1. FPGA经验谈系列文章——FPGA资源评估
  2. 【学生管理系统】用户登录三种验证方式—图片验证、短信验证、邮件验证
  3. vue的scoped 样式隔离,样式穿透,及细节
  4. 【Spring】Lifecycle的使用与源码分析
  5. php 单引号 双引号的区别
  6. graphpad分组百分比柱状图_Graphpad Prism 8.0绘制分组散点图与柱状图共存图
  7. 奥利给 之 【优学院自定义速度】
  8. 都要和硬件工程师“作对”吗?
  9. MuiPlayer - 一款优秀的 H5 视频播放器框架
  10. 云长协助你彻底搞清楚转发与重定向的区别