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支持断点续传的多线程下载示例
Jan 16 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
Python实现的归并排序算法示例
Nov 21 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
对python requests的content和text方法的区别详解
Oct 11 Python
python DataFrame 取差集实例
Jan 30 Python
如何用Python来搭建一个简单的推荐系统
Aug 07 Python
如何用Python来理一理红楼梦里的那些关系
Aug 14 Python
python使用numpy实现直方图反向投影示例
Jan 17 Python
PyQt5中向单元格添加控件的方法示例
Mar 24 Python
python反扒机制的5种解决方法
Feb 06 Python
python制作图形界面的2048游戏, 基于tkinter
Apr 06 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
国内咖啡文化
2021/03/03 咖啡文化
深入php socket的讲解与实例分析
2013/06/13 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
jquery 表格的增行删行实现思路
2013/03/21 Javascript
js获取指定日期前后的日期代码
2013/08/20 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
使用bootstrapValidator插件进行动态添加表单元素并校验
2016/09/28 Javascript
jQuery内容筛选选择器实例代码
2017/02/06 Javascript
AngularJS自定义指令实现面包屑功能完整实例
2017/05/17 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
Vue中对比scoped css和css module的区别
2018/05/17 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
python生成日历实例解析
2014/08/21 Python
django rest framework之请求与响应(详解)
2017/11/06 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
实例讲解Python3中abs()函数
2019/02/19 Python
python处理document文档保留原样式
2019/09/23 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
python让函数不返回结果的方法
2020/06/22 Python
Python中pass的作用与使用教程
2020/11/13 Python
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
一些网络技术方面的面试题
2014/05/01 面试题
金融专业个人求职信范文
2013/11/28 职场文书
求职自荐信范文格式
2013/11/29 职场文书
技校毕业生的自我评价
2013/12/27 职场文书
教师求职信范文分享
2013/12/27 职场文书
goland 设置project gopath的操作
2021/05/06 Golang
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
Python实现仓库管理系统
2022/05/30 Python