1. 程式人生 > 實用技巧 >一個簡單的IM聊天程式Pie IM(以後會更新)

一個簡單的IM聊天程式Pie IM(以後會更新)

這個程式用多執行緒,實現裝置之間的聊天,支援win10通知,歡迎下載

依賴的第三方庫

win10toast

程式碼

將以下程式碼寫入任意.py檔案

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

將以下程式碼寫入chat.py

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