wxpython+pymysql實(shí)現(xiàn)用戶登陸功能
wxpython最為一款python GUI庫(kù),由于簡(jiǎn)單和輕便外加強(qiáng)大的功能而受到很多python愛(ài)好者的喜愛(ài),pymysql作為python3.x版本連接mysql庫(kù),應(yīng)用也非常廣泛。今天利用這兩個(gè)庫(kù)寫(xiě)一個(gè)簡(jiǎn)單的用戶登陸的GUI窗口界面:
1.先看看界面的效果圖:



2.在搭建窗口時(shí)容易出現(xiàn)問(wèn)題的幾點(diǎn):
設(shè)置窗口圖標(biāo):窗口左上角圖片
最好將圖片的尺寸設(shè)計(jì)為32x32的格式:
#設(shè)置窗口的左上角的圖標(biāo) #其中參數(shù)type表示圖片的類(lèi)型,還有ico,jpgm等類(lèi)型 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è)計(jì)點(diǎn)擊函數(shù):
本次沒(méi)有使用圖片按鈕,只是簡(jiǎn)單的按鈕插件,所以看起來(lái)比較丑
#添加按鈕,pos參數(shù)為其位置
self.but_login = wx.Button(panel,-1,"登陸", size=(120,50), pos=(120,300))
self.but_register = wx.Button(panel,-1,"注冊(cè)", 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è)計(jì)圖片按鈕可以這樣實(shí)現(xiàn):
#設(shè)置圖片按鈕
pic = wx.Image('but_log.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap() # 把這個(gè)圖片的內(nèi)容妝轉(zhuǎn)化為這個(gè)pic 變量。
#pos為位置參數(shù),設(shè)置按鈕放置的位置
self.button = wx.BitmapButton(panel, -1, pic, pos=(10, 10)) # 固定的寫(xiě)法使用
效果如下:

pymysql連接本地?cái)?shù)據(jù)庫(kù),與用戶輸入對(duì)比:
通過(guò)getValue()的方法獲取用戶的輸入內(nèi)容,然后連接數(shù)據(jù)庫(kù)經(jīng)行查找和比較;
#定義一個(gè)消息彈出框的函數(shù)
def show_message(self,word=""):
dlg = wx.MessageDialog(None, word, u"錯(cuò)誤", wx.YES_NO | wx.ICON_QUESTION)
if dlg.ShowModal() == wx.ID_YES:
#self.Close(True)
pass
dlg.Destroy()
def on_but_login(self,event):
#連接到本地?cái)?shù)據(jù)庫(kù)
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)密碼或用戶名為空時(shí)會(huì)出現(xiàn)會(huì)導(dǎo)致出錯(cuò)
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語(yǔ)句
results = cur.fetchall() # 獲取查詢的所有記錄
#返回值是一個(gè)元組的形式
#print(type(results))
if results:
#print(type(results[0][0]))
#print(results[0][0])
if results[0][0] == pass_word:
#表示登陸成功,后續(xù)可以寫(xiě)登陸成功后的界面
#此處就不再寫(xiě)
pass
#print("sucessful")
else:
self.show_message(word="密碼錯(cuò)誤")
else:
self.show_message(word='用戶名不存在')
except Exception as e:
db.rollback()
finally:
db.close() # 關(guān)閉連接
else:
self.show_message(word='賬號(hào)和密碼不能為空')
總之,由于本人對(duì)布局掌握的不是很好,用的時(shí)固定坐標(biāo)的方法,導(dǎo)致當(dāng)窗口進(jìn)行拉升的時(shí)候效果不是很好:

案例的整體源代碼:
大家只要將需要加載的圖片資源和代碼放在同一個(gè)文件下就可以運(yùn)行了:
import wx
import pymysql
#由于當(dāng)前對(duì)布局管理器不是很熟悉,所系使用的是固定位置,導(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表示圖片的類(lèi)型,還有ico,jpgm等類(lèi)型
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,"賬號(hào):", 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,"注冊(cè)", 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)
#定義一個(gè)消息彈出框的函數(shù)
def show_message(self,word=""):
dlg = wx.MessageDialog(None, word, u"錯(cuò)誤", wx.YES_NO | wx.ICON_QUESTION)
if dlg.ShowModal() == wx.ID_YES:
#self.Close(True)
pass
dlg.Destroy()
def on_but_login(self,event):
#連接到本地?cái)?shù)據(jù)庫(kù)
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)密碼或用戶名為空時(shí)會(huì)出現(xiàn)會(huì)導(dǎo)致出錯(cuò)
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語(yǔ)句
results = cur.fetchall() # 獲取查詢的所有記錄
#返回值是一個(gè)元組的形式
#print(type(results))
if results:
#print(type(results[0][0]))
#print(results[0][0])
if results[0][0] == pass_word:
#表示登陸成功,后續(xù)可以寫(xiě)登陸成功后的界面
#此處就不再寫(xiě)
pass
#print("sucessful")
else:
self.show_message(word="密碼錯(cuò)誤")
else:
self.show_message(word='用戶名不存在')
except Exception as e:
db.rollback()
finally:
db.close() # 關(guān)閉連接
else:
self.show_message(word='賬號(hào)和密碼不能為空')
def on_but_register(self,event):
#類(lèi)似上上面的查詢,只需獲取相關(guān)內(nèi)容插入到數(shù)據(jù)庫(kù)就可以做出相關(guān)的操作
#內(nèi)容與上面內(nèi)容相似,不再經(jīng)行書(shū)寫(xiě)
pass
if __name__=='__main__':
app = MyApp()
app.MainLoop()
總結(jié):
這是我的第一篇博客,寫(xiě)的不好請(qǐng)大家見(jiàn)諒,也歡迎大家和我一起來(lái)探討python或其他的話題,也歡迎大家給我指出問(wèn)題。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 利用python中pymysql操作MySQL數(shù)據(jù)庫(kù)的新手指南
- Python接口自動(dòng)化淺析pymysql數(shù)據(jù)庫(kù)操作流程
- python使用pymysql模塊操作MySQL
- pymysql實(shí)現(xiàn)增刪改查的操作指南(python)
- python 基于PYMYSQL使用MYSQL數(shù)據(jù)庫(kù)
- python pymysql庫(kù)的常用操作
- Python pymysql模塊安裝并操作過(guò)程解析
- python數(shù)據(jù)庫(kù)操作mysql:pymysql、sqlalchemy常見(jiàn)用法詳解
- 在python中使用pymysql往mysql數(shù)據(jù)庫(kù)中插入(insert)數(shù)據(jù)實(shí)例
- Python使用pymysql模塊操作mysql增刪改查實(shí)例分析
- python之pymysql模塊簡(jiǎn)單應(yīng)用示例代碼
- 在Python中使用MySQL--PyMySQL的基本使用方法
- Python 中使用 PyMySQL模塊操作數(shù)據(jù)庫(kù)的方法
- 使用python連接mysql數(shù)據(jù)庫(kù)之pymysql模塊的使用
- Python pymysql操作MySQL詳細(xì)
相關(guān)文章
Tensorflow實(shí)現(xiàn)酸奶銷(xiāo)量預(yù)測(cè)分析
這篇文章主要為大家詳細(xì)介紹了Tensorflow酸奶銷(xiāo)量預(yù)測(cè)分析,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
python pandas模塊基礎(chǔ)學(xué)習(xí)詳解
這篇文章主要介紹了python pandas模塊基礎(chǔ)學(xué)習(xí)詳解的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Playwright如何自定義瀏覽器的下載和啟動(dòng)路徑
playwright是一個(gè)非常有趣的自動(dòng)化測(cè)試工具, 支持Node.js、Python、C# 和 Java語(yǔ)言,下面我們就來(lái)看看如何使用Playwright進(jìn)行自定義瀏覽器的下載和啟動(dòng)路徑吧2025-04-04
Python解決“argument?after?*?must?be?an?iterable”報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了Python解決“argument?after?*?must?be?an?iterable”報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
python opencv膚色檢測(cè)的實(shí)現(xiàn)示例
這篇文章主要介紹了python opencv膚色檢測(cè)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Python(wordcloud)如何根據(jù)文本數(shù)據(jù)(.txt文件)繪制詞云圖
這篇文章主要給大家介紹了關(guān)于Python(wordcloud)如何根據(jù)文本數(shù)據(jù)(.txt文件)繪制詞云圖的相關(guān)資料,詞云Wordcloud是文本數(shù)據(jù)的一種可視化表示方式,它通過(guò)設(shè)置不同的字體大小或顏色來(lái)表現(xiàn)每個(gè)術(shù)語(yǔ)的重要性,需要的朋友可以參考下2024-05-05
python csv實(shí)時(shí)一條一條插入且表頭不重復(fù)問(wèn)題
這篇文章主要介紹了python csv實(shí)時(shí)一條一條插入且表頭不重復(fù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
python使用tkinter實(shí)現(xiàn)透明窗體上繪制隨機(jī)出現(xiàn)的小球(實(shí)例代碼)
今天教大家怎么實(shí)現(xiàn)Tkinter透明窗體,在上篇文章給大家介紹過(guò)透明窗體上繪制小球,今天接著通過(guò)實(shí)例代碼給大家分享python使用tkinter實(shí)現(xiàn)透明窗體上繪制隨機(jī)出現(xiàn)的小球的實(shí)例代碼,感興趣的朋友跟隨小編一起看看吧2021-05-05

