获取qq聊天窗口内容,python获取qq聊天记录
本节我们实现了类似即时通信软件通讯聊天的功能,即你和好友之间可以相互发送和接受消息,为了美化,我们还增加了图形用户界面界面实现。
首先为了接受和发送消息,我们需要用窝编程,插座编程分为传输控制协议和udp,我们在这里用传输控制协议实现通讯。
其次,为了实现图形用户界面页面,我们用了大蟒自带的图形用户界面图形库,即图形界面库。
我们需要分别编写客户端和服务端的代码,即要编写两套代码,不过客户端和服务端的实现细节大同小异,除了通讯方面代码略微不同,图形用户界面界面部分都是一样的,下面我们来编写代码。
服务端代码:
来自tkinter导入*
导入插座
导入系统
导入线程
导入时间
服务器一类:
def __init__(self): #初始化创建窝套接字,并且调用开始一方法绘制界面
自我。服务器1=套接字。插座(插座.AF_INET,插座.袜子_流)
self.serv1.bind((localhost ,9980))
自我服务1 .倾听(5)
self.client,self.addr=self.serv1.accept()
self.start1()
def __del__(self): #析构函数,当程序退出时,执行该函数,主要是为了关闭创建的窝套接字
self.serv1.close()
self.client.close()
定义开始时间1(自身):#界面绘制
self.init1=Tk()
self.init1.title(服务端聊天工具)
self.init1.geometry(290x160 )
self.init1[bg]=pink
self.init1.attributes(-alpha ,0.8)
self.text1=Text(self.init1,宽度=60,高度=20)
self.text1.place(x=20,y=50)
self.w=Label(self.init1,text=服务端信息框宽度=60)
self.w.place(x=20,y=20)
self.bu=Button(self.init1,text=发送,command=self.add1)
self.bu.place(x=20,y=430)
self.text2=Text(self.init1,width=25,height=3)
self.text2.place(x=80,y=430)
self.init1.after(1000,self.get2) #这里调用了在.之后方法,即隔一段时间执行事件
self.init1.mainloop()
定义获取2(自身):#创建线程
t=螺纹。线程(target=self.get1)
t.setDaemon(True)
启动()
self.init1.after(1000,self.get2) #这里与上面的在.之后方法一致,这样就能每隔一段时间执行
def get1(自身):#此函数是为了判断对方有没有发送消息,如果有,就在文本框显示对方发送的消息
msg=self.client.recv(1024)
如果消息不是无:
msg=msg.decode(utf-8 )
self.text1.insert(end ,客户端发来的消息: msg \n )
定义添加1(自身):#这是按钮事件,即按钮点击事件,点击后,发送文本框消息
temp=self.text2.get(1.0, end )
温度=温度
自我。客户。发送(温度。编码( utf-8 ))
self.text1.insert(end ,你发送的消息: temp \n )
self.text2.delete(1.0,的结束)
a=服务器1()
下面是客户端代码
客户端代码:
来自tkinter导入*
导入插座
导入系统
导入线程
导入时间
类别客户端1:
def __init__(self):
自我。客户端1=套接字。插座(插座.AF_INET,插座.袜子_流)
自我。客户1。连接(( localhost ,9980))
self.start1()
def __del__(self):
self.client1.close()
定义开始时间1(自身):
self.init1=Tk()
self.init1.title(客户端聊天工具)
self.init1.geometry(290x160 )
self.init1[bg]=pink
self.init1.attributes(-alpha ,0.8)
self.text1=Text(self.init1,宽度=60,高度=20)
self.text1.place(x=20,y=50)
self.w=Label(self.init1,text=客户端信息框宽度=60)
self.w.place(x=20,y=20)
self.bu=Button(self.init1,text=发送,command=self.add1)
self.bu.place(x=20,y=430)
self.text2=Text(self.init1,width=25,height=3)
self.text2.place(x=80,y=430)
self.init1.after(1000,self.get2)
self.init1.mainloop()
定义获取2(自身):
t=螺纹。线程(target=self.get1)
t.setDaemon(True)
启动()
self.init1.after(1000,self.get2)
def get1(自身):
msg=self.client1.recv(1024)
如果消息不是无:
msg=msg.decode(utf-8 )
self.text1.insert(end ,服务端发来的消息: msg \n )
定义添加1(自身):
temp=self.text2.get(1.0, end )
温度1=温度
自我。客户1。发送(温度1。编码( utf-8 ))
self.text1.insert(end ,你发送的消息: temp \n )
self.text2.delete(1.0,的结束)
a=客户端1()
我来解释一下主要功能。get1函数类似于文本框监视事件。当对方发送消息时,将对方发送的消息显示到文本框中。get2函数创建一个线程,并在线程中调用get1函数。使用after方法,即每隔一段时间执行一次事件,间隔1秒。
注意我之前没有写get2方法,也就是没有创建线程,没有在线程中调用interval事件。我之前在start1方法中直接调用了get1函数。
但是这就造成了程序的gui界面卡住,无法运行。具体原因不清楚。使用get2函数在线程中调用interval事件就足够了。至于具体原因,我还不知道。
粘贴下面的程序运行界面图:
这是服务器的聊天界面:
这是客户端的聊天界面:
如您所见,客户端和服务器都可以正常接收和发送消息。在这里,客户端和服务器相当于和你的朋友聊天。
所以我们可以实现qq聊天功能。
完成这个小项目后,我还是学到了很多,比如socket套接字(即网络编程),gui编程,多线程的初步学习。而且中间还是遇到了一些困难,让我觉得有些事情看起来很简单,但是可能中间有一些知识点你不懂,所以走不下去。然而,当我们看别人的代码时,我们可能会自动忽略并跳过这些麻烦的漏洞。这就是敲和看代码的区别。
所以我们一般不会只看。重要的是多敲门。只有多敲,才会遇到真正的坑,才会思考如何解决。这也是我这次的感悟之一!
好了,就这些了,拜拜~
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。