OK,既然可以随时更新,那我就用它来记录我的学习历程啦!
2017/7/3
这个是一次学习的经历...
tkinter 中的frame容器写的那个界面我是直接在网上搜了一个范本...但是frame不会自动显示最末尾一行的内容...输入了之后超出部分无法自动显示...额解决了此问题的小伙伴可以留言讨论哇

服务器端demo

# -*- coding: utf-8 -*-
import socket
HOST = ''
PORT = 10022s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'connect successful'
while 1:data = conn.recv(1024).decode('utf-8')if data=="":conn.close()print 'connect successful'else:print data

客户端demo

# -*- coding: utf-8 -*-
import Tkinter as tk
import threading
import datetime
import time
import socketdef sendmessage(*func):#在聊天内容上方加一行 显示发送人及发送时间msgcontent = '我:' + time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) + '\n 'text_msglist,text_msg = functext_msglist.insert(tk.END, msgcontent, 'green')text_msglist.insert(tk.END, text_msg.get('0.0', tk.END))s.sendall(text_msg.get('0.0', tk.END).encode('utf-8'))text_msg.delete('0.0', tk.END)def buttonClick():password='chenhao'if entry.get()==password:show_label.config(text='correct')password_window.destroy()root = tk.Tk()root.title(u'与xxx聊天中')#创建几个frame作为容器frame_left_top   = tk.Frame(width=380, height=270, bg='white')frame_left_center  = tk.Frame(width=380, height=100, bg='white')frame_left_bottom  = tk.Frame(width=380, height=25)frame_right     = tk.Frame(width=170, height=400, bg='white')##创建需要的几个元素text_msglist    = tk.Text(frame_left_top)text_msg      = tk.Text(frame_left_center)button_sendmsg   = tk.Button(frame_left_bottom, text='发送',command=lambda:sendmessage(text_msglist,text_msg))#创建一个绿色的tagtext_msglist.tag_config('green', foreground='#008B00')#使用grid设置各个容器位置frame_left_top.grid(row=0, column=0, padx=2, pady=5)frame_left_center.grid(row=1, column=0, padx=2, pady=5)frame_left_bottom.grid(row=2, column=0)frame_right.grid(row=0, column=1, rowspan=3, padx=4, pady=5)frame_left_top.grid_propagate(0)frame_left_center.grid_propagate(0)frame_left_bottom.grid_propagate(0)#把元素填充进frametext_msglist.grid()text_msg.grid()button_sendmsg.grid(sticky='e')else:show_label.config(text='error')def buttonClick2():print "ok"def main():password_window.mainloop()
t0 = threading.Thread(target=main)if __name__ == '__main__':HOST = 'localhost'PORT = 10022s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((HOST, PORT))print 'connect successful'password_window = tk.Tk()  button=tk.Button(password_window,text="确认",command = buttonClick)entry=tk.Entry(password_window,show='*')label=tk.Label(password_window,text='Password:')show_label=tk.Label(password_window)#slider=tk.Scale(password_window,from_=0,to=100)label.pack()entry.pack()button.pack()show_label.pack()t0.setDaemon(True)t0.start()

啊...说一下目前的进度,以及已解决的问题恩...演示版本只能实现由客户端单向发送给服务器端以自娱自乐...
这个自娱自乐当中涉及到了代码编码格式转换问题
decode('utf-8')是将utf-8格式的代码自动转换成unicode。print()函数会自动识将Unicode转换成内在需要的编码格式
encode('utf-8')是将其他格式的代码转换成utf-8码,以便将字符串传递给某些内置函数
如上述demo中就需要
s.sendall(text_msg.get('0.0', tk.END).encode('utf-8'))
这样字符串经过处理之后,socket模块中的sendall()函数才能处理获得的数据,否则报错
额...这里面还有一个密码登录界面...
输入密码正确后,会关闭此页面并跳入另一个新界面。这其中mainloop()函数。
通过实验发现...一个程序只允许一个mainlooop()函数的存在。然而,第二个界面是通过第一个界面生成的,所以mainloop()函数先于第二个界面生成。我们知道mainloop作为一个循环是空占cpu的...也就是说在主任务线上的后续操作都被卡死了...所以这里我引入了一个线程,将mainloop丢到一个线程中去,这样大家就能愉快的玩耍啦!
额...涉及线程,我把最简单的事例线程也贴上来啦,大家直接用就好了

#coding=utf-8
import threading
from time import ctime,sleepdef music(func):for i in range(2):print "I was listening to %s. %s" %(func,ctime())sleep(1)def move(func):for i in range(2):print "I was at the %s! %s" %(func,ctime())sleep(5)threads = []
t0 = threading.Thread(target=music,args=("ok",))
threads.append(t0)
t1 = threading.Thread(target=move,args=("haha",))
threads.append(t1)if __name__ == '__main__':for t in threads:t.setDaemon(True)t.start()

PS:仔细读过客户端代码的盆友可能发现,我的mainloop()是挂在password_window下的,而我紧接着明明将password_window给destory了,为什么我的后续窗口可以正常运行呢?...额,我猜是系统保留了资源供后续使用吧...谁知道呢...我嫌多开一个空的主窗口太冗余了,还要去查怎样隐藏窗口...就酱了啊...(;′⌒`)关于为啥destory了的窗口mainloop()还能正常使用...欢迎大神解惑...
额好像离全双工还远着呢,我目前的想法是做一个  客户端——服务器端——客户端  这样子的由服务器点对点转发消息的聊天机制。想法就是这样辣,我去慢慢拼积木咯
想直接跑代码的同学请先开服务器端,然后再开客户端。不然报错了,我不接受质疑╭(╯^╰)╮

更新于2017 7 12  22:46

python全双工聊天窗口编程学习之旅相关推荐

  1. 《Python零基础快乐学习之旅》学习笔记13——模块的设计与应用

    文章目录 第13章 模块的设计与应用 13.1 将自建的函数存储在模块中 13.1.1 准备工作 13.1.2 创建函数内容的模块 13.2 应用函数模块 13.2.1 import 语句 13.2. ...

  2. 《Python零基础快乐学习之旅》学习笔记4——基本输入与输出

    第4章 基本输入与输出 4.1 Python的辅助说明help() help()函数可以列出某一个Python的指令或函数的使用说明. >>> help(print) Help on ...

  3. 《Python零基础快乐学习之旅》学习笔记3——Python的基本数据类型

    第3章 Python的基本数据类型 1. 数值数据类型 1.1 整数与浮点数的运算 1.2 强制数据类型的转换 1.3 数值运算常用的函数 2. 布尔值数据类型 3. 字符串数据类型 3.1 字符串的 ...

  4. 超级辣鸡的编程学习之旅 之 第一篇~~

    背景介绍:博主前十八年前只用过电脑看电视聊QQ,其他计算机知识一窍不通,高考后确定读计算机相关的专业之后就收藏了很多编程学习视频,but初高中时我的理科成绩一直比较差,所以对编程这类知识心存畏惧,迟迟 ...

  5. 鲜衣怒马少年时-编程学习之旅

    文章目录 自我介绍: 什么是编程? 为什么要学习编程? 计划如何学习编程 编程目标 编程学习时间 未来最想进入的公司 写在最后: 自我介绍: 我叫张宏,是一名人工智能专业的在校大学生,目前在学校正在努 ...

  6. python编程初学指南电子书_Python编程初学者指南书籍和Python零基础快乐学习之旅...

    如果你刚刚接触Python编程,而且正在寻找一本实用的教程,那么这本书为你量身打造.通过阅读本书,你不仅会学到很多实用的Python编程知识,还将懂得如何在实际工作中运用这些知识.本书各个章节都配有大 ...

  7. python快乐编程—基础入门-Python零基础快乐学习之旅(K12实战训练)

    内容简介 作者简介 第1章 基本概念 1-1 认识Python 1-2 Python的起源 1-3 Python语言发展史 1-4 Python的应用范围 1-5 跨平台的程序语言 1-6 系统的安装 ...

  8. python历史背景_python学习之旅1-1(python背景、安装介绍)

    一.python介绍 1.python历史背景 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时 ...

  9. python打字效果_Python学习之旅:用Python制作一个打字训练小工具

    一.写在前面 说道程序员,你会想到什么呢?有人认为程序员象征着高薪,有人认为程序员都是死肥宅,还有人想到的则是996和 ICU. Python资源共享群:626017123 别人眼中的程序员:飞快的敲 ...

最新文章

  1. Oracle原理:11g的体系结构
  2. CSS的display:none与visible:hidden区别
  3. 【BZOJ4237】稻草人
  4. Alwayson--问题总结二
  5. BZOJ[1972] [Sdoi2010]猪国杀
  6. 前端学习(1261):接口调用fetch方法
  7. 消融实验——Ablation experiment
  8. [leetcode周赛] 1349. 参加考试的最大学生数
  9. OS 中的SID(安全标识)
  10. android qq 邮箱格式,qq邮箱怎么填写格式 qq邮箱格式写法介绍
  11. 《我这一辈子》 老舍 著
  12. 电信光纤猫虚拟服务器设置方法,电信光纤猫与无线路由器连接的设置方法
  13. UOJ#405. 【IOI2018】组合动作
  14. t420i升级固态硬盘提升_旧电脑升级!使用固态硬盘必做的5件事,让win10操作流畅如win7...
  15. 浩方cs全是虚拟服务器,在浩方里面的CS1.5 如何建立服务器
  16. 激烈竞争环境下,数字资产交易所们该如何突破?
  17. uni-app 页面跳转 方式
  18. FineBI 取日期的最大max、最小值min
  19. RDP协议简介与通讯数据加密等级及设置说明
  20. C/C++编程:默认构造函数的建构操作

热门文章

  1. 高博14讲--第七讲 视觉里程计-7.3 2D-2D:对极几何
  2. web 流程设计器探究
  3. 离散Laplace-Beltrami 算子
  4. 模电——电路中电源地、模拟地、信号地的区别与联系
  5. ndows 资源管理器,windows资源管理器如何打开
  6. 计算机科技协会知识竞赛策划书,科协活动策划书
  7. Java基础笔记(个人总结)
  8. 求职材料准备-入门导读
  9. 软考之下午题做题技巧
  10. Matlab利用函数句柄实现函数嵌套