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 相关文章推荐
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
对Python捕获控制台输出流的方法详解
Jan 07 Python
Python二叉搜索树与双向链表转换算法示例
Mar 02 Python
python远程邮件控制电脑升级版
May 23 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
Python内置加密模块用法解析
Nov 25 Python
利用PyQt中的QThread类实现多线程
Feb 18 Python
Python 通过监听端口实现唯一脚本运行方式
May 05 Python
Python数据可视化图实现过程详解
Jun 12 Python
详解python安装matplotlib库三种失败情况
Jul 28 Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 Python
解决Python import .pyd 可能遇到路径的问题
Mar 04 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
php扩展ZF――Validate扩展
2008/01/10 PHP
php adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
javascript 自定义事件初探
2009/08/21 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
简单介绍Python的Django框架的dj-scaffold项目
2015/05/30 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
基于python3 OpenCV3实现静态图片人脸识别
2018/05/25 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
python实现高斯判别分析算法的例子
2019/12/09 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
Python实现汇率转换操作
2020/05/03 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
柯基袜:Corgi Socks
2017/01/26 全球购物
一个精品风格的世界:Atterley
2019/05/01 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
物流管理专业大学生自荐信
2013/10/04 职场文书
早读迟到检讨书
2014/01/24 职场文书
员工晚婚的请假条
2014/02/08 职场文书
股东出资证明书范例
2014/10/04 职场文书
群众路线调研报告范文
2014/11/03 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
小学运动会前导词
2015/07/20 职场文书
经典祝酒词大全
2015/08/12 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书