温控系列笔记【五】pyqt5 (日更)

Pyqt5部分(完全不懂Qt清绕道)

  • 往期目录
  • 图片处理网站推荐
  • 开始今天的主题
    • 界面设计
      • 1. 登录
        • 1. Ui
        • 2. 信号槽
        • 3. qt->pyuic&&qrc
        • 4. 新建pane.py实现信号槽即可
      • 2. 注册
        • 1. Ui
        • 2. 信号槽
        • 3. qt->pyuic&&qrc
        • 4. 新建pane.py实现信号槽即可
      • 3. 注册页面数据库调用
        • 加文本过滤器
        • 连接数据库建个表
        • 注册账户查重
      • 4. 修改密码

往期目录

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具体的有很多参考的博客大家可以自行阅读和参阅。

  1. Qt_designer
  2. Qss
  3. Pycharm
  4. mysql
  5. 数据分析

学这些可能会花费很多时间。所以这篇主要说给有QT基础的各位。

界面设计

关于界面按顺序设计:


1. 登录

1. Ui

温控系列笔记【五】pyqt5 (日更)_第1张图片
之后设置无边框就行

右边的这个立体的登录框是误打误撞:

温控系列笔记【五】pyqt5 (日更)_第2张图片

2. 信号槽

温控系列笔记【五】pyqt5 (日更)_第3张图片

3. qt->pyuic&&qrc

4. 新建pane.py实现信号槽即可

温控系列笔记【五】pyqt5 (日更)_第4张图片
使用很简单,继承一下,然后把信号槽实现一下:

就这样就可以了:


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很常用这些事件重新,往往在调用的时候是先访问最近的,所以可以放心在类内继承和重写。

然后呢?

我想应该是账号密码验证。

当然在验证之前是不是要先注册,哈哈哈,其实很混乱的。

先注册好了。

因为注册可以直接跟数据库联系起来。而且也不着急写接口


2. 注册

作为最懒惰的码农,我承认我是非常懒惰的,懒惰到只学会了复制粘贴,啧啧啧

把这个跟登录的弄在一起。

简直是个白嫖怪

1. Ui

温控系列笔记【五】pyqt5 (日更)_第5张图片

2. 信号槽

温控系列笔记【五】pyqt5 (日更)_第6张图片
两个就够了

3. qt->pyuic&&qrc

4. 新建pane.py实现信号槽即可

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_())

3. 注册页面数据库调用

首先咱们要先获取到我们的数据吧。

电话,密码,手机,邮箱

获取的是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("可以访问数据库了")
            

连接数据库建个表

温控系列笔记【五】pyqt5 (日更)_第7张图片

数据库大家可以自己选,可以本地,可以远端。我是自己开了一年多的腾讯云的Mysql基础版本,不贵,36一年(学生版)。

好多项目的数据可以统一处理也很方便。

温控系列笔记【五】pyqt5 (日更)_第8张图片
我新建了一个数据库。

当然本地的连接上之后
mysql -uroot -p*******
mysql create database ****** charset=utf8
exit
也可以

创建一个User表

温控系列笔记【五】pyqt5 (日更)_第9张图片

注册账户查重


4. 修改密码


你可能感兴趣的:(温控系列笔记【五】pyqt5 (日更))