这个程序用多线程,实现设备之间的聊天,支持win10通知,欢迎下载

依赖的第三方库

win10toast

代码

将以下代码写入任意.py文件

  1. 1 print('Welcome to use Pie IM')
  2. 2 print('2020 By 人工智障')
  3. 3
  4. 4 import socket
  5. 5 import tkinter as tk
  6. 6 import os
  7. 7
  8. 8 print('==================================================')
  9. 9
  10. 10 def logIn():
  11. 11 ip=enterIp.get()
  12. 12 logInWin.destroy()
  13. 13 global myip
  14. 14 myip=ip
  15. 15 print(ip)
  16. 16 os.system("python ./chat.py %s"%(ip))
  17. 17 exit()
  18. 18
  19. 19 logInWin=tk.Tk()
  20. 20 logInWin.geometry('360x360')
  21. 21 logInWin.resizable(0,0)
  22. 22 logInWin.title('Pie IM')
  23. 23 title=tk.Label(logInWin,text='Pie IM',font=('zpix',30),width=15,height=3,bg='blue',fg='white')
  24. 24 title.pack()
  25. 25 enterIpTip=tk.Label(logInWin,text='请输入对方的IP地址',font=('幼圆',15))
  26. 26 enterIpTip.pack(pady=20)
  27. 27 global login_enterIp
  28. 28 enterIp=tk.Entry(logInWin,width=40)
  29. 29 enterIp.pack()
  30. 30 btn=tk.Button(logInWin,text='登录',bd=2,font=('幼圆',15),command=logIn)
  31. 31 btn.pack(pady=25)
  32. 32 logInWin.mainloop()

将以下代码写入chat.py

  1. 1 import tkinter as tk
  2. 2 from tkinter import *
  3. 3 import tkinter.messagebox as msgbox
  4. 4 import time
  5. 5 import socket
  6. 6 import threading
  7. 7 import sys
  8. 8 from win10toast import ToastNotifier
  9. 9
  10. 10 udp_socket=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  11. 11 udp_socket.bind((sys.argv[1],8080))
  12. 12
  13. 13 ip=sys.argv[1]
  14. 14 port=8081
  15. 15
  16. 16 def sendMsg():#发送消息
  17. 17 print('doing:sendMsg()')
  18. 18 msg=str(msgEnter.get('1.0',END))
  19. 19 print(msg)
  20. 20 print(type(msg))
  21. 21 strMsg='我:'+time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
  22. 22 print(strMsg)
  23. 23 msgList.insert(END,strMsg+'\n','greencolor')#插入年月日
  24. 24 msgList.insert(END,msg+'\n')#输入的内容,0.0表示文本开始
  25. 25 msgList.insert(END,'\n')
  26. 26 msgEnter.delete('1.0',END)#删除中间刚输入的内容
  27. 27 udp_socket.sendto(msg.encode('utf-8'),(ip, port))
  28. 28
  29. 29 def recvMsg():
  30. 30 while True:
  31. 31 print('doing:recvMsg()')
  32. 32 print('正在接收...')
  33. 33 recv_data=udp_socket.recvfrom(8080)
  34. 34 msg=recv_data[0].decode('utf-8')
  35. 35 strMsg='对方:' + time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
  36. 36 print(strMsg)
  37. 37 msgList.insert(END,strMsg+'\n','greencolor')#插入年月日
  38. 38 msgList.insert(END,msg+'\n')#输入的内容,0.0表示文本开始
  39. 39 msgList.insert(END,'\n')
  40. 40 toaster = ToastNotifier()
  41. 41 toaster.show_toast(ip,msg)
  42. 42
  43. 43 win=tk.Tk()
  44. 44 win.geometry('480x560')
  45. 45 win.title('test title')
  46. 46 win.iconbitmap("./icons/icon-mini.ico")
  47. 47
  48. 48 msgList=tk.Text(win,font=('幼圆',13))
  49. 49 msgList.pack(fill=BOTH,expand=True)
  50. 50
  51. 51 sendBtn=tk.Button(win,text='发送',bd=2,font=('等线',15),height=2,command=sendMsg)
  52. 52 sendBtn.pack(fill=X,expand=True)
  53. 53
  54. 54 msgEnter=Text(win,width='1',font=('幼圆',13))
  55. 55 msgEnter.pack(fill=BOTH,expand=True,pady=0)
  56. 56
  57. 57 t1=threading.Thread(target=recvMsg,name='Pie IM消息接收服务')
  58. 58 t1.start()
  59. 59 win.mainloop()

一个简单的IM聊天程序Pie IM(以后会更新)的更多相关文章

  1. python实现一个简单的网络聊天程序

    一.Linux Socket 1.Linux Socke基本上就是BSD Socket(伯克利套接字) 伯克利套接字的应用编程接口(API)是采用C语言的进程间通信的库,经常用在计算机网络间的通信.B ...

  2. 以您熟悉的编程语言为例完成一个hello/hi的简单的网络聊天程序

    Socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信,应用程序通常通过"套接字"向网络发出 ...

  3. 使用Servlet和JSP实现一个简单的Web聊天室系统

    1 问题描述                                                利用Java EE相关技术实现一个简单的Web聊天室系统,具体要求如下. (1)编写一个登录 ...

  4. hello/hi的简单的网络聊天程序

    hello/hi的简单的网络聊天程序 0 Linux Socket API Berkeley套接字接口,一个应用程序接口(API),使用一个Internet套接字的概念,使主机间或者一台计算机上的进程 ...

  5. 一个简单的P2P传输程序

    写了一个简单的P2P传输程序,在P2P的圈子中传输文件,不过为了简便,这个程序没有真正的传输文件,只是简单的判断一下文件的位置在哪里.这个程序可以处理当有一个peer闪退的情况,在这种情况下,剩下的p ...

  6. IOS开发之小实例--使用UIImagePickerController创建一个简单的相机应用程序

    前言:本篇博文是本人阅读国外的IOS Programming Tutorial的一篇入门文章的学习过程总结,难度不大,因为是入门.主要是入门UIImagePickerController这个控制器,那 ...

  7. iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

    iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcar ...

  8. 一个简单的MDI示范程序(Delphi)

    http://www.cnblogs.com/pchmonster/archive/2012/01/07/2316012.html 最为一个巩固之前有关窗体和对象的有关知识,下面就建立一个简单的MDI ...

  9. 一个简单的DDraw应用程序2

    //------------------------------------------------------------------------- // 文件名 : 6_1.cpp// 创建者 : ...

随机推荐

  1. C# 将json字符串进行排序 转成键值

    public static string StortJson(string json) { var dic = JsonConvert.DeserializeObject<SortedDicti ...

  2. [AspNetCore3.1] 使用Serilog记录日志

    用到的单词 Sink 接收器模块.输出方式.接收模块库.输出模块库 Diagnostic 诊断 Enricher 扩展器 embedded 嵌入式的 compact 紧凑的.简洁的 concept 概 ...

  3. (十四)、shell脚本之shell基础(上)

    一.shell脚本介绍 1.使用脚本的原因 其中使用脚本的一个最主要的原因是因为一个字"懒",在处理自动循环或者大的任务方面可以偷懒且省时间,如果有处理一个任务的命令清单,一个任务 ...

  4. (九)rmdir和rm -r删除目录命令

    一.命令描述与格式 rmdir用于删除空目录 命令格式 :rmdir   [选项]   目录名 选项: --ignore-fail-on-non-empty   :忽略任何因目录仍有数据而造成的错误 ...

  5. 你好,Spring!

    交个朋友 拿人钱财替人干活儿,在不影响工作的前提下,想做到很高频率的更新很难,但是我也尽力输出,不能为了写而写,宁缺毋滥吧. 我的想法是这样的,接下来的一段时间专门写Spring框架.整体思路就是:入 ...

  6. java实现读取excel文件内容

    package excel; import java.io.FileInputStream; import java.io.InputStream; import java.text.SimpleDa ...

  7. Ubuntu安装 Sublime Text 及常用插件推荐

    之前一直在用 Code Blocks 这个IDE工具,可用着还是感觉不怎么好,于是在网上找到了一篇文章,上面介绍了不少IDE,我找到了Sublime Text 感觉挺不错的. 帖子地址: http:/ ...

  8. 对象存储Backblaze B2作为ShareX图床的Windows及安卓端配置

    标题: 对象存储Backblaze B2作为ShareX图床的Windows及安卓端配置 作者: 梦幻之心星 sky-seeker@qq.com 标签: [对象存储,图床,Backblaze,Shar ...

  9. Java学习日报7.10

    package Address;import java.util.Scanner; public class Address{ Scanner sc=new Scanner(System.in); p ...

  10. Light Probes

    LightProbes (光照探针,光探测器?) 提供了一种方法用于捕获和使用 穿过场景中空白空间的 光(light)的信息. 和光照贴图相似(lightmaps),Light Probes也存储关于 ...