Python3 Tkinkter + SQLite实现登录和注册界面


Posted in Python onNovember 19, 2019

本文实例为大家分享了Python3 Tkinkter + SQLite 实现登录和注册界面,供大家参考,具体内容如下

Ubuntu14 + Python3.4 + Pycharm2018

一、设计数据库

数据库内容(login.db):用户名,密码,邮箱,密码错误次数(达到三次时锁定)

create table loginuser (
 username varchar(30) NOT NULL PRIMARY KEY ,
 password varchar(16) NOT NULL ,
 email varchar NOT NULL ,
 loginerror int
);

二、登录界面Tkinter

login.py

1.登录界面代码

2.注册界面代码

from tkinter import *
import sqlite3
import tkinter.messagebox as messagebox
 
 
class LoginPage:
  """登录界面"""
  def __init__(self, master):
    self.root = master
    self.root.geometry('400x200+600+400')
    self.root.title('项目资源管理平台Alpha0.1')
    self.conn = sqlite3.connect('data/login.db')
    self.username = StringVar()
    self.password = StringVar()
    self.page = Frame(self.root)
    self.creatapage()
 
  def creatapage(self):
    """界面布局"""
    Label(self.page).grid(row=0)
    Label(self.page, text='用户名:').grid(row=1, stick=W, pady=10)
    Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E)
    Label(self.page, text='密码:').grid(row=2, stick=W, pady=10)
    Entry(self.page, textvariable=self.password, show='*').grid(row=2, stick=E, column=1)
    Button(self.page, text='登录', command=self.login).grid(row=3, stick=W, pady=10)
    Button(self.page, text='注册账号', command=self.register).grid(row=3, stick=E, column=1)
    self.page.pack()
 
  def login(self):
    """登录功能"""
    curs = self.conn.cursor()
    query = "select username, password, loginerror from loginuser where username='%s'" % self.username.get()
    curs.execute(query) # 返回一个迭代器
    c = curs.fetchall() # 接收全部信息
    if len(c) == 0:
      messagebox.showerror('登录失败', '账户不存在')
    else:
      us, pw, lerror = c[0]
      if lerror >= 3:
        messagebox.showwarning('登录失败', '账户已被锁定')
      elif us == self.username.get() and pw == self.password.get():
        self.conn.close()
        messagebox.showinfo('登录成功', '欢迎:%s' % us)
      else:
        messagebox.showwarning('登录失败', '密码错误')
 
  def register(self):
    """注册功能跳转"""
    self.conn.close()
    self.page.destroy()
    RegisterPage(self.root)
 
 
class RegisterPage:
  """注册界面"""
  def __init__(self, master=None):
    self.root = master
    self.root.title('账号注册')
    self.root.geometry('400x250')
    self.conn = sqlite3.connect('data/login.db')
    self.username = StringVar()
    self.password0 = StringVar() # 第一次输入密码
    self.password1 = StringVar() # 第二次输入密码
    self.email = StringVar()
    self.page = Frame(self.root)
    self.createpage()
 
  def createpage(self):
    """界面布局"""
    Label(self.page).grid(row=0)
    Label(self.page, text="账号:").grid(row=1, stick=W, pady=10)
    Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E)
    Label(self.page, text="密码:").grid(row=2, stick=W, pady=10)
    Entry(self.page, textvariable=self.password0, show='*').grid(row=2, column=1, stick=E)
    Label(self.page, text="再次输入:").grid(row=3, stick=W, pady=10)
    Entry(self.page, textvariable=self.password1, show='*').grid(row=3, column=1, stick=E)
    Label(self.page, text="Email*:").grid(row=4, stick=W, pady=10)
    Entry(self.page, textvariable=self.email).grid(row=4, column=1, stick=E)
    Button(self.page, text="返回", command=self.repage).grid(row=5, stick=W, pady=10)
    Button(self.page, text="注册", command=self.register).grid(row=5, column=1, stick=E)
    self.page.pack()
 
  def repage(self):
    """返回登录界面"""
    self.page.destroy()
    self.conn.close()
    LoginPage(self.root)
 
  def register(self):
    """注册"""
    if self.password0.get() != self.password1.get():
      messagebox.showwarning('错误', '密码核对错误')
    elif len(self.username.get()) == 0 or len(self.password0.get()) == 0 or len(self.email.get()) == 0:
      messagebox.showerror("错误", "不能为空")
    else:
      curs = self.conn.cursor()
      query = 'insert into loginuser values (?,?,?,?)'
      val = [self.username.get(), self.password0.get(), self.email.get(), 0]
      try:
        curs.execute(query, val)
        self.conn.commit()
        self.conn.close()
        messagebox.showinfo("成功", "注册成功,按确定返回登录界面")
        self.page.destroy()
        LoginPage(self.root)
      except sqlite3.IntegrityError:
        messagebox.showerror("注册失败", "该账户已存在")
 
 
if __name__ == '__main__':
  root = Tk()
  LoginPage(root)
  root.mainloop()

三、实现效果

1.登录界面:

 Python3 Tkinkter + SQLite实现登录和注册界面

2.注册界面:

 Python3 Tkinkter + SQLite实现登录和注册界面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
python链接oracle数据库以及数据库的增删改查实例
Jan 30 Python
使用实现pandas读取csv文件指定的前几行
Apr 20 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
Dec 26 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
Jul 25 Python
python爬虫增加访问量的方法
Aug 22 Python
Python Pandas对缺失值的处理方法
Sep 27 Python
PYTHON实现SIGN签名的过程解析
Oct 28 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
如何通过Python实现RabbitMQ延迟队列
Nov 28 Python
Python csv文件的读写操作实例详解
Nov 19 #Python
Python高级property属性用法实例分析
Nov 19 #Python
wxPython之wx.DC绘制形状
Nov 19 #Python
python matplotlib拟合直线的实现
Nov 19 #Python
Python线程指南分享
Nov 19 #Python
wxpython+pymysql实现用户登陆功能
Nov 19 #Python
pygame编写音乐播放器的实现代码示例
Nov 19 #Python
You might like
将兴奋、喜悦和坎加斯带到戴安娜:亚马逊公主
2020/03/03 欧美动漫
PHP编程之高级技巧——利用Mysql函数
2006/10/09 PHP
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
python提示No module named images的解决方法
2014/09/29 Python
Python实现的RSS阅读器实例
2015/07/25 Python
详解python单例模式与metaclass
2016/01/15 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
Python简易版停车管理系统
2019/08/12 Python
Python常用库大全及简要说明
2020/01/17 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
pytorch中index_select()的用法详解
2021/01/06 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
办加油卡单位介绍信
2014/01/09 职场文书
八一建军节部队活动方案
2014/02/04 职场文书
公司岗位说明书
2015/10/08 职场文书
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL