Onenet部分(第一期):
https://blog.csdn.net/nja12/article/details/105648774.
Esp8266部分(第二期):
https://blog.csdn.net/nja12/article/details/105660222.
Stm32部分(第三期):
https://blog.csdn.net/nja12/article/details/105751015.
Stm32Wifi接收部分+++(第四期):
https://blog.csdn.net/nja12/article/details/105852408.
因为今天早课,起来的早,困一天了,以至于,我画了一下午在搞Logo, 背景图,矢量图,抠图;
分享几个网站:
矢量图:https://www.easyicon.net/
免费自动抠图:https://kt.fkw.com/koutu.html
在线ps: https://www.uupoop.com/
pyqt5 是一款比较快的应用写的工具,主要还是python语言。
当然也有很多丰富的Widget具体的有很多参考的博客大家可以自行阅读和参阅。
学这些可能会花费很多时间。所以这篇主要说给有QT基础的各位。
关于界面按顺序设计:
右边的这个立体的登录框是误打误撞:
就这样就可以了:
from PyQt5.Qt import *
from Resouese.login import Ui_Form
class Login_Pane(QWidget, Ui_Form):
def __init__(self, parent=None, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.setAttribute(Qt.WA_StyledBackground, True)
self.setupUi(self)
self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 无边框
def close_login(self):
self.close()
def Login(self):
print("需要验证")
def forget_password(self):
print("忘记密码")
def register(self):
print("注册账户")
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Login_Pane()
window.show()
sys.exit(app.exec_())
当然,无边框,就造成拖不动的情况,这并不是我们想看到的。
# 在最上面初始化一写体内变量
_startPos = None
_endPos = None
_isTracking = False
def __init__(self, parent=None, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.setAttribute(Qt.WA_StyledBackground, True)
self.setupUi(self)
self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 无边框
def mouseMoveEvent(self, e: QMouseEvent): # 重写移动事件
self._endPos = e.pos() - self._startPos
self.move(self.pos() + self._endPos)
def mousePressEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = True
self._startPos = QPoint(e.x(), e.y())
def mouseReleaseEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = False
self._startPos = None
self._endPos = None
Qt很常用这些事件重新,往往在调用的时候是先访问最近的,所以可以放心在类内继承和重写。
然后呢?
我想应该是账号密码验证。
当然在验证之前是不是要先注册,哈哈哈,其实很混乱的。
先注册好了。
因为注册可以直接跟数据库联系起来。而且也不着急写接口
作为最懒惰的码农,我承认我是非常懒惰的,懒惰到只学会了复制粘贴,啧啧啧
把这个跟登录的弄在一起。
简直是个白嫖怪
from PyQt5.Qt import *
from Resouese.register import Ui_Form
class Register_Pane(QWidget, Ui_Form):
# 内部变量声明
_startPos = None
_endPos = None
_isTracking = False
def __init__(self, parent=None, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.setAttribute(Qt.WA_StyledBackground, True)
self.setupUi(self)
self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 无边框
def mouseMoveEvent(self, e: QMouseEvent): # 重写移动事件
self._endPos = e.pos() - self._startPos
self.move(self.pos() + self._endPos)
def mousePressEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = True
self._startPos = QPoint(e.x(), e.y())
def mouseReleaseEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = False
self._startPos = None
self._endPos = None
def close_login(self):
print("这里返回登录界面")
def register_register(self):
print("进数据库注册")
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Register_Pane()
window.show()
sys.exit(app.exec_())
首先咱们要先获取到我们的数据吧。
电话,密码,手机,邮箱
获取的是QLineEdit的值
def register_register(self):
print("进数据库注册")
# 获取 QLineEdit:
_account = self.account_le.text()
_password = self.password_le.text()
_call = self.call_2.text()
_email = self.email_2.text() # 这个名称忘改了
print(_account)
print(_password)
print(_call)
print(_email)
输出:
进数据库注册
123123
123123
123123
123123
进数据库注册
123123自学才
123123asd
发现需要加过滤器
# 正则的验证器
_reg = QRegExp('[a-zA-Z0-9@%.~*]+$')
_pValidator = QRegExpValidator(self)
_pValidator.setRegExp(_reg)
self.account_le.setValidator(_pValidator)
self.password_le.setValidator(_pValidator)
self.email_2.setValidator(_pValidator)
_reg = QRegExp('[0-9]+$')
_pValidator = QRegExpValidator(self)
_pValidator.setRegExp(_reg)
self.call_2.setValidator(_pValidator)
后面稍微加了一些验证,主要的减少数据库的访问
初始化时
self.account_le.setPlaceholderText("账号6位以上")
self.password_le.setPlaceholderText("密码6位以上")
self.call_2.setPlaceholderText("11位,用于找回密码")
self.email_2.setPlaceholderText("用于找回密码")
校验封装一下:
def check_register(self):
_account = self.account_le.text()
_password = self.password_le.text()
_call = self.call_2.text()
_email = self.email_2.text() # 这个名称忘改了
if len(_account) == 0:
print("当前账号为空")
self.account_le.setPlaceholderText("请输入账号")
return False
if len(_account) < 6:
print("账号位数过少")
self.account_le.setText("")
self.account_le.setPlaceholderText("账号位数过少")
return False
if len(_password) == 0:
print("当前密码为空")
self.password_le.setPlaceholderText("请输入密码")
return False
if len(_password) < 6:
print("密码位数过少")
self.password_le.setText("")
self.password_le.setPlaceholderText("密码位数少于6位")
return False
if len(_call) == 0:
print("当前手机为空")
self.call_2.setPlaceholderText("请输入手机")
return False
if len(_call) != 11:
print("手机位数不对哦")
self.call_2.setText("")
self.call_2.setPlaceholderText("手机位数不对哦")
return False
if len(_email) == 0:
print("当前邮箱为空")
self.email_2.setPlaceholderText("请输入邮箱")
return False
if len(_email) <= 12: # 不满足截取条件
print("当前邮箱不正确")
self.email_2.setText("")
self.email_2.setPlaceholderText("请输入正确的邮箱")
return False
if _email[-3:] != "com":
print("当前邮箱不正确")
self.email_2.setText("")
self.email_2.setPlaceholderText("请输入正确的邮箱")
return False
# 如果能到这里就返回 True
return True
槽函数简化:
def register_register(self):
print("进数据库注册")
# 获取 QLineEdit:
if not self.check_register():
return 0
else:
print("可以访问数据库了")
数据库大家可以自己选,可以本地,可以远端。我是自己开了一年多的腾讯云的Mysql基础版本,不贵,36一年(学生版)。
好多项目的数据可以统一处理也很方便。
当然本地的连接上之后
mysql -uroot -p*******
mysql create database ****** charset=utf8
exit
也可以
创建一个User表