实现效果如图:
1.界面文件register_ui.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'register_ui.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(469, 458)
palette = QtGui.QPalette()
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(78, 202, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(78, 202, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(78, 202, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(78, 202, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
MainWindow.setPalette(palette)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("填写注册信息.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
spacerItem = QtWidgets.QSpacerItem(20, 11, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem, 0, 4, 1, 1)
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 1, 1, 1, 1)
spacerItem1 = QtWidgets.QSpacerItem(24, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem1, 1, 2, 1, 2)
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setObjectName("lineEdit")
self.gridLayout.addWidget(self.lineEdit, 1, 4, 1, 2)
spacerItem2 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem2, 2, 5, 1, 1)
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 3, 1, 1, 1)
spacerItem3 = QtWidgets.QSpacerItem(24, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem3, 3, 2, 1, 2)
self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout.addWidget(self.lineEdit_2, 3, 4, 1, 2)
spacerItem4 = QtWidgets.QSpacerItem(20, 11, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem4, 4, 5, 1, 1)
spacerItem5 = QtWidgets.QSpacerItem(26, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem5, 5, 0, 1, 1)
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 5, 1, 1, 2)
spacerItem6 = QtWidgets.QSpacerItem(24, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem6, 5, 3, 1, 1)
self.splitter = QtWidgets.QSplitter(self.centralwidget)
self.splitter.setOrientation(QtCore.Qt.Horizontal)
self.splitter.setObjectName("splitter")
self.lineEdit_3 = QtWidgets.QLineEdit(self.splitter)
palette = QtGui.QPalette()
brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush)
self.lineEdit_3.setPalette(palette)
self.lineEdit_3.setObjectName("lineEdit_3")
self.send_certify_code_label = QtWidgets.QLabel(self.splitter)
self.send_certify_code_label.setMouseTracking(True)
self.send_certify_code_label.setFocusPolicy(QtCore.Qt.ClickFocus)
self.send_certify_code_label.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
self.send_certify_code_label.setAcceptDrops(True)
self.send_certify_code_label.setObjectName("send_certify_code_label")
self.gridLayout.addWidget(self.splitter, 5, 4, 1, 3)
spacerItem7 = QtWidgets.QSpacerItem(64, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem7, 5, 7, 1, 1)
spacerItem8 = QtWidgets.QSpacerItem(20, 11, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem8, 6, 6, 1, 1)
self.label_6 = QtWidgets.QLabel(self.centralwidget)
self.label_6.setObjectName("label_6")
self.gridLayout.addWidget(self.label_6, 7, 1, 1, 2)
spacerItem9 = QtWidgets.QSpacerItem(63, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem9, 7, 3, 1, 1)
self.lineEdit_4 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_4.setObjectName("lineEdit_4")
self.gridLayout.addWidget(self.lineEdit_4, 7, 4, 1, 2)
spacerItem10 = QtWidgets.QSpacerItem(20, 25, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem10, 8, 5, 1, 1)
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setObjectName("label_4")
self.gridLayout.addWidget(self.label_4, 9, 1, 1, 1)
spacerItem11 = QtWidgets.QSpacerItem(54, 13, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem11, 9, 2, 1, 2)
self.lineEdit_5 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_5.setObjectName("lineEdit_5")
self.gridLayout.addWidget(self.lineEdit_5, 9, 4, 1, 2)
spacerItem12 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem12, 10, 6, 1, 1)
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setObjectName("label_5")
self.gridLayout.addWidget(self.label_5, 11, 1, 1, 1)
spacerItem13 = QtWidgets.QSpacerItem(24, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem13, 11, 2, 1, 2)
self.lineEdit_6 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_6.setObjectName("lineEdit_6")
self.gridLayout.addWidget(self.lineEdit_6, 11, 4, 1, 2)
spacerItem14 = QtWidgets.QSpacerItem(20, 11, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem14, 12, 5, 1, 1)
spacerItem15 = QtWidgets.QSpacerItem(178, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem15, 13, 0, 1, 4)
self.regist_button = QtWidgets.QPushButton(self.centralwidget)
self.regist_button.setObjectName("regist_button")
self.gridLayout.addWidget(self.regist_button, 13, 4, 1, 1)
spacerItem16 = QtWidgets.QSpacerItem(180, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem16, 13, 5, 1, 3)
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "填写注册信息"))
self.label.setText(_translate("MainWindow", "姓名"))
self.label_2.setText(_translate("MainWindow", "学号"))
self.label_3.setText(_translate("MainWindow", "手机号"))
self.send_certify_code_label.setText(_translate("MainWindow", "发送验证码"))
self.label_6.setText(_translate("MainWindow", "验证码"))
self.label_4.setText(_translate("MainWindow", "账号"))
self.label_5.setText(_translate("MainWindow", "密码"))
self.regist_button.setText(_translate("MainWindow", "注册"))
2.逻辑文件register_window.py
from register_ui import Ui_MainWindow
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication,QMessageBox
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QPalette, QBrush, QPixmap, QMovie
import global_num
import pymysql
import datetime
import random
from PyQt5.QtCore import QTimer
from sql_table_exist import sql_table_exist
import time
from send_sms import send_sms
class my_register(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent) #调用父类构造函数,创建窗体
self.ui= Ui_MainWindow() #创建UI对象
self.ui.setupUi(self) #构造UI界面
self.resize(500, 500)
#palette = QPalette()
#palette.setBrush(QPalette.Background, QBrush(QPixmap("yzj.png")))
#self.setPalette(palette)
self.ui.send_certify_code_label.setText("<a href='www.baidu.com' style='color:red'>发送验证码</a>")
self.ui.send_certify_code_label.linkActivated.connect(self.send_certify_code)
self.ui.regist_button.clicked.connect(self.regist)
self.count = 60
self.time = QTimer(self)
self.time.setInterval(1000)
self.time.timeout.connect(self.refresh)
'''
********************************************************
* 实现验证码没收到时,过60秒才能重新发送验证码,为老板节约短信费。*
********************************************************
'''
def Action(self):
if self.ui.send_certify_code_label.isEnabled():
self.time.start()
self.ui.send_certify_code_label.setEnabled(False)
def send_certify_code(self):
if self.ui.lineEdit_3.text() == '':
self.ui.lineEdit_3.setPlaceholderText("请填入手机号")
else:
if sql_table_exist('stu_info') == 1:
conn = pymysql.connect(host='localhost', port=3306, user='root', password=global_num.password,
database='test')
cursor = conn.cursor()
cursor.execute('select * from stu_info')
data = cursor.fetchall()
global_num.data=data
print(data)
list = []
for i in range(len(data)):
list.append(data[i][3])
if self.ui.lineEdit_3.text() in list:
QMessageBox.about(self, "提示", "该手机号已注册!")
else:
self.ui.send_certify_code_label.linkActivated.connect(self.Action)
self.time.start()
phone_num = self.ui.lineEdit_3.text()
global_num.phone_num = phone_num
random_num1 = str(random.randint(0, 9))
random_num2 = str(random.randint(0, 9))
random_num3 = str(random.randint(0, 9))
random_num4 = str(random.randint(0, 9))
random_num = random_num1 + random_num2 + random_num3 + random_num4
global_num.random_num = random_num
print(global_num.random_num)
'''
下面的send_sms()函数请谨慎删除解释符号,否则会花费开发人员1毛钱/次
'''
# send_sms()
else:
conn = pymysql.connect(host='localhost', port=3306, user='root', password=global_num.password,
database='test')
cursor = conn.cursor()
sql = "CREATE TABLE IF NOT EXISTS stu_info (ID INT AUTO_INCREMENT PRIMARY KEY,姓名 longtext,学号 longtext,\
手机号 longtext,账号 longtext,密码 longtext,验证码 longtext\
,注册时间 longtext,登录时间 longtext)ENGINE=INNODB DEFAULT CHARSET=utf8;"
cursor.execute(sql)
conn.commit() # 没这句会丢失最后的插入数据!!
conn.close()
def refresh(self):
self.time.start()
if self.count > 0:
self.ui.send_certify_code_label.setText(str(self.count) + '秒后重新发送验证码')
self.count -= 1
else:
self.time.stop()
self.ui.send_certify_code_label.setText("<a href='www.baidu.com' style='color:red'>发送验证码</a>")
self.count = 60
self.ui.send_certify_code_label.setEnabled(True)
def regist(self):
if self.ui.lineEdit.text() == '' or \
self.ui.lineEdit_2.text() == '' or \
self.ui.lineEdit_3.text() == '' or \
self.ui.lineEdit_5.text() == '' or \
self.ui.lineEdit_6.text() == '':
QMessageBox.about(self, "提示", "请完整填写注册信息!")
elif self.ui.lineEdit_4.text() == '':
self.ui.lineEdit_4.clear()
self.ui.lineEdit_4.setPlaceholderText("请输入验证码!")
palette = QPalette()
palette = QtGui.QPalette()
brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush)
self.ui.lineEdit_4.setPalette(palette)
elif self.ui.lineEdit_4.text() != global_num.random_num:
self.ui.lineEdit_4.clear()
self.ui.lineEdit_4.setPlaceholderText("验证码错误!")
palette = QPalette()
palette = QtGui.QPalette()
brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 0, 0, 128))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush)
self.ui.lineEdit_4.setPalette(palette)
else:
conn = pymysql.connect(host='localhost', port=3306, user='root', password=global_num.password,
database='test')
cursor = conn.cursor()
#sql = "update {table_name} set 姓名=%s,学号=%s ,账号=%s,密码=%s where 手机号=%s".format(table_name='stu_info')
name=self.ui.lineEdit.text()
stu_num=self.ui.lineEdit_2.text()
list = []
for i in range(len(global_num.data)):
list.append(global_num.data[i][4])
if self.ui.lineEdit_5.text() in list:
QMessageBox.about(self, "提示", "该账号名已注册,请尝试其他账号名!")
else:
accout_name = self.ui.lineEdit_5.text()
pass_name=self.ui.lineEdit_6.text()
system_time = str(datetime.datetime.now())
print(system_time)
print(system_time[0:4])
print(system_time[5:7])
sql = " insert into stu_info(ID,姓名,学号,手机号,账号,密码,验证码,注册时间,登录时间) values (%s,%s,%s,%s,%s,%s,%s,%s,%s) "
cursor.execute(sql, ([None, name, stu_num, global_num.phone_num, accout_name, pass_name, global_num.random_num, system_time, system_time])) # 执行sql语句
conn.commit() # 没这句会丢失最后的插入数据!!
conn.close()
QMessageBox.about(self, "提示", "注册成功,请登录后使用!")
if __name__ == '__main__':
app = QApplication(sys.argv) #创建GUI应用程序
mywindow= my_register() #创建主窗体
mywindow.show() #显示主窗体
sys.exit(app.exec_())
3.全局参数文件(因为全局参数比较多,直接全复制过来了,这里只需要里面的参数一部分)
# -*- coding: gbk -*-
global account_name
account_name='wo'
global tool_info
global scan_result
global tool_num
global tool_name
scan_result=''
tool_info=[[],[]]
tool_num=[]
toolname=[]
global certify_code
certify_code=''
global password
password='zy8629213'
global random_num
random_num=''
global phone_num
phone_num=''
global data
data=()
4.发送验证短信的代码块
# python3
# 接口类型:互亿无线触发短信接口,支持发送验证码短信、订单通知短信等。
# 账户注册:请通过该地址开通账户http://user.ihuyi.com/?9vXc7
# 注意事项:
# (1)调试期间,请用默认的模板进行测试,默认模板详见接口文档;
# (2)请使用 用户名 及 APIkey来调用接口,APIkey在会员中心可以获取;
# (3)该代码仅供接入互亿无线短信接口参考使用,客户可根据实际需要自行编写;
import urllib.parse
import urllib.request
import global_num
def send_sms():
# 接口地址
url = 'http://106.ihuyi.com/webservice/sms.php?method=Submit'
# 定义请求的数据
values = {
'account': '在该网站注册的账户',
'password': '该网站给的密码',
'mobile': global_num.phone_num,
'content': '您的验证码是:'+global_num.random_num+'。请不要把验证码泄露给其他人。',
'format': 'json',
}
# 将数据进行编码
data = urllib.parse.urlencode(values).encode(encoding='UTF8')
# 发起请求
req = urllib.request.Request(url, data)
response = urllib.request.urlopen(req)
res = response.read()
# 打印结果
print(res.decode("utf8"))