python mysql数据库操作grid控件_Python学习笔记_02:使用Tkinter连接MySQL数据库实现登陆注册功能...
1 環(huán)境搭建
1.1?Python安裝
本文具體實(shí)現(xiàn)部分Python環(huán)境:Python2.7.14,64位版本
附:配置PythonIDE,推薦PyCharm(具體IDE界面見(jiàn)下圖),下載點(diǎn)擊運(yùn)行即可使用
1.2 MySQL環(huán)境搭建
本文具體實(shí)現(xiàn)部分MySQL環(huán)境:MySQL5.7.13,64位版本
推薦一款操作MySQL很好用的IDE:Navicat,鏈接:http://pan.baidu.com/s/1nvFrKCT密碼:tzr3(PS:可破解哦)
1.3安裝MySQLdb
MySQLdb 是用于Python鏈接Mysql數(shù)據(jù)庫(kù)的接口,它實(shí)現(xiàn)了 Python 數(shù)據(jù)庫(kù) API 規(guī)范 V2.0,基于 MySQL C API 上建立的。如果自己下載安裝的Python版本自帶MySQLdb模塊,則不需要重新配置安裝。
此處要注意自己安裝的Python和MySQL版本是64位還是32位,否則在進(jìn)行安裝MySQLdb時(shí)會(huì)報(bào)錯(cuò)。
此處分享一個(gè)?MySQL-python-1.2.5.win-amd64-py2.7.exe版本(PS:目前最新哦,免費(fèi)提供,樓主自己是在CSDN上花了四個(gè)下載幣弄來(lái)的),鏈接:http://pan.baidu.com/s/1nuDF6lj 密碼:9xyb
2 具體實(shí)現(xiàn)
2.1 登陸界面
PS:界面很丑,不過(guò)主要為了熟悉Python基礎(chǔ)語(yǔ)法,以及如何操作MySQL數(shù)據(jù)庫(kù),有興趣同學(xué)可以自己查詢相關(guān)組件屬性,可以對(duì)界面進(jìn)行美化。
使用Navicat查詢book數(shù)據(jù)庫(kù)中user表具體數(shù)據(jù)信息:
此處實(shí)現(xiàn)功能:
(1)點(diǎn)擊登陸,如果輸入用戶名和密碼與后臺(tái)mysql數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)一致,則跳出提示框驗(yàn)證成功;否則提示用戶名或密碼錯(cuò)誤,驗(yàn)證失敗。
(2)點(diǎn)擊注冊(cè),跳轉(zhuǎn)到注冊(cè)界面,隱藏登陸界面。
(3)記住用戶名和密碼選擇框是為了顯示設(shè)計(jì)的登陸界面好看一點(diǎn),未實(shí)現(xiàn)具體功能。
2.2 注冊(cè)界面
此處實(shí)現(xiàn)功能:
(1)用戶輸入注冊(cè)用戶名、注冊(cè)密碼,點(diǎn)擊確定注冊(cè)按鈕后,在IDE輸出框會(huì)打印數(shù)據(jù)插入成功提示,否則會(huì)打印數(shù)據(jù)插入失敗提示。
(2)用戶點(diǎn)擊返回按鈕,此時(shí)會(huì)重新啟動(dòng)一個(gè)登陸界面,供剛才注冊(cè)賬號(hào)和密碼進(jìn)行登陸驗(yàn)證。
2.3 具體實(shí)現(xiàn)部分代碼
登陸界面login.py
#-*- coding: UTF-8 -*-
importMySQLdbfrom Tkinter import *
from register import *
from tkFont importFontfrom tkMessageBox import *
try:from ttk importEntry, ButtonexceptImportError:pass
classLogin(object):def __init__(self):
self.root=Tk()
self.root.title(u‘登錄‘)
self.root.resizable(False, False)
self.root.geometry(‘+450+250‘)
self.sysfont= Font(self.root, size=15)
self.lb_user= Label(self.root, text=u‘用戶名:‘,width = 20,height = 10,font=("黑體", 15, "bold"))
self.lb_passwd1= Label(self.root, text=u‘‘)
self.lb_passwd= Label(self.root, text=u‘密碼:‘,width = 20,height = 5,font=("黑體", 15, "bold"))
self.lb_user.grid(row=0, column=0, sticky=W)
self.lb_passwd1.grid(row=1, column=0, sticky=W)
self.lb_passwd.grid(row=2, column=0, sticky=W)
self.en_user= Entry(self.root, font=self.sysfont, width=24)
self.en_passwd= Entry(self.root, font=self.sysfont, width=24)
self.en_user.grid(row=0, column=1, columnspan=1)
self.en_passwd.grid(row=2, column=1, columnspan=1)
self.en_user.insert(0, u‘請(qǐng)輸入用戶名‘)
self.en_passwd.insert(0, u‘請(qǐng)輸入密碼‘)
self.en_user.config(validate=‘focusin‘,
validatecommand=lambda: self.validate_func(‘self.en_user‘),
invalidcommand=lambda: self.invalid_func(‘self.en_user‘))
self.en_passwd.config(validate=‘focusin‘,
validatecommand=lambda: self.validate_func(‘self.en_passwd‘),
invalidcommand=lambda: self.invalid_func(‘self.en_passwd‘))
self.var=IntVar()
self.ckb= Checkbutton(self.root, text=u‘記住用戶名和密碼‘, underline=0,
variable=self.var,font=(15))
self.ckb.grid(row=3, column=0)
self.bt_print= Button(self.root, text=u‘登陸‘)
self.bt_print.grid(row=3, column=1, sticky=E, pady=50,padx = 10)
self.bt_print.config(command=self.print_info)
self.bt_register= Button(self.root, text=u‘注冊(cè)‘)
self.bt_register.grid(row=3, column=2, sticky=E, pady=50, padx=50)
self.bt_register.config(command=self.register_info)#self.root.bind(‘‘, self.enter_print)
self.root.mainloop()defvalidate_func(self, en):return False if eval(en).get().strip() != ‘‘ elseTruedefinvalid_func(self, en):
value=eval(en).get().strip()if value == u‘輸入用戶名‘ or value == u‘輸入密碼‘:
eval(en).delete(0, END)if en == ‘self.en_passwd‘:
eval(en).config(show=‘*‘)defprint_info(self):
en1_value=self.en_user.get().strip()
en2_value=self.en_passwd.get().strip()
txt= u‘‘‘用戶名: %s \n密碼 : %s‘‘‘ %(self.en_user.get(), self.en_passwd.get())if en1_value == ‘‘ or en1_value == u‘輸入用戶名‘:
showwarning(u‘無(wú)用戶名‘, u‘請(qǐng)輸入用戶名‘)elif en2_value == ‘‘ or en2_value == u‘輸入密碼‘:
showwarning(u‘無(wú)密碼‘, u‘請(qǐng)輸入密碼‘)else:
a=0#打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect("localhost", "root", "root", "book")#使用cursor()方法獲取操作游標(biāo)
cursor =db.cursor()#SQL 查詢語(yǔ)句
sql = "select * from user"
try:#執(zhí)行SQL語(yǔ)句
cursor.execute(sql)#獲取所有記錄列表
results =cursor.fetchall()for row inresults:
id=row[0]
name= row[1]
pwd= row[2]if name == en1_value and pwd ==en2_value:
a= 1
print "數(shù)據(jù)庫(kù)連接及驗(yàn)證成功!!!"showinfo(‘登陸成功!!!‘, txt)## 打印結(jié)果
#print "id=%d,name=%s,pwd=%s" % \
#(id, name, pwd)
except:print "Error: unable to fecth data"
#關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()if(a ==0):
showinfo(‘用戶名或密碼錯(cuò)誤!!!‘, txt)defregister_info(self):
self.rootR=Tk()
loginPage(self.rootR)
self.root.withdraw()defenter_print(self, event):
self.print_info()if __name__ == "__main__":
Login()
注冊(cè)界面register.py
#coding=utf-8
importMySQLdbfrom login import *
from Tkinter import *
importstringclassloginPage(object):def __init__(self, master, info=‘歡迎您進(jìn)入注冊(cè)頁(yè)面‘):
self.master=master
self.mainlabel= Label(master, text=info, justify=CENTER)
self.mainlabel.grid(row=0, columnspan=3)
self.user= Label(master, text=‘注冊(cè)用戶名:‘, borderwidth=3)
self.user.grid(row=1, sticky=W)
self.pwd= Label(master, text=‘注冊(cè)密碼:‘, borderwidth=3)
self.pwd.grid(row=2, sticky=W)
self.userEntry=Entry(master)
self.userEntry.grid(row=1, column=1, columnspan=3)
self.userEntry.focus_set()
self.pwdEntry= Entry(master, show=‘*‘)
self.pwdEntry.grid(row=2, column=1, columnspan=3)
self.loginButton= Button(master, text=‘確定注冊(cè)‘, borderwidth=2, command=self.login)
self.loginButton.grid(row=3, column=1)
self.clearButton= Button(master, text=‘返回‘, borderwidth=2, command=self.clear)
self.clearButton.grid(row=3, column=2)deflogin(self):
self.username=self.userEntry.get().strip()
self.passwd=self.pwdEntry.get().strip()#打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect("localhost", "root", "root", "book")#使用cursor()方法獲取操作游標(biāo)
cursor =db.cursor()#SQL 插入語(yǔ)句
sql = "INSERT INTO user(name, pwd) VALUES (‘%s‘, ‘%s‘)" %(self.username, self.passwd)try:#執(zhí)行sql語(yǔ)句
cursor.execute(sql)print "數(shù)據(jù)插入成功!!!"
#提交到數(shù)據(jù)庫(kù)執(zhí)行
db.commit()except:print "數(shù)據(jù)插入失敗!!!"
#Rollback in case there is any error
db.rollback()#關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()defclear(self):
self.userEntry.delete(0, END)
self.pwdEntry.delete(0, END)
Login()if __name__ == ‘__main__‘:
root=Tk()
root.title(‘注冊(cè)‘)
myLogin=loginPage(root)#root.wait_window(myLogin.mySendMail.sendPage)
mainloop()
參考資料:
原文:http://www.cnblogs.com/liuzhen1995/p/7765795.html
總結(jié)
以上是生活随笔為你收集整理的python mysql数据库操作grid控件_Python学习笔记_02:使用Tkinter连接MySQL数据库实现登陆注册功能...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 求两条轨迹间的hausdorff距离_自
- 下一篇: shell连接工具_盘点下我用的顺手的那