昨天被一同学告知,网上的一个QQ密码库中有我的一条记录,当时我就震惊了,赶紧换了密码。当然了,这件事也给了我一个警示,那就是定期的更换自己的QQ密码,会比较的安全。

然后就自己写了个密码保护的小工具。虽然我们没有必要写这么个程序,但是为了复习巩固一下之前学过的知识,还是做点什么吧。

上图

口令正确

口令错误

代码

本实验是基于Python来实现,使用Tkinter来写的界面。

以当前月份为算子来获取md5加密后的随机字符串来作为密码。

# coding:utf-8

import sys

reload(sys)

sys.setdefaultencoding('utf8')

# __author__ = '郭 璞'

# __date__ = '2016/9/13'

# __Desc__ = 根据月份生成不同的密码

from hashlib import md5

from time import *

from Tkinter import *

# 获取当前月 月份

def getMonth():

month_ = localtime().tm_mon

return month_

# 根据口令来返回密码或者错误信息

def generatepassword(password):

print password

if password == "芝麻开门":

full = md5(str(getMonth())).hexdigest()

month = getMonth()

return str('QQ密码:').encode('gbk')+str(full[month:month+10])

else:

return "╭(╯^╰)╮,不给密码".encode('gbk')

# 此函数的神奇之处就在于能够实时的更新密码结果区域的内容

def updatestate(pswd,kouling):

result = generatepassword(kouling)

print result.decode('gbk')

print "-----------------------"

pswd.set(result.decode('gbk'))

# 界面形式来展示

def showresult():

tk = Tk()

# 记录用户输入信息

kouling = StringVar()

# 记录密码信息

pswd = StringVar()

pswd.set('密码待显区')

frame1 = Frame(tk)

Label(frame1, text='输入口令').pack(side=LEFT, expand=YES)

Entry(frame1, textvariable=kouling).pack()

frame1.pack(side=TOP)

frame2 = Frame(tk)

Label(frame2, text='本次密码').pack(side=LEFT, expand=YES)

Entry(frame2, textvariable=pswd,state='readonly').pack()

frame2.pack(side=TOP)

frame3 = Frame(tk)

btn_pull = Button(frame3, text='获取密码', command=lambda: updatestate(pswd,kouling.get()))

# btn_pull.bind(citycode.get(),update_weather)

btn_pull.pack(side=LEFT, expand=YES)

btn_quit = Button(frame3, text='退出', command=tk.quit).pack(side=LEFT, expand=YES)

frame3.pack(side=TOP)

tk.mainloop()

if __name__ == '__main__':

showresult()

核心

编,解码方面

相信大家也都看到了,代码部分多了许多的encode和decode的部分。这是因为,我们要想在终端界面上显示信息的话,需要对编码进行处理。

而我们的Python代码中有这样的一句话。

# coding:utf-8

import sys

reload(sys)

sys.setdefaultencoding('utf8')

其作用就是告诉解释器要以UTF-8的形式保存和读取源文件。

如果不这样做的话,我们就会出现下面这种乱码的情况。

终端乱码

tkinter界面乱码

所以为了避免出现乱码的情况,我们需要告诉电脑要怎么做即可。

更多关于编码,乱码的信息,不妨看下博主之前总结的一篇文章。

Tkinter界面更新

虽然Tkinter作为一套界面开发套件很不错,但是事件处理方面和swing或者mfc,C#有一定的差别的。 比方说,我们不能再一个方法内激活本方法,否则将导致递归异常,无法实现界面的更新。

由于本例需要用户输入来决定输出,所以肯定需要动态的修改界面信息的。因此博主采用了在外边重新定义一个新函数的方式来实现。

def updatestate(pswd,kouling):

result = generatepassword(kouling)

print result.decode('gbk')

print "-----------------------"

pswd.set(result.decode('gbk'))

这样,我们在Tkinter的button点击事件中就可以做到根据用户输入来决定输出了。

frame3 = Frame(tk)

# 此处为点击事件核心

btn_pull = Button(frame3, text='获取密码', command=lambda: updatestate(pswd,kouling.get()))

btn_pull.pack(side=LEFT, expand=YES)

btn_quit = Button(frame3, text='退出', command=tk.quit).pack(side=LEFT, expand=YES)

frame3.pack(side=TOP)

总结

回顾一下,本实验所得。

复习了使用Tkinter写界面的“套路”

加密算法md5

时间日期的使用

python用tkinter实现qq_Python+Tkinter 密保小工具-阿里云开发者社区相关推荐

  1. 如何用python开发游戏_手把手教你用Python完成一个控制台小游戏-阿里云开发者社区...

    很多人想学Python程序设计或者已经了解过一点Python程序设计基础,却没办法开发出一个项目. 今天,通过演示一个简单的控制台小游戏制作,手把手教你如何用Python编写一个游戏程序,即便你是个新 ...

  2. python聊天小程序支持私聊和多人_Python实现多人在线匿名聊天的小程序-阿里云开发者社区...

    最近看到好多设计类网站,都提供了多人在线匿名聊天的小功能,感觉很有意思,于是基于python的django框架自己写了一个,支持手动实时更名,最下方提供了完整的源码. 在线聊天地址(无需登录,开一个窗 ...

  3. python 项目学编程_《从问题到程序:用Python学编程和计算》——3.5 练习-阿里云开发者社区...

    复习下面概念:数值积分,区间分割法,舍入误差,简单重复,累积,累积变量,生成和筛选,递推,递推变量,素数(质数),因子和真因子,哥德巴赫猜想,输入循环,输入控制的循环,递归定义,递归函数,循环定义,无 ...

  4. python基础框架_Python基础框架和工具-阿里云开发者社区

    Python基础框架和工具 最近在学Python金融大数据分析,在安装Python进行大数据分析的环境时遇到很多问题,例如:在安装pandas包时候就要到各种错误,总是缺少很多安装包,最后发现利用Py ...

  5. python写web难受-pythonweb为什么不火-问答-阿里云开发者社区-阿里云

    PHP 从语言层面上讲几乎是一无是处,具体实现的质量也乏善可陈,但它胜在最要命的部署上:没有任何其他语言有像 PHP 一样适合大规模部署的方式.基本上装好 Apache/mod_php 之后,PHP ...

  6. python的线性链表_Python线性表——单链表-阿里云开发者社区

    Python线性表--单链表 线性表简介 线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列.线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一个直接前驱,有且只有一个直接后继, ...

  7. python红楼梦词频统计_用 Python 分析《红楼梦》(2)-阿里云开发者社区

    6 词频统计 完成分词以后,词频统计就非常简单了.我们只需要根据分词结果把片段切分开,去掉长度为一的片段(也就是单字),然后数一下每一种片段的个数就可以了. 这是出现次数排名前 20 的单词: (括号 ...

  8. python 变量类型list_Python基础变量类型——List浅析-阿里云开发者社区

    Python使用list 一.list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示 ...

  9. 如何阅读python文档_python 文档怎么看-问答-阿里云开发者社区-阿里云

    调用help函数,可以看到一个函数或者方法的字符串文档. In [1]: import requests In [2]: help(requests.get) Help on function get ...

最新文章

  1. PHP之文件上传: 参数enctype
  2. VS2008 error RC2170: bitmap file xxx.png is not in 3.00 format(转)
  3. Serverless 实战——使用 Rendertron 搭建 Headless Chrome 渲染解决方案
  4. Ubuntu安装PHP时候出错--xml2-config not found.
  5. 如何取消Angular rxjs Observable的订阅
  6. 如何将 DateTime 转成 UnixTime ?
  7. 不同范数下的余弦定理_第06题 | 从源头追溯「余弦定理」amp; 文理科知识点的异同...
  8. 实现滚到div时淡入效果
  9. 爬虫cookie过期_python instagram 爬虫
  10. day39-Spring 05-Spring的AOP:不带有切点的切面
  11. 内核同步机制-信号量(semaphore)
  12. 二叉树寻找祖先C语言,微软算法面试题:给定两个二叉树节点,寻找其最近共同祖先...
  13. Go语言基础练习题系列1
  14. Jmeter 接口自动化执行报错 无法找到类或者类的方法
  15. Vue源码学习1--获取源码和查找入口文件
  16. PS 如何简单的更换图片的背景色
  17. LeetCode通关:连刷三十九道二叉树,刷疯了!⭐四万字长文搞定二叉树,建议收藏!⭐
  18. 皮尔逊相关系数公式手写代码【Python+详细注解】(Pearson correlation coefficient)
  19. 当前的安全设置不允许从该位置下载文件--解决方法
  20. java pgm_(转) PGM图像处理方法详解(很好一篇)

热门文章

  1. lambda表达式的五种写法 四大内置函数式接口
  2. 游戏的基础—三消-1
  3. 照片压缩软件哪款好用?推荐5款好用的图片压缩软件
  4. 【调剂】江苏科技大学2022年硕士研究生招生调剂预告
  5. DNS安全漫谈:谁来拯救脆弱的DNS?
  6. 理财入门《聪明的投资者》阅读总结
  7. 融云Android对接视频,Android studio接入融云IM
  8. 祝贺牛辅材品牌获得第七届土巴兔生态大会 “2021年度优秀合作企业”殊荣
  9. 确定了!堡垒之夜手游国服版7月24日开测,教你用模拟器畅玩堡垒之夜电脑版
  10. ubuntu 18.04常用软件安装及配置个人使用记录