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数据库实现登陆注册功能...相关推荐
- python tkinter控件_python GUI作业:使用tkinter的重要控件
题目1:使用tkinter的重要控件 绘制如下菜单: 图片.png 参考代码:#!/usr/bin/env python3# -*- coding: utf-8 -*-# 技术支持:https://w ...
- 【转】Asp.net控件开发学习笔记整理篇 - Asp.net客户端状态管理
最近一直在做MVC项目,对于WEBFORM 好像快忘记了.周末无聊,顺带看看他人的笔记.再次温习下. 复习大纲: 导航.页面生命周期及其它导论 一.服务器控件生命周期 二.控件开发基础 三.Asp.n ...
- Asp.net控件开发学习笔记(九)----服务器控件事件
EventCollection 如果在单个控件中有多个事件,那么使用System.ComponentModel.EventHandlerList对事件进行保存将会在内存占用上有不错的提高.EventH ...
- 【转】Asp.net控件开发学习笔记整理篇 - WebControl基类
最近一直在做MVC项目,对于WEBFORM 好像快忘记了.周末无聊,顺带看看他人的笔记.再次温习下. 复习大纲: 导航.页面生命周期及其它导论 一.服务器控件生命周期 二.控件开发基础 三.Asp.n ...
- Asp.net控件开发学习笔记(三)-控件开发基础
封装 在asp.net中,控件被分为两类.用户控件和自定义服务器控件.前者就是我们经常用来将一些可复用的内容封装成的.ascx文件.这里主要研究后者. 创建自定义服务器控件 创建自 ...
- Asp.net控件开发学习笔记(六)----数据回传
在Asp.net中,利用Http Post的回传机制意味着可以再客户端存储状态并且可以在服务器接收.Asp.net中大部分控件都提供了存储自身状态的功能并且在自身状态改变时引发对应事件.IPostDa ...
- 【转】Asp.net控件开发学习笔记整理篇 - 数据回传
最近一直在做MVC项目,对于WEBFORM 好像快忘记了.周末无聊,顺带看看他人的笔记.再次温习下. 复习大纲: 导航.页面生命周期及其它导论 一.服务器控件生命周期 二.控件开发基础 三.Asp.n ...
- python反转一个三位数的整数_Python学习笔记3-整数反转
Python学习笔记3-整数反转 题目: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: - ...
- python选择日期控件_Flask学习笔记-使用bootstrap-datepicker实现页面日期选择
Bootstrap时间日期插件推荐--bootstrap-datepicker 参考网站:http://www.58img.com/framework/813 这个插件的样式个人觉得还是很不错,而且可 ...
最新文章
- HDD工作原理 导图
- Silverlight实例教程 - Validation数据验证开篇
- 《高性能Linux服务器构建实战》封面照出炉
- Swin Transformer升级版来了!30亿参数,刷榜多项视觉任务
- 眼压与角膜厚度的关系
- 那些奇奇怪怪的男性用品......
- webpackjsonp 还原_具有催化CO2还原性能的非贵金属配合物的配体设计
- Python中的命名空间是什么?
- f4小组专用3306mysql抓鸡工具_【技术】3306端口手动入侵之mysql写入启动项提权
- win10内置ubuntu, 启动时提示“指定的网络名不再可用”解决办法
- ckplayer 播放视频
- 关于Error:Execution failed for task ':app:transformClassesWithDexForDebug'的解决方法
- 2021-08-30 天翼云 搬家问题
- 【设计模式03】 建造者模式
- 对智能电视的几个看法和观点
- python求平均工资_python实现求和,求平均值——函数
- On the Use of BERT for Automated Essay Scoring: Joint Learning of Multi-Scale Essay Representation学习
- 仿新浪热门微博页面动态添加Tab标签与Fragment联动的实现
- 在建设和培养技术团队,要有前瞻性
- 干货!论文写作30忌
热门文章
- securecrt使用_使用securecrt提升工作效率的十个技巧
- linux 查看opengl版本,linux下查看OpenGL版本
- C语言学习之编程实现:输入长方形的两个边长a, b和一个整数k。k=1时,输出长方形的周长 l; k=2时 ,输出长方形的面积s;当k=3时 , 输出长方形的周长1和面积s
- 计算机用户名密码策略,设置域用户帐户密码策略
- php 当前路径函数,PHP解析目录路径的3个函数总结
- 1.3 xss原理分析与剖析(4)
- java中日期与字符串之间的转换
- CVE-2010-0249 极光
- Android MVC模式在android系统中的体现
- 爱迪生欺骗了世界! ----马云给雅虎员工演讲