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中使用第三方库xlutils来追加写入Excel文件示例
Apr 05 Python
人机交互程序 python实现人机对话
Nov 14 Python
python编程实现随机生成多个椭圆实例代码
Jan 03 Python
PyQt弹出式对话框的常用方法及标准按钮类型
Feb 27 Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 Python
Python一键安装全部依赖包的方法
Aug 12 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
Aug 21 Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 Python
Python属性和内建属性实例解析
Jan 14 Python
Python3爬虫中Ajax的用法
Jul 10 Python
python import 上级目录的导入
Nov 03 Python
python基于opencv 实现图像时钟
Jan 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
js window.onload 加载多个函数的方法
2009/11/02 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
js调用图片隐藏&显示实现代码
2013/09/13 Javascript
jQuery Mobile框架中的表单组件基础使用教程
2016/05/17 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
JS+CSS3制作炫酷的弹窗效果
2016/11/08 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
深入浅析Python字符编码
2015/11/12 Python
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
python简单操作excle的方法
2018/09/12 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
如何将一个描述日期或日期/时间的字符串转换为一个Date对象
2015/10/13 面试题
岗位职责风险防控
2014/02/18 职场文书
会计专业自荐信
2014/06/03 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
学历证明范文
2015/06/16 职场文书
小学总务工作总结
2015/08/13 职场文书
python tkinter模块的简单使用
2021/04/07 Python
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android