Python+Tkinter 密保小工具
昨天被一同学告知,网上的一个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 密保小工具的更多相关文章
- python tkinter模块小工具界面
代码 #-*-coding:utf-8-*- import os from tkinter import * root=Tk() root.title('小工具') #清空文本框内容 def clea ...
- Python趣味实用小工具
代码地址如下:http://www.demodashi.com/demo/12918.html python 趣味实用小工具 概述 用python实现的三个趣味实用小工具: 图片转Execl工具 , ...
- python提效小工具-统计xmind用例数量
问题:做测试的朋友们经常会用到xmind这个工具来梳理测试点或写测试用例,但是xmind8没有自带的统计测试用例,其他版本的xmind有些自带节点数量统计功能,但也也不会累计最终的数量,导致统计测试工 ...
- 几个可以提高工作效率的Python内置小工具
在这篇文章里,我们将会介绍4个Python解释器自身提供的小工具.这些小工具在笔者的日常工作中经常用到,减少了各种时间的浪费,然而,却很容易被大家忽略.每当有新来的同事看到我这么使用时,都忍不住感叹, ...
- 纯Python综合图像处理小工具(3)10种滤镜算法
<背景> 滤镜处理是图像处理中一种非常常见的方法.比如photoshop中的滤镜效果,除了自带的滤镜,还扩展了很多第三方的滤镜效果插件,可以对图像做丰富多样的变换:很多手机app实现了实 ...
- 纯Python综合图像处理小工具(1)分通道直方图
平时工作经常需要做些图像分析,需要给图像分通道,计算各个通道的直方图分布特点,这个事儿photoshop也能做,但是用起来不方便,且需要电脑上安装有PS软件,如果用OpenCV, 更是需要在visua ...
- python: 实现sha1小工具
File1: sha1.py File2: sha1.bat ------------------ File1: sha1.py import hashlib import os,sys def Ca ...
- 纯Python综合图像处理小工具(4)自定义像素级处理(剪纸滤镜)
上一节介绍了python PIL库自带的10种滤镜处理,现成的库函数虽然用起来方便,但是对于图像处理的各种实际需求,还需要开发者开发自定义的滤镜算法.本文将给大家介绍如何使用PIL对图像进行自定义 ...
- python内置小工具
python -m http.server # 启动一个下载服务器 echo '{"job": "developer", "job": &q ...
随机推荐
- 【PYTHON】用户登录三次错误锁定
黑名单:blacklist.txt 用户名单:username_password.py # Author:Stephen Yuan # 用户名和密码 username_password = { ', ...
- ubuntu14.4 分辨率偏低
最近出了 14.04 LTS,就想安装上玩一玩.还是用 easybcd 从 windows硬盘安装.装完之后,显示效果不好于是做了如下处理: 1. 按下windows键,搜索 "附加驱动&q ...
- shell入门笔记2:字符串、数组、echo与printf
说明: 本文是关于http://c.biancheng.net/cpp/shell/的相关笔记 shell字符串 字符串可以用单引号,也可以用双引号,也可以不用引号. 1 #!/bin/bash 2 ...
- Evensgn 捡树枝
问题 A: Evensgn 剪树枝 时间限制: 1 Sec 内存限制: 128 MB 题目描述 繁华中学有一棵苹果树.苹果树有 n 个节点(也就是苹果),n − 1 条边(也就 是树枝).调皮的 E ...
- C++Primer学习——未定义行为
定义: 主要是求值顺序的问题 int i = f1() + f2(); //我们无法知道是f1 还是 f2先被调用 而且求值顺序和优先级和结合律无关,比如: f() + g()*h( ...
- hdu 3948 后缀数组
The Number of Palindromes Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (J ...
- bzoj 2734: [HNOI2012]集合选数
题目描述 <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中. 同学们不喜 ...
- [Noi2016]优秀的拆分
来自F allDream的博客,未经允许,请勿转载,谢谢. 如果一个字符串可以被拆分为 AABB 的形式,其中 A和 B是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串 aab ...
- C语言程序第二次作业
(一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 include int mian() { printf(&q ...
- IBM-x3650做RAID5更换硬盘后rebuild步骤分享
1.按Ctrl+H进入WebBIOS配置 2.点击start 3.点击Drives,对slot5进行配置 4.选择slot5,选择Properties,点击Go按钮 5.选择MakeUnconfGoo ...