您好,登錄后才能下訂單哦!
怎么在wxpython中使用pymysql實現一個用戶登陸功能?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
#設置窗口的左上角的圖標 #其中參數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()
看完上述內容,你們掌握怎么在wxpython中使用pymysql實現一個用戶登陸功能的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。