wxpython+pymysql实现用户登陆功能


Posted in Python onNovember 19, 2019

wxpython最为一款python GUI库,由于简单和轻便外加强大的功能而受到很多python爱好者的喜爱,pymysql作为python3.x版本连接mysql库,应用也非常广泛。今天利用这两个库写一个简单的用户登陆的GUI窗口界面:

1.先看看界面的效果图:  

wxpython+pymysql实现用户登陆功能

wxpython+pymysql实现用户登陆功能

wxpython+pymysql实现用户登陆功能

2.在搭建窗口时容易出现问题的几点:

设置窗口图标:窗口左上角图片
最好将图片的尺寸设计为32x32的格式:

#设置窗口的左上角的图标
#其中参数type表示图片的类型,还有ico,jpgm等类型
icon_1 = wx.Icon(name='python1.png',type=wx.BITMAP_TYPE_PNG)
frame.SetIcon(icon_1)

在panel中添加图片展示:

panel = wx.Panel(frame,-1)
  # 向panel中添加图片
image =wx.Image("python2.jpg", wx.BITMAP_TYPE_JPEG).ConvertToBitmap()
wx.StaticBitmap(panel, -1, bitmap=image, pos=(0, 0))

给登陆按钮设计点击函数:
本次没有使用图片按钮,只是简单的按钮插件,所以看起来比较丑

#添加按钮,pos参数为其位置
  self.but_login = wx.Button(panel,-1,"登陆", size=(120,50), pos=(120,300))
  self.but_register = wx.Button(panel,-1,"注册", size=(120,50), pos=(260,300))
  #设置按钮的颜色
  self.but_login.SetBackgroundColour("#0a74f7")
  self.but_register.SetBackgroundColour("#282c34")
  #给按钮绑定事件
  self.Bind(wx.EVT_BUTTON,self.on_but_login,self.but_login)
  self.Bind(wx.EVT_BUTTON,self.on_but_register,self.but_register)

如果要设计图片按钮可以这样实现:

#设置图片按钮
pic = wx.Image('but_log.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap() # 把这个图片的内容妆转化为这个pic 变量。
#pos为位置参数,设置按钮放置的位置
self.button = wx.BitmapButton(panel, -1, pic, pos=(10, 10)) # 固定的写法使用

效果如下:

wxpython+pymysql实现用户登陆功能

pymysql连接本地数据库,与用户输入对比:

通过getValue()的方法获取用户的输入内容,然后连接数据库经行查找和比较;

#定义一个消息弹出框的函数
 def show_message(self,word=""):
  dlg = wx.MessageDialog(None, word, u"错误", wx.YES_NO | wx.ICON_QUESTION)

  if dlg.ShowModal() == wx.ID_YES:
   #self.Close(True)
   pass
  dlg.Destroy()


 def on_but_login(self,event):
  #连接到本地数据库

  user_name = self.entry_user.GetValue()
  pass_word= self.entry_pass.GetValue()

  sql = """select pass from student where name ='%s' """ % (user_name)
  #判断,查看用户名和密码名是否为空
  #不为空之后在进行查询和判断
  #不然当密码或用户名为空时会出现会导致出错
  if user_name and pass_word:
   db = pymysql.connect(host="localhost", user="root",
   password="zhang123", db="user", port=3306)
   # 使用cursor()方法获取操作游标
   cur = db.cursor()
   try:

    cur.execute(sql) # 执行sql语句

    results = cur.fetchall() # 获取查询的所有记录
    #返回值是一个元组的形式
    #print(type(results))
    if results:
     #print(type(results[0][0]))
     #print(results[0][0])
     if results[0][0] == pass_word:
      #表示登陆成功,后续可以写登陆成功后的界面
      #此处就不再写
      pass
      #print("sucessful")

     else:
      self.show_message(word="密码错误")


    else:
     self.show_message(word='用户名不存在')

   except Exception as e:
    db.rollback()


   finally:

    db.close() # 关闭连接
  else:
   self.show_message(word='账号和密码不能为空')

总之,由于本人对布局掌握的不是很好,用的时固定坐标的方法,导致当窗口进行拉升的时候效果不是很好:

wxpython+pymysql实现用户登陆功能

案例的整体源代码:

大家只要将需要加载的图片资源和代码放在同一个文件下就可以运行了:

import wx
import pymysql
#由于当前对布局管理器不是很熟悉,所系使用的是固定位置,导致窗口拉伸的效果不是很好
class MyApp(wx.App):
 def __init__(self):
  wx.App.__init__(self)
  frame = wx.Frame(parent=None,title='Login',size=(532,420))
  #设置窗口的左上角的图标
  #其中参数type表示图片的类型,还有ico,jpgm等类型
  icon_1 = wx.Icon(name='python1.png',type=wx.BITMAP_TYPE_PNG)
  frame.SetIcon(icon_1)

  panel = wx.Panel(frame,-1)
  # 向panel中添加图片
  image =wx.Image("python2.jpg", wx.BITMAP_TYPE_JPEG).ConvertToBitmap()
  wx.StaticBitmap(panel, -1, bitmap=image, pos=(0, 0))

  #添加静态标签
  label_user = wx.StaticText(panel,-1,"账号:", pos=(80,200))
  label_pass = wx.StaticText(panel,-1,"密码:", pos=(80,240))
  #添加文本输入框
  self.entry_user = wx.TextCtrl(panel,-1,size=(200,30), pos=(130,200))
  #style 为设置输入
  self.entry_pass = wx.TextCtrl(panel,-1, size=(200,30), pos=(130,240), style=wx.TE_PASSWORD)
  #添加按钮
  self.but_login = wx.Button(panel,-1,"登陆", size=(120,50), pos=(120,300))
  self.but_register = wx.Button(panel,-1,"注册", size=(120,50), pos=(260,300))
  #设置按钮的颜色
  self.but_login.SetBackgroundColour("#0a74f7")
  self.but_register.SetBackgroundColour("#282c34")
  #给按钮绑定事件
  self.Bind(wx.EVT_BUTTON,self.on_but_login,self.but_login)
  self.Bind(wx.EVT_BUTTON,self.on_but_register,self.but_register)
  #
  frame.Center()
  frame.Show(True)

 #定义一个消息弹出框的函数
 def show_message(self,word=""):
  dlg = wx.MessageDialog(None, word, u"错误", wx.YES_NO | wx.ICON_QUESTION)

  if dlg.ShowModal() == wx.ID_YES:
   #self.Close(True)
   pass
  dlg.Destroy()


 def on_but_login(self,event):
  #连接到本地数据库

  user_name = self.entry_user.GetValue()
  pass_word= self.entry_pass.GetValue()

  sql = """select pass from student where name ='%s' """ % (user_name)
  #判断,查看用户名和密码名是否为空
  #不为空之后在进行查询和判断
  #不然当密码或用户名为空时会出现会导致出错
  if user_name and pass_word:
   db = pymysql.connect(host="localhost", user="root",
   password="zhang123", db="user", port=3306)
   # 使用cursor()方法获取操作游标
   cur = db.cursor()
   try:

    cur.execute(sql) # 执行sql语句

    results = cur.fetchall() # 获取查询的所有记录
    #返回值是一个元组的形式
    #print(type(results))
    if results:
     #print(type(results[0][0]))
     #print(results[0][0])
     if results[0][0] == pass_word:
      #表示登陆成功,后续可以写登陆成功后的界面
      #此处就不再写
      pass
      #print("sucessful")

     else:
      self.show_message(word="密码错误")


    else:
     self.show_message(word='用户名不存在')

   except Exception as e:
    db.rollback()


   finally:

    db.close() # 关闭连接
  else:
   self.show_message(word='账号和密码不能为空')




 def on_but_register(self,event):
  #类似上上面的查询,只需获取相关内容插入到数据库就可以做出相关的操作
  #内容与上面内容相似,不再经行书写
  pass


if __name__=='__main__':
 app = MyApp()
 app.MainLoop()

总结:

这是我的第一篇博客,写的不好请大家见谅,也欢迎大家和我一起来探讨python或其他的话题,也欢迎大家给我指出问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python利用beautifulSoup实现爬虫
Sep 29 Python
Linux环境下MySQL-python安装过程分享
Feb 02 Python
Python文件处理
Feb 29 Python
Python 常用string函数详解
May 30 Python
基于python爬虫数据处理(详解)
Jun 10 Python
Python爬虫信息输入及页面的切换方法
May 11 Python
Python零基础入门学习之输入与输出
Apr 03 Python
Python求解排列中的逆序数个数实例
May 03 Python
python右对齐的实例方法
Jul 05 Python
Matplotlib 折线图plot()所有用法详解
Jul 28 Python
Python rabbitMQ如何实现生产消费者模式
Aug 24 Python
python性能测试工具locust的使用
Dec 28 Python
pygame编写音乐播放器的实现代码示例
Nov 19 #Python
pyinstaller打包程序exe踩过的坑
Nov 19 #Python
基于Python中的yield表达式介绍
Nov 19 #Python
Python函数式编程指南:对生成器全面讲解
Nov 19 #Python
wxPython电子表格功能wx.grid实例教程
Nov 19 #Python
python 实现return返回多个值
Nov 19 #Python
wxPython实现带颜色的进度条
Nov 19 #Python
You might like
PHP自动生成月历代码
2006/10/09 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
phpStudy vscode 搭建debug调试的教程详解
2020/07/28 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
javascript下function声明一些小结
2007/12/28 Javascript
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
ES6实现的遍历目录函数示例
2017/04/07 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
基于vue-resource jsonp跨域问题的解决方法
2018/02/03 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
vue脚手架项目创建步骤详解
2021/03/02 Vue.js
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
利用Python的turtle库绘制玫瑰教程
2019/11/23 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
护理学毕业生求职信
2013/11/14 职场文书
总经理助理职责
2014/02/04 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
2014年药房工作总结
2014/11/22 职场文书
2015毕业实习推荐信
2015/03/23 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
Python实现学生管理系统(面向对象版)
2021/06/24 Python
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python
JavaScript实现两个数组的交集
2022/03/25 Javascript
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL