QQ登录

只需要一步,快速开始

APP扫码登录

只需要一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 4302|回复: 0

[Python] python实现登录与注册功能

[复制链接]

等级头衔

积分成就    金币 : 2841
   泡泡 : 1516
   精华 : 6
   在线时间 : 1294 小时
   最后登录 : 2024-11-21

丰功伟绩

优秀达人突出贡献荣誉管理论坛元老

联系方式
发表于 2022-1-17 10:06:57 | 显示全部楼层 |阅读模式
1. 案例介绍
9 P  d7 m3 B: ^. [% L; F9 b1 L       本例设计一个用户登录和注册模块,使用 Tkinter 框架构建界面,主要用到画布、文本框、按钮等组件。涉及知识点:Python Tkinter 界面编程、pickle 数据存储。本例实现了基本的用户登录和注册互动界面,并提供用户信息存储和验证。pickle 是 python 语言的一个标准模块,安装 python 后已包含 pickle 库,不需要单独再安装。pickle 模块实现了基本的数据序列化和反序列化。通过 pickle 模块的序列化操作能够将程序中运行的对象信息保存到文件中去,永久存储;通过 pickle 模块的反序列化操作,能够从文件中创建上一次程序保存的对象。本例难度为中级,适合具有 Python 基础和 Tkinter 组件编程知识的用户学习。
" j7 Y, Z: b1 \& t: r9 \+ ~2. 示例效果% Q, ?* X* x9 c# |, j8 K
1.jpg 3 C% X2 U+ {. _
2.jpg
% f- W7 u) u& k! ], K3. 示例源码2 U+ y5 m  O* L* B9 q* P8 m0 w3 P2 A
  1. import tkinter as tk
  2. import pickle
  3. import tkinter.messagebox
  4. from PIL import Image, ImageTk
  5.   
  6. # 设置窗口---最开始的母体窗口
  7. window = tk.Tk()  # 建立一个窗口
  8. window.title('欢迎登录')
  9. window.geometry('450x300')  # 窗口大小为300x200
  10.   
  11. # 画布
  12. canvas = tk.Canvas(window, height=200, width=900)
  13. # 加载图片
  14. im = Image.open("images/01.png")
  15. image_file = ImageTk.PhotoImage(im)
  16. # image_file = tk.PhotoImage(file='images/01.gif')
  17. image = canvas.create_image(100, 40, anchor='nw', image=image_file)
  18. canvas.pack(side='top')
  19.   
  20. # 两个文字标签,用户名和密码两个部分
  21. tk.Label(window, text='用户名').place(x=100, y=150)
  22. tk.Label(window, text='密  码').place(x=100, y=190)
  23.   
  24. var_usr_name = tk.StringVar()  # 讲文本框的内容,定义为字符串类型
  25. var_usr_name.set('amoxiang@163.com')  # 设置默认值
  26. var_usr_pwd = tk.StringVar()
  27.   
  28. # 第一个输入框-用来输入用户名的。
  29. # textvariable 获取文本框的内容
  30. entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
  31. entry_usr_name.place(x=160, y=150)
  32. # 第二个输入框-用来输入密码的。
  33. entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
  34. entry_usr_pwd.place(x=160, y=190)
  35.   
  36.   
  37. def usr_login():
  38.     usr_name = var_usr_name.get()
  39.     usr_pwd = var_usr_pwd.get()
  40.     try:
  41.         with open('usrs_info.pickle', 'rb') as usr_file:
  42.             usrs_info = pickle.load(usr_file)
  43.     except FileNotFoundError:
  44.         with open('usrs_info.pickle', 'wb') as usr_file:
  45.             usrs_info = {'admin': 'admin'}
  46.             pickle.dump(usrs_info, usr_file)
  47.   
  48.     if usr_name in usrs_info:
  49.         if usr_pwd == usrs_info[usr_name]:
  50.             tk.messagebox.showinfo(
  51.                 title='欢迎光临', message=usr_name + ':请进入个人首页,查看最新资讯')
  52.         else:
  53.             tk.messagebox.showinfo(message='错误提示:密码不对,请重试')
  54.     else:
  55.         is_sign_up = tk.messagebox.askyesno('提示', '你还没有注册,请先注册')
  56.         print(is_sign_up)
  57.         if is_sign_up:
  58.             usr_sign_up()
  59.   
  60.   
  61. # 注册按钮
  62. def usr_sign_up():
  63.     def sign_to_Mofan_Python():
  64.         np = new_pwd.get()
  65.         npf = new_pwd_confirm.get()
  66.         nn = new_name.get()
  67.         # 上面是获取数据,下面是查看一下是否重复注册过
  68.         with open('usrs_info.pickle', 'rb') as usr_file:
  69.             exist_usr_info = pickle.load(usr_file)
  70.             if np != npf:
  71.                 tk.messagebox.showerror('错误提示', '密码和确认密码必须一样')
  72.             elif nn in exist_usr_info:
  73.                 tk.messagebox.showerror('错误提示', '用户名早就注册了!')
  74.             else:
  75.                 exist_usr_info[nn] = np
  76.                 with open('usrs_info.pickle', 'wb') as usr_file:
  77.                     pickle.dump(exist_usr_info, usr_file)
  78.                 tk.messagebox.showinfo('欢迎', '你已经成功注册了')
  79.                 window_sign_up.destroy()
  80.   
  81.     # 点击注册之后,会弹出这个窗口界面。
  82.     window_sign_up = tk.Toplevel(window)
  83.     window_sign_up.title('欢迎注册')
  84.     window_sign_up.geometry('360x200')  # 中间是x,而不是*号
  85.   
  86.     # 用户名框--这里输入用户名框。
  87.     new_name = tk.StringVar()
  88.     new_name.set('amoxiang@163.com')  # 设置的是默认值
  89.     tk.Label(window_sign_up, text='用户名').place(x=10, y=10)
  90.     entry_new_name = tk.Entry(window_sign_up, textvariable=new_name)
  91.     entry_new_name.place(x=100, y=10)
  92.   
  93.     # 新密码框--这里输入注册时候的密码
  94.     new_pwd = tk.StringVar()
  95.     tk.Label(window_sign_up, text='密  码').place(x=10, y=50)
  96.     entry_usr_pwd = tk.Entry(window_sign_up, textvariable=new_pwd, show='*')
  97.     entry_usr_pwd.place(x=100, y=50)
  98.   
  99.     # 密码确认框
  100.     new_pwd_confirm = tk.StringVar()
  101.     tk.Label(window_sign_up, text='确认密码').place(x=10, y=90)
  102.     entry_usr_pwd_confirm = tk.Entry(
  103.         window_sign_up, textvariable=new_pwd_confirm, show='*')
  104.     entry_usr_pwd_confirm.place(x=100, y=90)
  105.   
  106.     btn_confirm_sign_up = tk.Button(
  107.         window_sign_up, text=' 注  册 ', command=sign_to_Mofan_Python)
  108.     btn_confirm_sign_up.place(x=120, y=130)
  109.   
  110.   
  111. # 创建注册和登录按钮
  112. btn_login = tk.Button(window, text=' 登  录 ', command=usr_login)
  113. btn_login.place(x=150, y=230)  # 用place来处理按钮的位置信息。
  114. btn_sign_up = tk.Button(window, text=' 注  册 ', command=usr_sign_up)
  115. btn_sign_up.place(x=250, y=230)
  116.   
  117. window.mainloop()
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|paopaomj.COM ( 渝ICP备18007172号|渝公网安备50010502503914号 )

GMT+8, 2024-11-22 02:34

Powered by paopaomj X3.5 © 2016-2025 sitemap

快速回复 返回顶部 返回列表