Python编程教程:用tkinter写个密码器
python内置的GUI编程tkinter小巧灵活,本文以密码码器示例,所有注册的用户皆会被持久化
流程
用户登录/注册,成功则提示欢迎语,不正确或密码错误有相应警告
不存在帐户则提醒注册,并回调子页面注册,需要密码确认,注册已存在用户会被提醒
结构
两个window窗口,一个负责主界面引入了背景图,一个子负责注册账号密码,ui以tk为后缀名。event为tk的事件回调,store以pickle字典序列化存储类,usrs.pickle为持久化存储
entry │ event.py │ login_tk.py │ sign_up_tk.py │ store.py │ usrs.pickle │ ├─.vscode │ settings.json │ ├─img │ coffee.png │ java_classLoader.gif │ web_spring.png │ yms3mhzsf22.jpg │ └─__pycache__event.cpython-37.pyclogin.cpython-37.pycsign_up_tk.cpython-37.pycstore.cpython-37.pyc
入口UI
login_tk.py
from tkinter import * from tkinter import ttkfrom event import login from sign_up_tk import usr_sign_up""" 定义界面 """# 1. 根实例 root = Tk() root.title("Wellcome to Login") root.geometry('400x350')# 2.加载图片 canvas = Canvas(root, width=400, height=150, bg='green') image_file = PhotoImage(file='img/coffee.png') image = canvas.create_image(200, 0, anchor='n', image=image_file) # 指定绘制方向 canvas.pack(side='top') # 文本语录 ttk.Label(root, text='欢迎使用密码器', font=('Arial', 16)).pack()# 3.用户静态文本 ttk.Label(root, text='用户:', font=('Arial', 14)).place(x=50, y=185) ttk.Label(root, text='密码:', font=('Arial', 14)).place(x=50, y=215)# 4.帐号输入变量 uname = StringVar() uname.set('example@pardon110.com') ttk.Entry(root, textvariable=uname, font=('Arial', 14)).place(x=120, y=185) # 5.密码输入 pwd = StringVar() # 6.文本变量绑定参数 ttk.Entry(root, textvariable=pwd, font=('Arial', 14), show='*').place(x=120, y=215)# 7.事件回调使用变量 ttk.Button(root, text='登录', command=lambda: login(uname.get(), pwd.get())).place(x=120, y=270)# 8. 注册加子页面 ttk.Button(root, text='注册', command=lambda: usr_sign_up(root)).place(x=250, y=270)# 6.事件循环 root.mainloop()
注册UI
sign_up_tk.py
from tkinter import * from tkinter import ttk from event import sign_up_webdef usr_sign_up(root):# 定义在主窗口上的次窗口window_sign_up = Toplevel(root)window_sign_up.geometry('300x200')window_sign_up.title('注册')# 用户名uname = StringVar()uname.set('example@pardon110.com')ttk.Label(window_sign_up, text="用户名:").place(x=10, y=10)ttk.Entry(window_sign_up, textvariable=uname).place(x=130, y=10)# 密码new_pwd = StringVar()ttk.Label(window_sign_up, text='密码: ').place(x=10, y=50)ttk.Entry(window_sign_up, textvariable=new_pwd,show='*').place(x=130, y=50)# 密码确认new_pwd_confirm = StringVar()ttk.Label(window_sign_up, text='重复密码: ').place(x=10, y=90)ttk.Entry(window_sign_up, textvariable=new_pwd_confirm,show='*').place(x=130, y=90)# 确认注册btn_comfirm_sign_up = ttk.Button(window_sign_up, text='注册', command=lambda: sign_up_web(new_pwd.get(), new_pwd_confirm.get(), uname.get(), window_sign_up)).place(x=180, y=120)
事件回调
event.py
from tkinter import * from tkinter import ttk import tkinter.messagebox as msgboxfrom store import Store""" 回调事件模块 """def login(uname, pwd):usrs_info = Store()._usrsif uname in usrs_info:if pwd == usrs_info[uname]:msgbox.showinfo(title="欢迎您", message='您还好吗? ' + uname)else:msgbox.showerror(message='错误! 密码不正确, 请重试.')else:msgbox.askyesno('欢迎 '+uname, '你还没有注册,请先注册')def sign_up_web(pwd,confirm,uname,window_sign_up):db = Store()if pwd != confirm:print(pwd,confirm)msgbox.showerror('错误', '两次输入的密码不一致!')elif uname in db._usrs:msgbox.showerror('警告', '该用户已经注册过!')else:# 注册新用户db.add(uname,pwd).save()msgbox.showinfo('欢迎'+uname, '您已经注册成功!')# 销毁注册窗口window_sign_up.destroy()
存储类
import pickle""" 数据存储模块 """class Store:def __init__(self, db="usrs.pickle"):self._db = dbself._usrs = self._read()def _read(self):try:# 反序列化对象with open(self._db, 'rb') as f:self._usrs = pickle.load(f)except FileNotFoundError:# 序列化对象with open(self._db, 'wb') as f:# 默认内置管理员self._usrs = {'admin': '123456'}# 持久化写入文件pickle.dump(self._usrs, f)return self._usrs# 持久化def save(self):with open(self._db, 'wb') as f:pickle.dump(self._usrs, f)f.close()# 添加新用户def add(self, uname, pwd):self._usrs[uname] = pwdreturn selfdef show(self):print(self._usrs)db = Store() # db.add("zhansang","654321") # db.save() db.show()
其它
tk图像类只支持gif及png等有限图片,布局管理支持相对定位(pack自动计算),坐标系place,grid栅格系统
Python编程教程:用tkinter写个密码器相关推荐
- 人人都能学会的python编程教程1:第一行代码
前言 众所周知,现在IT行业很火,行业薪酬也很高,国家在2017年也发布了人工智能教育的推广计划,人人会编程的时代将要到来.不会编程.不懂编程可能有些跟不上时代的节奏,普通人不懂技术也许会觉得这个很难 ...
- BP神经网络理解原理——用Python编程实现识别手写数字(翻译英文文献)
BP神经网络理解原理--用Python编程实现识别手写数字 备注,这里可以用这个方法在csdn中编辑公式: https://www.zybuluo.com/codeep/note/163962 一 ...
- 人人都能学会的python编程教程(基础篇)完整版
人人都能学会的python编程教程1:第一行代码 人人都能学会的python编程教程2:数据类型和变量 人人都能学会的python编程教程3:字符串和编码 人人都能学会的python编程教程4:关系运 ...
- python是人都能学会_人人都能学会的python编程教程15:高级特性2
生成器 如果你想要一百万个数,而这些数里只有一百个数是你经常要用的,剩下的都几乎不怎么会用到,那么如果直接把这一百万个数全部放在list中是不明智的因为这会浪费较多存储空间,生成器就是为了解决这个问题 ...
- 零基础新手自学Python编程教程入门精通学习资料网站大全
零基础新手自学Python编程教程入门精通学习资料网站大全 今天说下关于Python的一些普及知识,以及学习资料,这一节我来跟大家分享下. 1 为什么要学习Python? 1 Python是一个脚本语 ...
- python编程教程第九讲_Python入门学习视频,最全面讲解视频无偿分享,这些基础知识你都懂了吗?...
2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 如 ...
- 树莓派python编程入门与实战解压密码_树莓派Python编程入门与实战
目录 第一部分 树莓派编程环境 第1章 配置树莓派 3 1.1 获取树莓派 3 1.1.1 了解树莓派的历史 3 1.1.2 为什么要学习用Python 在树莓派上进行编程 4 1.2 获取树莓派 5 ...
- python俄罗斯方块教程_python tkinter实现俄罗斯方块 基础版
本项目最终效果见本人b站投稿av81480858 简介部分 本项目最终代码已上传github: https://github.com/BigShuang/Tetris 的1_BASIC文件夹 .其中1 ...
- 儿童python编程教程-儿童Python趣味编程课程
儿童Python趣味编程课程 南京杜恩培训隶属于南京卡尔威特教育咨询有限公司,秉承"以人为本"的办学宗旨,致力于给每一位前来学习的学员专业优质的服务.中心成立于2002年,在南京已 ...
最新文章
- uva 1610 聚会游戏
- 形状相似的物品_我的世界:MC早期物品和现在的对比,差别很大
- python sklearn.decomposition.PCA 主成分分析, 原理详解
- aes c# java_AES加密,C#和java相同
- 关于A/D方面的小结
- springboot ---- sts如何启动两个实例
- 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流
- MVC PartialView
- 修改MYSQL 密码
- 联想 键盘 fn linux,开发者提交补丁,Linux 5.10 或支持联想 PC 键盘快捷键
- 一行代码能做什么? 看到最后一个我终于忍不住...
- 如何使用Xcode7免费真机调试
- 限制firefox上传框宽度
- ajax请求怎么判断没有更多内容,怎么知道ajax 请求完了,想在数据没请求完时,页面有一个loading效果...
- oracle按特定字符截取字符串_LeetCode基础算法题第159篇:找出由特定字符数组组成的字符串...
- AngularJS 1.x系列:AngularJS控制器(3)
- 微信小程序使用animation动画实现消息从左向右滚动
- 2010年3月份中国物流与采购联合会发布中国制造业采购经理指数为55.1%
- hashmap是单向链表吗_LRU(Least Recent Used) java 实现为这么采用HashMap+双向链表
- vue源码分析系列三:render的执行过程和Virtual DOM的产生
热门文章
- css-animaton-随堂-风车动画-加载动画-走路动画
- Laravel 中使用Goutte + GuzzleHttp 组件设置 headers无效的原因探究以及解决方案
- Jupyter notebook 使用多个Conda 环境
- linux中MySQL密码的恢复方法
- 1.Ehcache(01)——简介、基本操作
- LNMP--访问控制
- Silverlight开发历程—C#代码添加动画
- 【转载】WinCE中的RAM-Based Registry与HIVE-Based Registry
- Windows Server 2008十大新特性
- 计算机三级信息管理技术考试大纲