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中的异常处理
Apr 28 Python
python安装numpy&安装matplotlib& scipy的教程
Nov 02 Python
windows 下python+numpy安装实用教程
Dec 23 Python
100行python代码实现跳一跳辅助程序
Jan 15 Python
只需7行Python代码玩转微信自动聊天
Jan 27 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
Apr 27 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
python 实现简单的FTP程序
Dec 27 Python
tensorflow安装成功import tensorflow 出现问题
Apr 16 Python
基于logstash实现日志文件同步elasticsearch
Aug 06 Python
python 操作excel表格的方法
Dec 05 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 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 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
php实现计数器方法小结
2015/01/05 PHP
如何使用纯PHP实现定时器任务(Timer)
2015/07/31 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
google 搜索框添加关键字实现代码
2010/04/24 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
2011/08/23 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
React Router v4 入坑指南(小结)
2018/04/08 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
js实现ATM机存取款功能
2020/10/27 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
vue实现移动端返回顶部
2020/10/12 Javascript
小程序实现点击tab切换左右滑动
2020/11/16 Javascript
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
python 反向输出字符串的方法
2018/07/16 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
Yahoo-PHP面试题1
2016/07/20 面试题
医院门卫岗位职责
2013/12/30 职场文书
初中物理教学反思
2014/01/14 职场文书
战友聚会邀请函
2014/01/18 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
社团个人总结范文
2015/03/05 职场文书
redis限流的实际应用
2021/04/24 Redis