1. 程式人生 > 資料庫 >wxpython+pymysql實現使用者登陸功能

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,"登陸",size=(120,50),pos=(120,300))
  self.but_register = wx.Button(panel,"註冊",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,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,0))

  #新增靜態標籤
  label_user = wx.StaticText(panel,"賬號:",pos=(80,200))
  label_pass = wx.StaticText(panel,"密碼:",240))
  #新增文字輸入框
  self.entry_user = wx.TextCtrl(panel,size=(200,30),pos=(130,200))
  #style 為設定輸入
  self.entry_pass = wx.TextCtrl(panel,240),style=wx.TE_PASSWORD)
  #新增按鈕
  self.but_login = wx.Button(panel,self.but_register)
  #
  frame.Center()
  frame.Show(True)

 #定義一個訊息彈出框的函式
 def show_message(self,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或其他的話題,也歡迎大家給我指出問題。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。