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描述器descriptor详解
Feb 03 Python
探究Python的Tornado框架对子域名和泛域名的支持
May 02 Python
Python实现给qq邮箱发送邮件的方法
May 28 Python
Python使用ftplib实现简易FTP客户端的方法
Jun 03 Python
Python实现字符串逆序输出功能示例
Jun 24 Python
Python爬虫之xlml解析库(全面了解)
Aug 08 Python
python实现flappy bird小游戏
Dec 24 Python
通过Python编写一个简单登录功能过程解析
Sep 04 Python
python中的itertools的使用详解
Jan 13 Python
python脚本实现mp4中的音频提取并保存在原目录
Feb 27 Python
Python爬虫爬取百度搜索内容代码实例
Jun 05 Python
Python远程方法调用实现过程解析
Jul 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
PHP4中实现动态代理
2006/10/09 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
PHP连接access数据库
2015/03/27 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
javascript时间差插件分享
2016/07/18 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
微信小程序实现菜单左右联动
2020/05/19 Javascript
vue 通过绑定事件获取当前行的id操作
2020/07/27 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
python中from module import * 的一个坑
2014/07/20 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
2020/01/10 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
公共事业管理本科生求职信
2013/10/07 职场文书
家长学校实施方案
2014/03/15 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
大班亲子运动会方案
2014/06/10 职场文书
倡议书的格式写法
2015/04/28 职场文书
新学期感想
2015/08/10 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA