1.python2.7下安装

apt-get install python-tk

主要功能是实现客户端与服务器端的双向通信,这个小东西用到的主要知识点:

1.Python Socket;
2.Python Tkinter库。

当然也应该了解如下的基础知识:
1.Python基本语法;
2.Python基本语句;
3.Python函数;
4.Python模块;
5.Python异常处理;
6.Python面向对象;

7.Python线程等相关知识。

另外:我使用的是Python2.5这个版本,如果你使用的Python3.0,可能不兼容。 推荐使用稳定的2.5版,linux系统默认安装的也是2.5这个版本,许多第三方库也是使用2.5这个版本。

下面是这个小东西的一个截图:

下面是服务器端代码:

# _*_ coding:utf-8 _*_
# Filename:ServerUI.py
# Python在线聊天服务器端  import Tkinter
import tkFont
import socket
import thread
import time
import sys  class ServerUI():  title = 'Python在线聊天-服务器端V1.0'  local = '127.0.0.1'  port = 8808  global serverSock;  flag = False  #初始化类的相关属性,类似于Java的构造方法  def __init__(self):  self.root = Tkinter.Tk()  self.root.title(self.title)  #窗口面板,用4个frame面板布局  self.frame = [Tkinter.Frame(),Tkinter.Frame(),Tkinter.Frame(),Tkinter.Frame()]  #显示消息Text右边的滚动条  self.chatTextScrollBar = Tkinter.Scrollbar(self.frame[0])  self.chatTextScrollBar.pack(side=Tkinter.RIGHT,fill=Tkinter.Y)  #显示消息Text,并绑定上面的滚动条  ft = tkFont.Font(family='Fixdsys',size=11)  self.chatText = Tkinter.Listbox(self.frame[0],width=70,height=18,font=ft)  self.chatText['yscrollcommand'] = self.chatTextScrollBar.set  self.chatText.pack(expand=1,fill=Tkinter.BOTH)  self.chatTextScrollBar['command'] = self.chatText.yview()  self.frame[0].pack(expand=1,fill=Tkinter.BOTH)  #标签,分开消息显示Text和消息输入Text  label = Tkinter.Label(self.frame[1],height=2)  label.pack(fill=Tkinter.BOTH)  self.frame[1].pack(expand=1,fill=Tkinter.BOTH)  #输入消息Text的滚动条  self.inputTextScrollBar = Tkinter.Scrollbar(self.frame[2])  self.inputTextScrollBar.pack(side=Tkinter.RIGHT,fill=Tkinter.Y)  #输入消息Text,并与滚动条绑定  ft = tkFont.Font(family='Fixdsys',size=11)  self.inputText = Tkinter.Text(self.frame[2],width=70,height=8,font=ft)  self.inputText['yscrollcommand'] = self.inputTextScrollBar.set  self.inputText.pack(expand=1,fill=Tkinter.BOTH)  self.inputTextScrollBar['command'] = self.chatText.yview()  self.frame[2].pack(expand=1,fill=Tkinter.BOTH)  #发送消息按钮  self.sendButton=Tkinter.Button(self.frame[3],text=' 发 送 ',width=10,command=self.sendMessage)  self.sendButton.pack(expand=1,side=Tkinter.BOTTOM and Tkinter.RIGHT,padx=25,pady=5)  #关闭按钮  self.closeButton=Tkinter.Button(self.frame[3],text=' 关 闭 ',width=10,command=self.close)  self.closeButton.pack(expand=1,side=Tkinter.RIGHT,padx=25,pady=5)  self.frame[3].pack(expand=1,fill=Tkinter.BOTH)  #接收消息  def receiveMessage(self):  #建立Socket连接  self.serverSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  self.serverSock.bind((self.local,self.port))  self.serverSock.listen(15)  self.buffer = 1024  self.chatText.insert(Tkinter.END,'服务器已经就绪......')  #循环接受客户端的连接请求  while True:  self.connection,self.address = self.serverSock.accept()  self.flag = True  while True:  #接收客户端发送的消息  self.cientMsg = self.connection.recv(self.buffer)  if not self.cientMsg:  continue  elif self.cientMsg == 'Y':  self.chatText.insert(Tkinter.END,'服务器端已经与客户端建立连接......')  self.connection.send('Y')  elif self.cientMsg == 'N':  self.chatText.insert(Tkinter.END,'服务器端与客户端建立连接失败......')  self.connection.send('N')  else:  theTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  self.chatText.insert(Tkinter.END, '客户端 ' + theTime +' 说:\n')  self.chatText.insert(Tkinter.END, '  ' + self.cientMsg)  #发送消息  def sendMessage(self):  #得到用户在Text中输入的消息  message = self.inputText.get('1.0',Tkinter.END)  #格式化当前的时间  theTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  self.chatText.insert(Tkinter.END, '服务器 ' + theTime +' 说:\n')  self.chatText.insert(Tkinter.END,'  ' + message + '\n')  if self.flag == True:  #将消息发送到客户端
            self.connection.send(message)  else:  #Socket连接没有建立,提示用户  self.chatText.insert(Tkinter.END,'您还未与客户端建立连接,客户端无法收到您的消息\n')  #清空用户在Text中输入的消息  self.inputText.delete(0.0,message.__len__()-1.0)  #关闭消息窗口并退出  def close(self):  sys.exit()  #启动线程接收客户端的消息  def startNewThread(self):  #启动一个新线程来接收客户端的消息  #thread.start_new_thread(function,args[,kwargs])函数原型,  #其中function参数是将要调用的线程函数,args是传递给线程函数的参数,它必须是个元组类型,而kwargs是可选的参数  #receiveMessage函数不需要参数,就传一个空元组
        thread.start_new_thread(self.receiveMessage,())  def main():  server = ServerUI()  server.startNewThread()  server.root.mainloop()  if __name__=='__main__':  main()  

下面是客户端代码:

# _*_ coding:utf-8 _*_
# Filename:ClientUI.py
# Python在线聊天客户端  import Tkinter
import tkFont
import socket
import thread
import time
import sys  class ClientUI():  title = 'Python在线聊天-客户端V1.0'  local = '127.0.0.1'  port = 8808  global clientSock;  flag = False  #初始化类的相关属性,类似于Java的构造方法  def __init__(self):  self.root = Tkinter.Tk()  self.root.title(self.title)  #窗口面板,用4个面板布局  self.frame = [Tkinter.Frame(),Tkinter.Frame(),Tkinter.Frame(),Tkinter.Frame()]  #显示消息Text右边的滚动条  self.chatTextScrollBar = Tkinter.Scrollbar(self.frame[0])  self.chatTextScrollBar.pack(side=Tkinter.RIGHT,fill=Tkinter.Y)  #显示消息Text,并绑定上面的滚动条  ft = tkFont.Font(family='Fixdsys',size=11)  self.chatText = Tkinter.Listbox(self.frame[0],width=70,height=18,font=ft)  self.chatText['yscrollcommand'] = self.chatTextScrollBar.set  self.chatText.pack(expand=1,fill=Tkinter.BOTH)  self.chatTextScrollBar['command'] = self.chatText.yview()  self.frame[0].pack(expand=1,fill=Tkinter.BOTH)  #标签,分开消息显示Text和消息输入Text  label = Tkinter.Label(self.frame[1],height=2)  label.pack(fill=Tkinter.BOTH)  self.frame[1].pack(expand=1,fill=Tkinter.BOTH)  #输入消息Text的滚动条  self.inputTextScrollBar = Tkinter.Scrollbar(self.frame[2])  self.inputTextScrollBar.pack(side=Tkinter.RIGHT,fill=Tkinter.Y)  #输入消息Text,并与滚动条绑定  ft = tkFont.Font(family='Fixdsys',size=11)  self.inputText = Tkinter.Text(self.frame[2],width=70,height=8,font=ft)  self.inputText['yscrollcommand'] = self.inputTextScrollBar.set  self.inputText.pack(expand=1,fill=Tkinter.BOTH)  self.inputTextScrollBar['command'] = self.chatText.yview()  self.frame[2].pack(expand=1,fill=Tkinter.BOTH)  #发送消息按钮  self.sendButton=Tkinter.Button(self.frame[3],text=' 发 送 ',width=10,command=self.sendMessage)  self.sendButton.pack(expand=1,side=Tkinter.BOTTOM and Tkinter.RIGHT,padx=15,pady=8)  #关闭按钮  self.closeButton=Tkinter.Button(self.frame[3],text=' 关 闭 ',width=10,command=self.close)  self.closeButton.pack(expand=1,side=Tkinter.RIGHT,padx=15,pady=8)  self.frame[3].pack(expand=1,fill=Tkinter.BOTH)  #接收消息  def receiveMessage(self):  try:  #建立Socket连接  self.clientSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  self.clientSock.connect((self.local, self.port))  self.flag = True  except:  self.flag = False  self.chatText.insert(Tkinter.END,'您还未与服务器端建立连接,请检查服务器端是否已经启动')  return  self.buffer = 1024  self.clientSock.send('Y')  while True:  try:  if self.flag == True:  #连接建立,接收服务器端消息  self.serverMsg = self.clientSock.recv(self.buffer)  if self.serverMsg == 'Y':  self.chatText.insert(Tkinter.END,'客户端已经与服务器端建立连接......')  elif self.serverMsg == 'N':  self.chatText.insert(Tkinter.END,'客户端与服务器端建立连接失败......')  elif not self.serverMsg:  continue  else:  theTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  self.chatText.insert(Tkinter.END, '服务器端 ' + theTime +' 说:\n')  self.chatText.insert(Tkinter.END, '  ' + self.serverMsg)  else:  break  except EOFError, msg:  raise msg  self.clientSock.close()  break  #发送消息  def sendMessage(self):  #得到用户在Text中输入的消息  message = self.inputText.get('1.0',Tkinter.END)  #格式化当前的时间  theTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  self.chatText.insert(Tkinter.END, '客户端器 ' + theTime +' 说:\n')  self.chatText.insert(Tkinter.END,'  ' + message + '\n')  if self.flag == True:  #将消息发送到服务器端
            self.clientSock.send(message);  else:  #Socket连接没有建立,提示用户  self.chatText.insert(Tkinter.END,'您还未与服务器端建立连接,服务器端无法收到您的消息\n')  #清空用户在Text中输入的消息  self.inputText.delete(0.0,message.__len__()-1.0)  #关闭消息窗口并退出  def close(self):  sys.exit()  #启动线程接收服务器端的消息  def startNewThread(self):  #启动一个新线程来接收服务器端的消息  #thread.start_new_thread(function,args[,kwargs])函数原型,  #其中function参数是将要调用的线程函数,args是传递给线程函数的参数,它必须是个元组类型,而kwargs是可选的参数  #receiveMessage函数不需要参数,就传一个空元组
        thread.start_new_thread(self.receiveMessage,())  def main():  client = ClientUI()  client.startNewThread()  client.root.mainloop()  if __name__=='__main__':  main()  

转载于:https://www.cnblogs.com/shione/p/7274723.html

Python在线聊天软件(Tkinter)相关推荐

  1. Python在线聊天

    发布一个用Python实现的一个在线聊天,主要功能是实现客户端与服务器端的双向通信,这个小东西用到的主要知识点: 1.Python Socket: 2.Python Tkinter库. 当然也应该了解 ...

  2. Python在线聊天室(windows)

    Python在线聊天室(windows) 1.:准备系统参数配置模块 (settings.py) #服务器地址 HOST = 'localhost' #服务器端口 PORT = 9999 #服务器管道 ...

  3. Python在线聊天室

    基于Django&Websocket实现在线聊天室 痛点 痛点解决方案 轮询 长轮询 Websocket Django配置Websocket 前端连接Websockt 痛点 服务端(后端)需要 ...

  4. python制作聊天软件_一步一步教你做聊天软件(Python实现+非阻塞)

    首先,我们需要知道实现怎么样的聊天: 1.不是单工或者半双工 2.我可以发消息,也可以不发消息,并且不影响我收消息 3.我的消息不会发给自己,我的消息可以发给其他所有人 4.暂时没有GUI,只要会做了 ...

  5. 基于python的聊天软件的设计与实现_Python基于TCP实现会聊天的小机器人功能示例...

    本文实例讲述了Python基于TCP实现会聊天的小机器人功能.分享给大家供大家参考,具体如下: 一 代码 1.服务端程序 import socket words ={'how are you?':'F ...

  6. 基于信鸽的在线聊天软件(一)

    服务端和客户端的搭建 平台选择 首先想到的是用服务器搭,然而学校封端口,虚拟服务器又麻烦的很,所以考虑到了用云服务.两个选择,腾讯信鸽和百度云推送,本项目基于信鸽. 信鸽开发者中心 http://xg ...

  7. PHP多人聊天系统,ttltCha​tPHP多人在线聊天系统软件源码 v0.0.12

    ttltChatPHP多人在线聊天系统软件源码 v0.0.12 ttltChat(online_chat)在线聊天软件是用PHP写的在线聊天软件:引入online_chat简单.方便:online_c ...

  8. php聊天工具下载,online_chat PHP聊天软件

    简介 online_chat服务端是用PHP写的在线聊天软件:引入online_chat简单.方便:online_chat服务端结构分成server服务程序和web的api组成:server服务程序用 ...

  9. 在线聊天App研发说明(android学习总结)

    初识android 确定学习android之后,开始动手,跟之前做过android的同事,要了开发环境和一本电子书<深入浅出Android--Google手持设备应用程序设计>.书很薄只有 ...

最新文章

  1. 有6个候选人,100个选民,每个选民选择一个侯选人投票;从键盘输入每个选民选择的候选人名,统计并输出6个候选人的票数。java,c++实现
  2. Mybatis 通用 Mapper 使用 ①
  3. 实验6Linux系统开发环境,哈工大嵌入式操作系统课件—6 Linux开发环境1-linux基.ppt...
  4. spring与memcache的整合
  5. [网络安全自学篇] 三.Burp Suite安装配置、Proxy基础用法及流量分析示例
  6. ON TOP-N and pagination queries
  7. ​Redis分布式锁,你真的用对了吗?
  8. Linux shell脚本的建立与执行
  9. redis数据库无法写入导致的bug
  10. html5中的input(type=file)的multiple属性,实现多文件上传,并用js控制文件大小,数量
  11. 读取敏感词库内容,讲某段字符里面的敏感词替换成*
  12. 谷歌浏览器android插件开发工具,ARC Welder插件 - 将安卓应用APK安装到谷歌浏览器并运行...
  13. (网络)网络层:IP协议解析、地址管理(IP地址、子网掩码)、路由选择
  14. 【多线程】初识多线程
  15. Karto跑下载的数据集
  16. 升级鸿蒙系统手机网络信号变差了,这是为什么?
  17. 将西瓜书中的表格数字化与可视化
  18. CSS3 animation-fill-mode详解
  19. 关于Trunk封装的协议和模式。如何配置trunk
  20. JavaScript手写(持续更新)

热门文章

  1. 【Android App】实战项目之使用OpenCV人脸识别实现找人功能(附源码和演示 超详细)
  2. Poisson image editing算法实现的Matlab代码解析
  3. 苹果手机如何解压php文件,centos怎么解压文件
  4. 直播视频讲解-【10分钟完成一个物联网应用】快上车
  5. websocket 频道拦截器 介绍和使用
  6. 常用类(Date,Calendar,SimpleDateFormat,Math,System)
  7. 行走的POS -- 新国都NEXGO引领移动支付新方式
  8. react 使用antd的日期选择框中文失效,只有年为中文, 其他为英文 。
  9. Flutter极光推送集成小米厂商通道【教程】
  10. 用爬虫不会登陆网站?那我建议你用这款工具