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命令行参数解析模块getopt使用实例
Apr 13 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
Tornado高并发处理方法实例代码
Jan 15 Python
简单谈谈python中的lambda表达式
Jan 19 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
详解分布式任务队列Celery使用说明
Nov 29 Python
浅谈Pycharm调用同级目录下的py脚本bug
Dec 03 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
Oct 14 Python
Django模型中字段属性choice使用说明
Mar 30 Python
Python批量获取并保存手机号归属地和运营商的示例
Oct 09 Python
浅析python字符串前加r、f、u、l 的区别
Jan 24 Python
Python LMDB库的使用示例
Feb 14 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
基于mysql的论坛(2)
2006/10/09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
php防止sql注入的方法详解
2017/02/20 PHP
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
2015/09/08 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
详解vue 实例方法和数据
2017/10/23 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
JS手写一个自定义Promise操作示例
2020/03/16 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
讲解Python中运算符使用时的优先级
2015/05/14 Python
详解Python的Django框架中的中间件
2015/07/24 Python
Python中functools模块函数解析
2017/03/12 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
Python PyQt5整理介绍
2020/04/01 Python
python中有帮助函数吗
2020/06/19 Python
翻译专业应届生求职信
2013/11/23 职场文书
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
信息技术教学反思
2014/02/12 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
嘉年华活动新闻稿
2015/07/17 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
社区干部培训心得体会
2016/01/06 职场文书
中学语文教学反思
2016/02/16 职场文书
Oracle表空间与权限的深入讲解
2021/11/17 Oracle
css3新特性的应用示例分析
2022/03/16 HTML / CSS