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()

Python在线聊天软件(Tkinter)的更多相关文章

  1. Go语言实践_实现一(服务器端)对多(客户端)在线聊天室

    一.目的 运用Go语言中的goroutine和通道实现一个简单的一个服务器端对多个客户端的在线聊天 软件环境:Goland,Go1.9 代码仓库链接 二.设计思路 与一对一的设计思路类似,就是加了个线 ...

  2. python练习四—简单的聊天软件

    python最强大的是什么?库支持!!有了强大的库支持,一个简单的聊天软件实现就更简单了,本项目思路如下 # 项目思路 1. 服务器的工作 * 初始化服务器 * 新建一个聊天房间 * 维护一个已链接用 ...

  3. 【Python网络编程】多线程聊天软件程序

    课程设计的时候制作的多线程聊天软件程序 基于python3.4.3 import socket import pickle import threading import tkinter import ...

  4. Python进阶开发之网络编程,socket实现在线聊天机器人

    系列文章 √第一章 元类编程,已完成 ; √第二章 网络编程,已完成 ; 本文目录 什么是socket?创建socket客户端创建socket服务端socket工作流程图解socket公共函数汇总实战 ...

  5. 43.QQ聊天软件GUI窗口编写

    QQ聊天软件代码功能编写 一,Tkinter聊天界面编写 1,聊天软件客户端界面开发-1 Tkinter的模块(“TK接口”)是标准的Python接口从Tk的GUI工具包 https://i.cnbl ...

  6. 基于Server-Sent Event的简单在线聊天室

    Web即时通信 所谓Web即时通信,就是说我们可以通过一种机制在网页上立即通知用户一件事情的发生,是不需要用户刷新网页的.Web即时通信的用途有很多,比如实时聊天,即时推送等.如当我们在登陆浏览知乎时 ...

  7. 调研一类软件的发展演变—聊天软件( 1000-2000 words, in Chinese)

    因为本人平时对聊天软件的涉及比周边其他同学而言所涉及的是比较多的.所以说想写写这个东西.(ps本文里面的具体通讯信息的时间安排不分先后) 也许最起初的通讯信息的传达是利用.烽火狼烟这一类可以远距离视觉 ...

  8. 局域网聊天软件(winsocket)

    LANChat工作整理 2013/8/22 程序实现功能: 局域网聊天软件,启动即可找到在线设备,并能够进行简单的文字聊天. 其实下面这个框图已经说明了程序的绝大部分功能原理. 核心类的程序框图 我觉 ...

  9. 白月黑羽Python在线教程

    推荐白月黑羽Python在线教程 白月黑羽 站在初学者的角度为大家安排了Python学习教程,帮助大家迅速掌握程序开发技能. http://www.python3.vip/doc/tutorial/p ...

随机推荐

  1. hive记录-cdh配置hive和sentry

    1.cdh添加组件-sentry-选择主机-配置数据库 2.配置数据库 1)mysql -uroot -p 2) create database sentry DEFAULT CHARSET utf8 ...

  2. Program License Agreement updated/The updated Apple Developer Program License Agreement needs to be reviewed.

    Apple APP添加新APP时提示The updated Apple Developer Program License Agreement needs to be reviewed. 解决办法 登 ...

  3. Dash VS Underscore

    Dash Dashes are recommended by Google over underscores (source). Dashes are more familiar to the end ...

  4. springboot 日志【转】【补】

    市面上的日志框架 日志门面 (日志的抽象层) 日志实现 JCL(Jakarta Commons Logging)(2014) SLF4j(Simple Logging Facade for Java) ...

  5. java Calendar 入门【转】

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c = Calendar. ...

  6. vue2.0 子组件 父组件之间的传值

    常用的子组件给父组件传值/调父组件方法 //子组件let val = "";//可以是任意类型this.$emit('fatherFun', val); //父组件<fath ...

  7. Extjs 设置GridPanel单元格可选择高兼容写法

    网上大部分都是这种 <style type= "text/css" > .x-selectable, .x-selectable * { -moz-user-selec ...

  8. Keil5创建GPIO

    软件仿真如下图 Main.c内容 #include "stm32f10x.h" int main(void) { GPIO_InitTypeDef GPIO_InitStructu ...

  9. 【python小练】图片爬虫之BeautifulSoup4

    Python3用不了Scrapy! Python3用不了Scrapy! Python3用不了Scrapy! [重要的事情说三遍,据说大神们还在尝试把scrapy移植到python3,特么浪费我半个小时 ...

  10. org.apache.jasper.JasperException: Unable to convert string

    最佳实践 不要使用idea生成的模板,头文件宁愿不要省事,除非知道有什么副作用. <!--<!DOCTYPE web-app PUBLIC--> <!--"-//Su ...