1. 程式人生 > 資料庫 >Python3 Tkinkter + SQLite實現登入和註冊介面

Python3 Tkinkter + SQLite實現登入和註冊介面

本文例項為大家分享了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,textvariable=self.password,show='*').grid(row=2,stick=E,column=1)
    Button(self.page,text='登入',command=self.login).grid(row=3,pady=10)
    Button(self.page,text='註冊賬號',command=self.register).grid(row=3,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,text="密碼:").grid(row=2,textvariable=self.password0,text="再次輸入:").grid(row=3,textvariable=self.password1,show='*').grid(row=3,text="Email*:").grid(row=4,textvariable=self.email).grid(row=4,stick=E)
    Button(self.page,text="返回",command=self.repage).grid(row=5,text="註冊",command=self.register).grid(row=5,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.登入介面:

2.註冊介面:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。