python mysql数据库操作grid控件_Python学习笔记_02:使用Tkinter连接MySQL数据库实现登陆注册功能...
1 環境搭建
1.1?Python安裝
本文具體實現部分Python環境:Python2.7.14,64位版本
附:配置PythonIDE,推薦PyCharm(具體IDE界面見下圖),下載點擊運行即可使用
1.2 MySQL環境搭建
本文具體實現部分MySQL環境:MySQL5.7.13,64位版本
推薦一款操作MySQL很好用的IDE:Navicat,鏈接:http://pan.baidu.com/s/1nvFrKCT密碼:tzr3(PS:可破解哦)
1.3安裝MySQLdb
MySQLdb 是用于Python鏈接Mysql數據庫的接口,它實現了 Python 數據庫 API 規范 V2.0,基于 MySQL C API 上建立的。如果自己下載安裝的Python版本自帶MySQLdb模塊,則不需要重新配置安裝。
此處要注意自己安裝的Python和MySQL版本是64位還是32位,否則在進行安裝MySQLdb時會報錯。
此處分享一個?MySQL-python-1.2.5.win-amd64-py2.7.exe版本(PS:目前最新哦,免費提供,樓主自己是在CSDN上花了四個下載幣弄來的),鏈接:http://pan.baidu.com/s/1nuDF6lj 密碼:9xyb
2 具體實現
2.1 登陸界面
PS:界面很丑,不過主要為了熟悉Python基礎語法,以及如何操作MySQL數據庫,有興趣同學可以自己查詢相關組件屬性,可以對界面進行美化。
使用Navicat查詢book數據庫中user表具體數據信息:
此處實現功能:
(1)點擊登陸,如果輸入用戶名和密碼與后臺mysql數據庫中查詢數據一致,則跳出提示框驗證成功;否則提示用戶名或密碼錯誤,驗證失敗。
(2)點擊注冊,跳轉到注冊界面,隱藏登陸界面。
(3)記住用戶名和密碼選擇框是為了顯示設計的登陸界面好看一點,未實現具體功能。
2.2 注冊界面
此處實現功能:
(1)用戶輸入注冊用戶名、注冊密碼,點擊確定注冊按鈕后,在IDE輸出框會打印數據插入成功提示,否則會打印數據插入失敗提示。
(2)用戶點擊返回按鈕,此時會重新啟動一個登陸界面,供剛才注冊賬號和密碼進行登陸驗證。
2.3 具體實現部分代碼
登陸界面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‘請輸入用戶名‘)
self.en_passwd.insert(0, u‘請輸入密碼‘)
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‘注冊‘)
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‘無用戶名‘, u‘請輸入用戶名‘)elif en2_value == ‘‘ or en2_value == u‘輸入密碼‘:
showwarning(u‘無密碼‘, u‘請輸入密碼‘)else:
a=0#打開數據庫連接
db = MySQLdb.connect("localhost", "root", "root", "book")#使用cursor()方法獲取操作游標
cursor =db.cursor()#SQL 查詢語句
sql = "select * from user"
try:#執行SQL語句
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 "數據庫連接及驗證成功!!!"showinfo(‘登陸成功!!!‘, txt)## 打印結果
#print "id=%d,name=%s,pwd=%s" % \
#(id, name, pwd)
except:print "Error: unable to fecth data"
#關閉數據庫連接
db.close()if(a ==0):
showinfo(‘用戶名或密碼錯誤!!!‘, txt)defregister_info(self):
self.rootR=Tk()
loginPage(self.rootR)
self.root.withdraw()defenter_print(self, event):
self.print_info()if __name__ == "__main__":
Login()
注冊界面register.py
#coding=utf-8
importMySQLdbfrom login import *
from Tkinter import *
importstringclassloginPage(object):def __init__(self, master, info=‘歡迎您進入注冊頁面‘):
self.master=master
self.mainlabel= Label(master, text=info, justify=CENTER)
self.mainlabel.grid(row=0, columnspan=3)
self.user= Label(master, text=‘注冊用戶名:‘, borderwidth=3)
self.user.grid(row=1, sticky=W)
self.pwd= Label(master, text=‘注冊密碼:‘, 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=‘確定注冊‘, 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()#打開數據庫連接
db = MySQLdb.connect("localhost", "root", "root", "book")#使用cursor()方法獲取操作游標
cursor =db.cursor()#SQL 插入語句
sql = "INSERT INTO user(name, pwd) VALUES (‘%s‘, ‘%s‘)" %(self.username, self.passwd)try:#執行sql語句
cursor.execute(sql)print "數據插入成功!!!"
#提交到數據庫執行
db.commit()except:print "數據插入失敗!!!"
#Rollback in case there is any error
db.rollback()#關閉數據庫連接
db.close()defclear(self):
self.userEntry.delete(0, END)
self.pwdEntry.delete(0, END)
Login()if __name__ == ‘__main__‘:
root=Tk()
root.title(‘注冊‘)
myLogin=loginPage(root)#root.wait_window(myLogin.mySendMail.sendPage)
mainloop()
參考資料:
原文:http://www.cnblogs.com/liuzhen1995/p/7765795.html
總結
以上是生活随笔為你收集整理的python mysql数据库操作grid控件_Python学习笔记_02:使用Tkinter连接MySQL数据库实现登陆注册功能...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求两条轨迹间的hausdorff距离_自
- 下一篇: shell连接工具_盘点下我用的顺手的那