wxpython+pymysql實(shí)現(xiàn)用戶登陸功能
wxpython最為一款python GUI庫,由于簡單和輕便外加強(qiáng)大的功能而受到很多python愛好者的喜愛,pymysql作為python3.x版本連接mysql庫,應(yīng)用也非常廣泛。今天利用這兩個庫寫一個簡單的用戶登陸的GUI窗口界面:
1.先看看界面的效果圖:
2.在搭建窗口時容易出現(xiàn)問題的幾點(diǎn):
設(shè)置窗口圖標(biāo):窗口左上角圖片
最好將圖片的尺寸設(shè)計為32x32的格式:
#設(shè)置窗口的左上角的圖標(biāo) #其中參數(shù)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))
給登陸按鈕設(shè)計點(diǎn)擊函數(shù):
本次沒有使用圖片按鈕,只是簡單的按鈕插件,所以看起來比較丑
#添加按鈕,pos參數(shù)為其位置 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)) #設(shè)置按鈕的顏色 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)
如果要設(shè)計圖片按鈕可以這樣實(shí)現(xiàn):
#設(shè)置圖片按鈕 pic = wx.Image('but_log.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap() # 把這個圖片的內(nèi)容妝轉(zhuǎn)化為這個pic 變量。 #pos為位置參數(shù),設(shè)置按鈕放置的位置 self.button = wx.BitmapButton(panel, -1, pic, pos=(10, 10)) # 固定的寫法使用
效果如下:
pymysql連接本地數(shù)據(jù)庫,與用戶輸入對比:
通過getValue()的方法獲取用戶的輸入內(nèi)容,然后連接數(shù)據(jù)庫經(jīng)行查找和比較;
#定義一個消息彈出框的函數(shù) 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): #連接到本地數(shù)據(jù)庫 user_name = self.entry_user.GetValue() pass_word= self.entry_pass.GetValue() sql = """select pass from student where name ='%s' """ % (user_name) #判斷,查看用戶名和密碼名是否為空 #不為空之后在進(jìn)行查詢和判斷 #不然當(dāng)密碼或用戶名為空時會出現(xiàn)會導(dǎo)致出錯 if user_name and pass_word: db = pymysql.connect(host="localhost", user="root", password="zhang123", db="user", port=3306) # 使用cursor()方法獲取操作游標(biāo) cur = db.cursor() try: cur.execute(sql) # 執(zhí)行sql語句 results = cur.fetchall() # 獲取查詢的所有記錄 #返回值是一個元組的形式 #print(type(results)) if results: #print(type(results[0][0])) #print(results[0][0]) if results[0][0] == pass_word: #表示登陸成功,后續(xù)可以寫登陸成功后的界面 #此處就不再寫 pass #print("sucessful") else: self.show_message(word="密碼錯誤") else: self.show_message(word='用戶名不存在') except Exception as e: db.rollback() finally: db.close() # 關(guān)閉連接 else: self.show_message(word='賬號和密碼不能為空')
總之,由于本人對布局掌握的不是很好,用的時固定坐標(biāo)的方法,導(dǎo)致當(dāng)窗口進(jìn)行拉升的時候效果不是很好:
案例的整體源代碼:
大家只要將需要加載的圖片資源和代碼放在同一個文件下就可以運(yùn)行了:
import wx import pymysql #由于當(dāng)前對布局管理器不是很熟悉,所系使用的是固定位置,導(dǎo)致窗口拉伸的效果不是很好 class MyApp(wx.App): def __init__(self): wx.App.__init__(self) frame = wx.Frame(parent=None,title='Login',size=(532,420)) #設(shè)置窗口的左上角的圖標(biāo) #其中參數(shù)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)) #添加靜態(tài)標(biāo)簽 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 為設(shè)置輸入 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)) #設(shè)置按鈕的顏色 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) #定義一個消息彈出框的函數(shù) 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): #連接到本地數(shù)據(jù)庫 user_name = self.entry_user.GetValue() pass_word= self.entry_pass.GetValue() sql = """select pass from student where name ='%s' """ % (user_name) #判斷,查看用戶名和密碼名是否為空 #不為空之后在進(jìn)行查詢和判斷 #不然當(dāng)密碼或用戶名為空時會出現(xiàn)會導(dǎo)致出錯 if user_name and pass_word: db = pymysql.connect(host="localhost", user="root", password="zhang123", db="user", port=3306) # 使用cursor()方法獲取操作游標(biāo) cur = db.cursor() try: cur.execute(sql) # 執(zhí)行sql語句 results = cur.fetchall() # 獲取查詢的所有記錄 #返回值是一個元組的形式 #print(type(results)) if results: #print(type(results[0][0])) #print(results[0][0]) if results[0][0] == pass_word: #表示登陸成功,后續(xù)可以寫登陸成功后的界面 #此處就不再寫 pass #print("sucessful") else: self.show_message(word="密碼錯誤") else: self.show_message(word='用戶名不存在') except Exception as e: db.rollback() finally: db.close() # 關(guān)閉連接 else: self.show_message(word='賬號和密碼不能為空') def on_but_register(self,event): #類似上上面的查詢,只需獲取相關(guān)內(nèi)容插入到數(shù)據(jù)庫就可以做出相關(guān)的操作 #內(nèi)容與上面內(nèi)容相似,不再經(jīng)行書寫 pass if __name__=='__main__': app = MyApp() app.MainLoop()
總結(jié):
這是我的第一篇博客,寫的不好請大家見諒,也歡迎大家和我一起來探討python或其他的話題,也歡迎大家給我指出問題。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 利用python中pymysql操作MySQL數(shù)據(jù)庫的新手指南
- Python接口自動化淺析pymysql數(shù)據(jù)庫操作流程
- python使用pymysql模塊操作MySQL
- pymysql實(shí)現(xiàn)增刪改查的操作指南(python)
- python 基于PYMYSQL使用MYSQL數(shù)據(jù)庫
- python pymysql庫的常用操作
- Python pymysql模塊安裝并操作過程解析
- python數(shù)據(jù)庫操作mysql:pymysql、sqlalchemy常見用法詳解
- 在python中使用pymysql往mysql數(shù)據(jù)庫中插入(insert)數(shù)據(jù)實(shí)例
- Python使用pymysql模塊操作mysql增刪改查實(shí)例分析
- python之pymysql模塊簡單應(yīng)用示例代碼
- 在Python中使用MySQL--PyMySQL的基本使用方法
- Python 中使用 PyMySQL模塊操作數(shù)據(jù)庫的方法
- 使用python連接mysql數(shù)據(jù)庫之pymysql模塊的使用
- Python pymysql操作MySQL詳細(xì)
相關(guān)文章
Python 實(shí)現(xiàn)將numpy中的nan和inf,nan替換成對應(yīng)的均值
這篇文章主要介紹了Python 實(shí)現(xiàn)將numpy中的nan和inf,nan替換成對應(yīng)的均值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python scipy卷積運(yùn)算的實(shí)現(xiàn)方法
這篇文章主要介紹了python scipy卷積運(yùn)算的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Python數(shù)據(jù)可視化之環(huán)形圖
這篇文章主要介紹了Python數(shù)據(jù)可視化之環(huán)形圖,主要使用兩種不同的方式來可視化環(huán)形圖,并均給出了完整的代碼示例。需要的朋友可以參考一下,希望對你的工作和學(xué)習(xí)有所幫助2022-01-01Pandas||過濾缺失數(shù)據(jù)||pd.dropna()函數(shù)的用法說明
這篇文章主要介紹了Pandas||過濾缺失數(shù)據(jù)||pd.dropna()函數(shù)的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05使用Python的開發(fā)框架Brownie部署以太坊智能合約
在本文中,我們將使用Python部署智能合約。這篇文章可能是您走向智能合約和區(qū)塊鏈開發(fā)的橋梁!2021-05-05