Python-tkinter-聊天窗口GUI
时间:2020-05-15
本文章向大家介绍Python-tkinter-聊天窗口GUI,主要包括Python-tkinter-聊天窗口GUI使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 环境python3.x 3.x之后tkinter自带,jupyter notebook/pycharm
常见的聊天窗口
- 聊天窗口布局
左上:聊天历史信息显示
左中:当前信息编辑区域
左下:按钮区域
右侧:显示展示区域
- Frame控件
容器区域布局
frmLT,frmLC,frmLB,frmRT
#创建frmLT容器 frmLT = Frame(width = 500, height = 320, bg = 'white') frmLC = Frame(width = 500, height = 150, bg = 'white') frmLB = Frame(width = 500, height = 30) frmRT = Frame(width = 200, height = 500)
- 控件对象命名规则
“控件类型” + “功能”
frmLT: frame + LeftTop txtMsg: text控件 + 消息 btnSend: button控件 + 发送
- 消息处理:
txtMsg = Text(frmLC) txtMsg.bind("<KeyPress-Up>", sendMsgEvent) btnSend = Button(frmLB, text = '发送', width = 8, command = sendMsg) btnCancel =Button(frmLB, text = '取消', width = 8, command = cancelMsg)
- 图片处理:
imgInfo = PhotoImage(file = "timg-2.gif") lblImage = Label(frmRT, image = imgInfo) lblImage.image = imgInfo
- sendNsg()
回调函数,通过函数指针调用的函数
def sendMsg():#发送消息 strMsg = "我:" + time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())+ '\n' txtMsgList.insert(END, strMsg, 'greencolor') txtMsgList.insert(END, txtMsg.get('0.0', END)) txtMsg.delete('0.0', END)
- cancelMsg()
def cancelMsg():#取消信息 txtMsg.delete('0.0', END)
- sendMsgEvent(event)
def sendMsgEvent(event):#发送消息事件 if event.keysym =='Up': sendMsg()
- grid()界面布局控制
frmLT.grid(row = 0, column = 0, columnspan = 2, padx = 1, pady = 3) frmLC.grid(row = 1, column = 0, columnspan = 2, padx = 1, pady = 3) frmLB.grid(row = 2, column = 0, columnspan = 2) frmRT.grid(row = 0, column = 2, rowspan = 3, padx =2, pady = 3) #固定大小 frmLT.grid_propagate(0) frmLC.grid_propagate(0) frmLB.grid_propagate(0) frmRT.grid_propagate(0) btnSend.grid(row = 2, column = 0) btnCancel.grid(row = 2, column = 1) lblImage.grid() txtMsgList.grid() txtMsg.grid()
- 主事件循环
app.mainloop()
- 代码整体:
from tkinter import * import time def main(): def sendMsg():#发送消息 strMsg = "我:" + time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())+ '\n' txtMsgList.insert(END, strMsg, 'greencolor') txtMsgList.insert(END, txtMsg.get('0.0', END)) txtMsg.delete('0.0', END) def cancelMsg():#取消信息 txtMsg.delete('0.0', END) def sendMsgEvent(event):#发送消息事件 if event.keysym =='Up': sendMsg() #创建窗口 app = Tk() app.title('与python聊天') #创建frame容器 frmLT = Frame(width = 500, height = 320, bg = 'white') frmLC = Frame(width = 500, height = 150, bg = 'white') frmLB = Frame(width = 500, height = 30) frmRT = Frame(width = 200, height = 500) #创建控件 txtMsgList = Text(frmLT) txtMsgList.tag_config('greencolor',foreground = '#008C00')#创建tag txtMsg = Text(frmLC) txtMsg.bind("<KeyPress-Up>", sendMsgEvent) btnSend = Button(frmLB, text = '发送', width = 8, command = sendMsg) btnCancel =Button(frmLB, text = '取消', width = 8, command = cancelMsg) imgInfo = PhotoImage(file = "timg-2.gif") lblImage = Label(frmRT, image = imgInfo) lblImage.image = imgInfo #窗口布局 frmLT.grid(row = 0, column = 0, columnspan = 2, padx = 1, pady = 3) frmLC.grid(row = 1, column = 0, columnspan = 2, padx = 1, pady = 3) frmLB.grid(row = 2, column = 0, columnspan = 2) frmRT.grid(row = 0, column = 2, rowspan = 3, padx =2, pady = 3) #固定大小 frmLT.grid_propagate(0) frmLC.grid_propagate(0) frmLB.grid_propagate(0) frmRT.grid_propagate(0) btnSend.grid(row = 2, column = 0) btnCancel.grid(row = 2, column = 1) lblImage.grid() txtMsgList.grid() txtMsg.grid() #主事件循环 app.mainloop() if __name__ == "__main__": main()
原文地址:https://www.cnblogs.com/forforever/p/12894343.html
- 接口测试 | 21 基于flask弄个restful API服务出来
- 数论部分第二节:埃拉托斯特尼筛法 埃拉托斯特尼筛法
- [接口测试 -基础篇] 20 用flask写一个简单server用于接口测试
- 接口测试 | urllib篇 19 urllib基本示例
- 接口测试 | urllib篇 18 urllib介绍
- 【专知-Deeplearning4j深度学习教程01】分布式Java开源深度学习框架DL4j安装使用: 图文+代码
- .Net Core Runtime安装说明
- 【专知-Deeplearning4j深度学习教程02】用ND4J自己动手实现RBM: 图文+代码
- 【专知-Deeplearning4j深度学习教程03】使用多层神经网络分类MNIST数据集:图文+代码
- TypeScript 1.6发布:完全支持React/JSX
- 【专知-Java Deeplearning4j深度学习教程04】使用CNN进行文本分类:图文+代码
- sql server之数据库语句优化
- 【专知-Java Deeplearning4j深度学习教程05】无监督特征提取神器—AutoEncoder:图文+代码
- 平衡树初阶——AVL平衡二叉查找树+三大平衡树(Treap + Splay + SBT)模板【超详解】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法