wxpython+pymysql实现用户登陆功能

 更新时间:2021年09月26日 15:14:34   作者:qq_43011496  
这篇文章主要介绍了wxpython+pymysql实现用户登陆功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

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)) # 固定的写法使用

效果如下:

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='账号和密码不能为空')

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

案例的整体源代码:

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

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 OpenCV处理图像之图像像素点操作

    Python OpenCV处理图像之图像像素点操作

    这篇文章主要为大家详细介绍了Python OpenCV处理图像之图像像素点操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • pygame库pgu使用示例代码

    pygame库pgu使用示例代码

    pgu全称是Phil’s pyGame Utilities,是pygame的一组模块与脚本,其中还有gui集成了一些小模块,现在用pygame制作小游戏的人越来越多,但是pygame它是没有弹窗机制的,今天通过本文给大家介绍pygame库pgu使用示例代码,需要的朋友参考下吧
    2021-08-08
  • python查找指定依赖包简介信息实现

    python查找指定依赖包简介信息实现

    这篇文章主要为大家介绍了python查找指定依赖包简介信息实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • python实现微信小程序反编译效果

    python实现微信小程序反编译效果

    这篇文章主要介绍了python实现微信小程序反编译效果,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)

    浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)

    浏览器常用基本操作有很多种,今天给大家介绍python3+selenium4自动化测试的操作方法,是最最基础的一篇,对python3 selenium4自动化测试相关知识感兴趣的朋友一起看看吧
    2021-05-05
  • Pandas中的unique()和nunique()区别详解

    Pandas中的unique()和nunique()区别详解

    Pandas中Series和DataFrame的两种数据类型中都有nunique()和unique()方法,本文详细的介绍了两者的区别,具有一定的参考价值,感兴趣的可以了解一下
    2022-08-08
  • python深度总结线性回归

    python深度总结线性回归

    这篇文章主要介绍了python的深度总结之线性回归,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 上手简单,功能强大的Python爬虫框架——feapder

    上手简单,功能强大的Python爬虫框架——feapder

    这篇文章主要介绍了上手简单,功能强大的Python爬虫框架——feapder的使用教程,帮助大家更好的利用python进行爬虫,感兴趣的朋友可以了解下
    2021-04-04
  • python构建指数平滑预测模型示例

    python构建指数平滑预测模型示例

    今天小编就为大家分享一篇python构建指数平滑预测模型示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python for循环输入一个矩阵的实例

    python for循环输入一个矩阵的实例

    今天小编就为大家分享一篇python for循环输入一个矩阵的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11

最新评论