You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

163 lines
6.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import wx
import random
import pymysql
import time
import threading
from MySQL import function
# 所系使用的是固定位置,导致窗口拉伸的效果不是很好
class MyApp(wx.App): #定义一个名为MyApp的类继承自wxPython的App类
def doClose(self, j):
time.sleep(j)
self.frame.Close()
def __init__(self):
wx.App.__init__(self)
self.frame = wx.Frame(parent=None, title='Login', size=(600, 460),
style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX)
# 设置窗口的左上角的图标 600, 460
# 其中参数type表示图片的类型还有icojpgm等类型
icon_1 = wx.Icon(name='img\\favicon.png', type=wx.BITMAP_TYPE_PNG)
self.frame.SetIcon(icon_1)
panel = wx.Panel(self.frame, -1)
# 向panel中添加图片
image = wx.Image("img\\登录背景.jpg", wx.BITMAP_TYPE_JPEG).ConvertToBitmap()
panel.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack)
# 添加文本输入框
label_user = wx.StaticText(panel, label='用户:', pos=(120, 230))
label_user.SetBackgroundColour(wx.Colour(255, 255, 255))
self.entry_user = wx.TextCtrl(panel, -1, size=(225, 35), pos=(160, 225))
# style 为设置输入
label_pass = wx.StaticText(panel, label='密码:', pos=(120, 280))
label_pass.SetBackgroundColour(wx.Colour(255, 255, 255))
self.entry_pass = wx.TextCtrl(panel, -1, size=(225, 35), pos=(160, 270), style=wx.TE_PASSWORD)
# 添加按钮
self.but_login = wx.Button(panel, -1, "登陆", size=(130, 50), pos=(140, 340))
self.but_register = wx.Button(panel, -1, "注册", size=(130, 50), pos=(297, 340))
# 设置按钮的颜色
self.but_login.SetBackgroundColour("#0a74f7")
self.but_register.SetBackgroundColour("#0a74f7")
# 给按钮绑定事件
self.Bind(wx.EVT_BUTTON, self.on_but_login, self.but_login)
self.Bind(wx.EVT_BUTTON, self.on_but_register, self.but_register)
self.frame.Center()
self.frame.Show(True)
def OnEraseBack(self, event): #定义一个方法,用于处理窗口背景的擦除事件
dc = event.GetDC()
if not dc:
dc = wx.ClientDC(self)
rect = self.GetUpdateRegion().GetBox()
dc.SetClippingRect(rect)
dc.Clear()
bmp = wx.Bitmap("img\\登录背景.jpg")
dc.DrawBitmap(bmp, 0, 0)
# 定义一个消息弹出框的函数
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 show_que(self, word=""): #定义一个方法,用于显示提示消息框,并在确认后关闭窗口
dlg = wx.MessageDialog(None, word, u"提示", wx.YES_NO | wx.ICON_QUESTION)
if dlg.ShowModal() == wx.ID_YES:
# self.Close(True)
t = threading.Thread(target=self.doClose, args=(0.5,))
t.start()
dlg.Destroy()
def on_but_login(self, event): #定义一个方法,用于处理登录按钮的点击事件,包括与数据库的连接和用户验证。
user_name = self.entry_user.GetValue()
pass_word = self.entry_pass.GetValue()
sql = """select password from card where Card_Number ='%s' """ % (user_name)
# 判断,查看用户名和密码名是否为空
# 不为空之后在进行查询和判断
# 不然当密码或用户名为空时会出现会导致出错
if user_name and pass_word:
print(user_name, " ", pass_word)
db = pymysql.connect(host="localhost", user="root",
password="lwh20021210...", db="atm", 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] == int(pass_word):
self.show_que(word="登陆成功")
jie = function.Jiemian(user_name)
jie.MainLoop()
# self.page1 = function.Jiemian()
# je=Jiemian()
# je.MainLoop()
# self.AddPage(self.page1, "xxpage")
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): #定义一个方法,用于处理注册按钮的点击事件,包括将新用户信息插入到数据库
user_name = self.entry_user.GetValue()
pass_word = self.entry_pass.GetValue()
sql = "INSERT INTO card (Card_Number, password,持卡人姓名,身份证号,余额,card类型) VALUES ('%s','%s','%s','%s','%s','%s')" % (
user_name, pass_word, '用户', 37000000000, 0, " ")
# 判断,查看用户名和密码名是否为空
# 不为空之后在进行查询和判断
# 不然当密码或用户名为空时会出现会导致出错
if user_name and pass_word:
print(user_name, " ", pass_word)
db = pymysql.connect(host="localhost", user="root",
password="lwh20021210...", db="atm", port=3306)
# 使用cursor()方法获取操作游标
cur = db.cursor()
try:
cur.execute(sql) # 执行sql语句
results = cur.rowcount # 获取查询的所有记录
# 返回值是一个元组的形式
db.commit()
print(type(results))
if results:
# print(type(results[0][0]))
if results > 0:
self.show_que(word="操作成功")
else:
self.show_message(word="操作失败")
else:
self.show_message(word='操作失败')
except Exception as e:
db.rollback()
finally:
db.close() # 关闭连接
else:
self.show_message(word='账号和密码不能为空')
# je=Jiemian()
# je.MainLoop()
# je=Jiemian()
# je.MainLoop()