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写个密码器相关推荐

  1. 人人都能学会的python编程教程1:第一行代码

    前言 众所周知,现在IT行业很火,行业薪酬也很高,国家在2017年也发布了人工智能教育的推广计划,人人会编程的时代将要到来.不会编程.不懂编程可能有些跟不上时代的节奏,普通人不懂技术也许会觉得这个很难 ...

  2. BP神经网络理解原理——用Python编程实现识别手写数字(翻译英文文献)

    BP神经网络理解原理--用Python编程实现识别手写数字   备注,这里可以用这个方法在csdn中编辑公式: https://www.zybuluo.com/codeep/note/163962 一 ...

  3. 人人都能学会的python编程教程(基础篇)完整版

    人人都能学会的python编程教程1:第一行代码 人人都能学会的python编程教程2:数据类型和变量 人人都能学会的python编程教程3:字符串和编码 人人都能学会的python编程教程4:关系运 ...

  4. python是人都能学会_人人都能学会的python编程教程15:高级特性2

    生成器 如果你想要一百万个数,而这些数里只有一百个数是你经常要用的,剩下的都几乎不怎么会用到,那么如果直接把这一百万个数全部放在list中是不明智的因为这会浪费较多存储空间,生成器就是为了解决这个问题 ...

  5. 零基础新手自学Python编程教程入门精通学习资料网站大全

    零基础新手自学Python编程教程入门精通学习资料网站大全 今天说下关于Python的一些普及知识,以及学习资料,这一节我来跟大家分享下. 1 为什么要学习Python? 1 Python是一个脚本语 ...

  6. python编程教程第九讲_Python入门学习视频,最全面讲解视频无偿分享,这些基础知识你都懂了吗?...

    2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 如 ...

  7. 树莓派python编程入门与实战解压密码_树莓派Python编程入门与实战

    目录 第一部分 树莓派编程环境 第1章 配置树莓派 3 1.1 获取树莓派 3 1.1.1 了解树莓派的历史 3 1.1.2 为什么要学习用Python 在树莓派上进行编程 4 1.2 获取树莓派 5 ...

  8. python俄罗斯方块教程_python tkinter实现俄罗斯方块 基础版

    本项目最终效果见本人b站投稿av81480858 简介部分 本项目最终代码已上传github: https://github.com/BigShuang/Tetris 的1_BASIC文件夹 .其中1 ...

  9. 儿童python编程教程-儿童Python趣味编程课程

    儿童Python趣味编程课程 南京杜恩培训隶属于南京卡尔威特教育咨询有限公司,秉承"以人为本"的办学宗旨,致力于给每一位前来学习的学员专业优质的服务.中心成立于2002年,在南京已 ...

最新文章

  1. uva 1610 聚会游戏
  2. 形状相似的物品_我的世界:MC早期物品和现在的对比,差别很大
  3. python sklearn.decomposition.PCA 主成分分析, 原理详解
  4. aes c# java_AES加密,C#和java相同
  5. 关于A/D方面的小结
  6. springboot ---- sts如何启动两个实例
  7. 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流
  8. MVC PartialView
  9. 修改MYSQL 密码
  10. 联想 键盘 fn linux,开发者提交补丁,Linux 5.10 或支持联想 PC 键盘快捷键
  11. 一行代码能做什么? 看到最后一个我终于忍不住...
  12. 如何使用Xcode7免费真机调试
  13. 限制firefox上传框宽度
  14. ajax请求怎么判断没有更多内容,怎么知道ajax 请求完了,想在数据没请求完时,页面有一个loading效果...
  15. oracle按特定字符截取字符串_LeetCode基础算法题第159篇:找出由特定字符数组组成的字符串...
  16. AngularJS 1.x系列:AngularJS控制器(3)
  17. 微信小程序使用animation动画实现消息从左向右滚动
  18. 2010年3月份中国物流与采购联合会发布中国制造业采购经理指数为55.1%
  19. hashmap是单向链表吗_LRU(Least Recent Used) java 实现为这么采用HashMap+双向链表
  20. vue源码分析系列三:render的执行过程和Virtual DOM的产生

热门文章

  1. css-animaton-随堂-风车动画-加载动画-走路动画
  2. Laravel 中使用Goutte + GuzzleHttp 组件设置 headers无效的原因探究以及解决方案
  3. Jupyter notebook 使用多个Conda 环境
  4. linux中MySQL密码的恢复方法
  5. 1.Ehcache(01)——简介、基本操作
  6. LNMP--访问控制
  7. Silverlight开发历程—C#代码添加动画
  8. 【转载】WinCE中的RAM-Based Registry与HIVE-Based Registry
  9. Windows Server 2008十大新特性
  10. 计算机三级信息管理技术考试大纲