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函数局部变量用法实例分析
Aug 04 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
Python人脸识别初探
Dec 21 Python
python+POP3实现批量下载邮件附件
Jun 19 Python
Django 内置权限扩展案例详解
Mar 04 Python
django 环境变量配置过程详解
Aug 06 Python
Python使用matplotlib 画矩形的三种方式分析
Oct 31 Python
Pytorch之Variable的用法
Dec 31 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 Python
Python定义一个函数的方法
Jun 15 Python
浅谈keras 模型用于预测时的注意事项
Jun 27 Python
利用Python发送邮件或发带附件的邮件
Nov 12 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基础学习小结
2011/04/17 PHP
php设计模式  Command(命令模式)
2011/06/17 PHP
php中动态修改ini配置
2014/10/14 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
thinkPHP5.0框架命名空间详解
2017/03/18 PHP
Javascript 遍历对象中的子对象
2009/07/03 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
2014/06/10 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
js实现的万能flv网页播放器代码
2016/04/30 Javascript
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
Python入门篇之函数
2014/10/20 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
印度网上药店:1mg
2017/10/13 全球购物
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
平面网站制作专科生的自我评价分享
2013/12/11 职场文书
保险公司年会主持词
2014/03/22 职场文书
竞选大队委员演讲稿
2014/04/28 职场文书
优秀教师感人事迹材料
2014/05/04 职场文书
校车司机安全责任书
2015/05/11 职场文书