1 环境搭建

1.1 Python安装

1.2 MySQL环境搭建

1.3安装MySQLdb 

2 具体实现

2.1 登陆界面

2.2 注册界面

2.3 具体实现部分代码

 


1 环境搭建

1.1 Python安装

本文具体实现部分Python环境:Python2.7.14,64位版本

具体安装步骤见:Python 环境搭建

附:配置PythonIDE,推荐PyCharm(具体IDE界面见下图),下载点击运行即可使用

PyCharm 官方下载地址:http://www.jetbrains.com/pycharm/download/

官方下载速度可能有点慢,附百度云盘下载链接:http://pan.baidu.com/s/1pLC5Kdd 密码:u3nb

1.2 MySQL环境搭建

本文具体实现部分MySQL环境:MySQL5.7.13,64位版本

具体安装步骤见:mysql5.7.13-windows 免安装版配置简介

推荐一款操作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 -*-

import MySQLdb
from Tkinter import *
from register import *
from tkFont import Font
from tkMessageBox import * try:
from ttk import Entry, Button
except ImportError:
pass class Login(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('<Return>', self.enter_print)
self.root.mainloop() def validate_func(self, en):
return False if eval(en).get().strip() != '' else True def invalid_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='*') def print_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 in results:
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) def register_info(self):
self.rootR = Tk()
loginPage(self.rootR)
self.root.withdraw() def enter_print(self, event):
self.print_info() if __name__ == "__main__":
Login()

注册界面register.py

# coding=utf-8

import MySQLdb
from login import *
from Tkinter import *
import string class loginPage(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) def login(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() def clear(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()

参考资料:

  1. http://www.shouce.ren/api/view/a/4763
  2. http://blog.csdn.net/wjciayf/article/details/50722215
  3. http://blog.csdn.net/wangyiyan315/article/details/16846467

Python学习笔记_02:使用Tkinter连接MySQL数据库实现登陆注册功能的更多相关文章

  1. 【学习笔记】使用SQLyog连接MySQL数据库

    一.使用SQLyog创建数据库用来管理学生信息 #创建数据库student DROP DATABASE IF EXISTS Myschool; CREATE DATABASE Myschool; #在 ...

  2. Node.js Express连接mysql完整的登陆注册系统(windows)

    windows学习环境: node 版本: v0.10.35 express版本:4.10.0 mysql版本:5.6.21-log 第一部分:安装node .Express(win8系统 需要&qu ...

  3. mybatis连接mysql数据库实现的jdbc功能

    最近公司项目要使用myBatis,自己以前没有接触过,就在网上找到了一些资料研究了些.初步做出了基于myBatis连接mysql数据库的jdbc实现的功能. employee.java package ...

  4. python学习笔记(七)操作mysql

    python操作mysql数据库需要先安装pymysql模块,在之前博客中可翻看如何安装,最简单的就是pip install pymysql 1.导入pymysql模块   import pymysq ...

  5. python学习笔记(九):操作数据库

    我们在写代码的时候,经常会操作数据库,增删改查,数据库有很多类型,关系型数据库和非关系数据库,这里咱们介绍一下python怎么操作mysql.redis和mongodb. 一.python操作mysq ...

  6. QtSQL学习笔记(2)- 连接到数据库

    要使用QSqlQuery或者QSqlQueryModel访问一个数据库,首先需要创建并打开一个或多个数据库连接(database connections). 一般地,数据库连接是根据连接名(conne ...

  7. nodejs学习(三)--express连接mysql数据库,mysql查询封装

    一.说一下 连接不同的数据库需要安装相应的插件,此demo使用mysql数据库,需自行安装mysql数据库软件. 新建数据库webapp, 新建表users: 二.直接开码 npm install m ...

  8. python Django 学习笔记(四)—— 使用MySQL数据库

    1,下载安装MySQLdb类库 http://www.djangoproject.com/r/python-mysql/ 2,修改settings.py 配置数据属性 DATABASES = { 'd ...

  9. Python学习笔记_一个Tkinter示例,使用FileDialog

    为了使用Python进行数据分析,编写一个图形界面,选择一个Excel文件(或CSV),然后进行后续处理. 一.本示例涵盖如下知识点: 1.FileDialog的使用 2.退出程序 3.消息提示框的示 ...

随机推荐

  1. 升级与修改Nginx

    自从上次安装了Nginx后,学到了很多新的东西,比如http2.0... 而且还发现nginx还出了新版本,遂决定升级下,还是那个URL,下载最新版. ./configure --user=www - ...

  2. Download the Hibernate Tools

    首先去官网上下载最新版本的Hibernate Tools JBoss Tools 4.5.0.Final Requirements: Java 8 and Eclipse Oxygen 4.7 有 4 ...

  3. Linux入门之常用命令(13) crontab

    为当前用户创建cron服务 1.  键入 crontab  -e 编辑crontab服务文件 例如 文件内容如下: */2 * * * * /bin/sh /home/admin/jiaoben/bu ...

  4. Codeforces Round #309 (Div. 2)D

    C. Kyoya and Colored Balls time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  5. Scala 中的隐式转换和隐式参数

    隐式定义是指编译器为了修正类型错误而允许插入到程序中的定义. 举例: 正常情况下"120"/12显然会报错,因为 String 类并没有实现 / 这个方法,我们无法去决定 Stri ...

  6. python中strip函数的用法

    python中往往使用剥除函数strip()来对用户的输入进行清理.strip函数的最一般形式为: str.strip('序列') 其中,序列是一段字符串,该函数表示从头或者从尾部开始进行扫描,如果扫 ...

  7. JS类继承常用方式发展史

    JS类继承常用方式发展史 涉及知识点 构造函数方式继承 1-继承单个对象 1.1 多步走初始版 1.2 多步走优化版 1.3 Object.create()方式 2-继承多个对象 2.1 遍历 Obj ...

  8. webpack2使用ch7-loader解析css 自动添加浏览器前缀

    1 目录结构  安装的依赖 "autoprefixer": "^6.7.7", "css-loader": "^0.28.0&qu ...

  9. Java面向对象 GUI 补录

     Java面向对象 GUI 补录 知识概要:(1)GUI和CLI                   (2)AWT和SWING                   (3)AWT继承关系图      ...

  10. bootstrap 轮播模板

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...