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生成器(Generator)详解
Apr 13 Python
python爬取亚马逊书籍信息代码分享
Dec 09 Python
Python模块WSGI使用详解
Feb 02 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
Python线性拟合实现函数与用法示例
Dec 13 Python
Python图像处理之图片文字识别功能(OCR)
Jul 30 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
python suds访问webservice服务实现
Jun 26 Python
在django中查询获取数据,get, filter,all(),values()操作
Aug 09 Python
用python绘制樱花树
Oct 09 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连接MySQL代码的参数说明
2008/06/07 PHP
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
关于js datetime的那点事
2011/11/15 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
2018/09/29 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
Python 3.x 新特性及10大变化
2015/06/12 Python
python链接Oracle数据库的方法
2015/06/28 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
环境工程专业自荐信范文
2014/03/18 职场文书
镇创先争优活动总结
2014/08/28 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
openstack中的rpc远程调用的方法
2021/07/09 Python
Java 多态分析
2022/04/26 Java/Android
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python