Python火熱起來,在數據分析、信息爬取等方面給我們帶來了很多便捷,但是Python的作用不僅僅在於此,我們見到太多Python程序都是一個漆黑的控制檯,其實Python也有很多好看的界面。這裏,筆者爲大家帶來一個簡易的登錄界面製作,並且連接到MySQL數據庫驗證賬號密碼的正確性,以控制訪問用戶。
<<<<<<<<<<<<<<<<<大神請繞道>>>>>>>>>>>>>>>>
首先需要安裝pymysql和tkinter兩個模塊庫,可以採用cmd指令安裝
pip install pymysql
pip install tkinter
安裝mysql數據庫請參考以下教程:
https://blog.csdn.net/weixin_43792401/article/details/101624265
使用mysql創建數據庫test,和用戶表user
數據庫表創建好,就可以使用python製作tkinter的登錄界面了,登錄包括登錄驗證,退出程序。
其中登錄驗證必須在驗證密碼成功和密碼錯誤時都彈出對話框。
import tkinter as tk
import pymysql
def success_tip(username):
root.destroy()
root1 = tk.Tk()
root1.title('通知信息')
welcome = username+',歡迎您!!!'
tk.Label(root1,text=welcome,font=36).pack(padx=100,pady=100)
root1.mainloop()
def fail_tip():
root2 = tk.Tk()
root2.title('錯誤提示')
tk.Label(root2,text='登錄失敗!密碼錯誤或者賬號不存在!',font=18,fg='red').pack(padx=20,pady=20)
root2.mainloop()
def auto_login():
#連接數據庫
db = pymysql.connect(host='localhost',user='數據庫用戶名',password='數據庫密碼',db='test',port=3306)
#獲取操作遊標
cur = db.cursor()
#查詢數據庫
sql = 'select * from user'
entry1 = input1.get()
entry2 = input2.get()
flag = True
try:
cur.execute(sql) #執行查詢
results = cur.fetchall() #獲取所有查詢數據
for row in results:
uid = row[4] #賬號
pwd = row[5] #密碼
#判斷輸入的賬號和密碼是否正確
if entry1 == uid and entry2 == pwd:
print('登錄成功')
username = row[0]
success_tip(username)
flag = True
break
else:
flag = False
if flag == False:
fail_tip()
except Exception as e:
print('登錄異常')
def exit_login():
root.destroy()
pass
def frame():
global root
root = tk.Tk()
root.title('登錄窗口')
v1 = tk.StringVar()
v2 = tk.StringVar()
#賬號標籤,位置在第0行第0列
tk.Label(root,text='賬號:').grid(row=0,column=0)
#密碼標籤,位置在第1行第0列
tk.Label(root,text='密碼:').grid(row=1,column=0)
#賬號輸入框
global input1
input1 = tk.Entry(root,textvariable=v1)
input1.grid(row=0,column=1,padx=10,pady=5)
#密碼輸入框
global input2
input2 = tk.Entry(root,textvariable=v2,show='*')
input2.grid(row=1,column=1,padx=10,pady=5)
#登錄按鈕
tk.Button(root,text='登錄',width=10,command=auto_login).grid(row=3,column=0,sticky=tk.W,padx=10,pady=5)
#退出按鈕
tk.Button(root,text='退出',width=10,command=exit_login).grid(row=3,column=1,sticky=tk.E,padx=10,pady=5)
root.mainloop()
if __name__ == '__main__':
frame()