获取qq聊天窗口内容,python获取qq聊天记录

  获取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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: