Files
leonpan-pc/app/view/widgets/register_widget.py
2025-10-29 22:20:21 +08:00

87 lines
3.5 KiB
Python

from loguru import logger
from PyQt6.QtCore import QRegularExpression, Qt
from PyQt6.QtGui import (
QRegularExpressionValidator,
)
from PyQt6.QtWidgets import QHBoxLayout, QLabel, QVBoxLayout, QWidget
from qfluentwidgets import (
LineEdit,
PasswordLineEdit,
PrimaryPushButton,
)
from app.core import CaptchaThread
class RegisterWidget(QWidget):
def __init__(self, parent=None):
logger.debug("初始化注册组件")
super().__init__(parent)
self.setObjectName("RegisterWidget")
self.emailLineEdit = LineEdit(self)
self.emailLineEdit.setPlaceholderText("请输入注册邮箱")
self.passwordLineEdit = PasswordLineEdit(self)
self.passwordLineEdit.setPlaceholderText("请输入密码")
self.confirmPasswordLineEdit = PasswordLineEdit(self)
self.confirmPasswordLineEdit.setPlaceholderText("请确认您的密码")
self.verificationCodeLabel = QLabel(self)
self.verificationCodeLabel.setFixedSize(120, 35)
self.verificationCodeLabel.setScaledContents(True) # 设置图片自适应
self.verificationCodeLabel.mousePressEvent = (
self.refreshVerificationCode
) # 绑定点击事件
self.verificationCodeLineEdit = LineEdit(self)
self.verificationCodeLineEdit.setPlaceholderText("请输入验证码")
self.verificationLayout = QHBoxLayout()
self.verificationLayout.setAlignment(Qt.AlignmentFlag.AlignVCenter)
self.verificationLayout.addWidget(self.verificationCodeLineEdit)
self.verificationLayout.addWidget(self.verificationCodeLabel)
self.registerButton = PrimaryPushButton("注册", self)
self.vBoxLayout = QVBoxLayout(self)
self.vBoxLayout.setAlignment(Qt.AlignmentFlag.AlignTop)
self.vBoxLayout.setSpacing(15)
self.vBoxLayout.addSpacing(15)
self.vBoxLayout.addWidget(self.emailLineEdit)
self.vBoxLayout.addWidget(self.passwordLineEdit)
self.vBoxLayout.addWidget(self.confirmPasswordLineEdit)
self.vBoxLayout.addLayout(self.verificationLayout)
self.vBoxLayout.addWidget(self.registerButton)
email_regex = QRegularExpression(
r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
)
validator = QRegularExpressionValidator(email_regex, self)
self.emailLineEdit.setValidator(validator)
self.emailLineEdit.textChanged.connect(self.checkeEmail)
logger.debug("注册组件初始化完成")
self.refreshVerificationCode()
def checkeEmail(self, text):
# 检查当前输入是否通过验证器
state, _, _ = self.emailLineEdit.validator().validate(text, 0)
if state == QRegularExpressionValidator.Acceptable:
logger.debug("注册邮箱格式验证通过")
self.registerButton.setDisabled(False)
else:
self.registerButton.setDisabled(True)
def refreshVerificationCode(self, event=None):
logger.debug("刷新验证码")
self.captchaThread = CaptchaThread()
self.captchaThread.captchaReady.connect(self._showVerificationCode)
self.captchaThread.captchaFailed.connect(self._showCaptchaFailed)
self.captchaThread.start()
def _showVerificationCode(self, pixmap):
logger.debug("显示验证码")
self.verificationCodeLabel.setPixmap(pixmap)
def _showCaptchaFailed(self, message):
logger.debug(f"验证码刷新失败:{message}")
self.verificationCodeLineEdit.clear()