wxpython+pymysql实现用户登陆功能

作者:qq_43011496 时间:2023-01-06 11:32:04 

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或其他的话题,也欢迎大家给我指出问题。

来源:https://blog.csdn.net/qq_43011496/article/details/81842854

标签:wxpython,pymysql,用户登陆
0
投稿

猜你喜欢

  • 利用Pytorch实现ResNet网络构建及模型训练

    2022-02-24 19:57:59
  • sqlserver 不重复的随机数

    2012-02-12 15:29:29
  • opencv实现图像旋转效果

    2023-07-17 13:28:40
  • 如何将 Access 的 Memo 型态字段汇入到 SQL2005 的 nvarchar 型态字段

    2008-12-26 18:13:00
  • python虚拟环境迁移方法

    2021-09-13 07:52:51
  • 将以用户为中心的设计嵌入产品设计和开发流程

    2009-08-11 14:27:00
  • Python3自动生成MySQL数据字典的markdown文本的实现

    2021-04-29 15:21:18
  • Python基于pillow库实现生成图片水印

    2021-08-01 10:45:38
  • python的几种矩阵相乘的公式详解

    2021-03-28 21:13:56
  • 通过T-SQL语句实现数据库备份与还原的代码

    2024-01-12 15:20:50
  • MySQL笔记之运算符使用详解

    2024-01-21 00:21:35
  • 在Mac中配置Python虚拟环境过程解析

    2023-11-14 06:55:43
  • MySQL单表多关键字模糊查询的实现方法

    2024-01-12 18:12:14
  • 如何使用moment.js获取本周、前n周、后n周开始结束日期及动态计算周数

    2024-05-28 15:40:15
  • Python linecache.getline()读取文件中特定一行的脚本

    2023-03-09 13:18:05
  • python已协程方式处理任务实现过程

    2022-05-10 03:12:56
  • XML简易教程之一

    2008-09-05 17:19:00
  • MySQL 请选择合适的列

    2024-01-23 05:33:31
  • MySQL中连接查询和子查询的问题

    2024-01-19 04:27:32
  • 在python中利用try..except来代替if..else的用法

    2023-09-12 17:50:10
  • asp之家 网络编程 m.aspxhome.com