首页 > 其他分享 >添加代码运行登录注册页,并为其添加一些样式,和调用资源文件

添加代码运行登录注册页,并为其添加一些样式,和调用资源文件

时间:2024-02-01 15:46:53浏览次数:96  
标签:__ qss --- 调用 self py 代码运行 添加 ui

使用 PyQt5(PySide2)+SQLAlchemy 做一个登录注册页(二)

本文将介绍自己用 PyQt5+SQLAlchemy 做的一个登录注册页,使用邮箱接收验证码本文介绍是前后端未分离的实现方式,后续将出一个前后端分离的,你可以将 PyQt5 改为 PySide2 以获得更宽松的开源协议

本文由于涉及到的代码较多,将会是一个系列,会有多篇文章

系列文章索引

  1. 设计登录注册页面
  2. 添加代码运行登录注册页,并为其添加一些样式,和调用资源文件

必要说明

  • 使用的环境 requirements.txt
# Python3.8.10 x32
# Windows10 x64
PyQt5
pyqt5-tools
PyMySQL~=1.1.0
sqlalchemy~=2.0.25
bcrypt~=4.1.2
  • 项目结构(显示变化的部分)
--- QtLoginRegistration
  |--- core
     |--- __init__.py
     |--- login_register.py         # 登录注册
  |--- static
     |--- qss                       # 存放qss样式的目录
        |--- login_register.qss     # 样式(类似于CSS)
     |--- resources.qrc             # 新加的资源文件
     |--- resources_rc.py           # 资源文件转换的 Py 文件
  |--- uis
     |--- __init__.py
     |--- LoginRegisterEmail.py     # ui 文件转换的 Py 文件
     |--- LoginRegisterEmail.ui
     |--- MianWindow.py             # ui 文件转换的 Py 文件
     |--- MianWindow.ui
  |--- main.py                      # 入口
  |--- main_window.py               # 主窗口

添加代码运行登录注册页,并为其添加一些样式,和调用资源文件

第1步

添加资源文件

  1. 在项目目录static中,新建qss目录,并新建style.qss文件

  2. 在项目目录static中,新建资源文件resources.qrc,复制下面内容(资源文件的格式和使用方法,这里不赘述)

<RCC>
    <qresource prefix="home">
        <file>images/testing_x48.ico</file>
        <file>images/testing_x256.png</file>
        <file>images/testing_x512.svg</file>
    </qresource>
    <qresource prefix="QSS">
        <file>qss/login_register.qss</file>
    </qresource>
</RCC>
  1. 将资源文件resources.qrc,转换为 .py文件
    使用pyrcc5工具(工具 Python 安装位置,如果是虚拟环境则在虚拟环境位置,如我的\QtLoginRegistration\.venv\Scripts\pyrcc5.exe),最好是添加到环境变量,方便使用,转换的命令如下:

    pyrcc5 -o resources_rc.py resources.qrc
    
  2. 修改 登录注册页主窗口 页中使用的图片文件,改为使用资源
    i. 使用资源前,需要先加载资源文件,直接打开选择资源文件即可
    image

    image

    ii. 选择资源
    image


第2步

添加样式

  1. 打开style.qss文件,复制下面的内容(样式的使用方法,这里不赘述)
/* -*- coding: UTF-8 -*- */
/*Login Register*/

/* QFrame边框背景色等 */
QFrame#frameBg,QFrame#frameLoginRegister{
    background-color: rgb(220, 220, 220);
    border-radius:10px;
}

/* QStackedWidget边框背景色等 */
QStackedWidget{
    background-color: rgb(230, 230, 230);
    border-radius:10px;
}

QFrame#line{
    border:none;
    background-color:#000000;
    max-width:1px;
}

/* QPushButton */
QPushButton{
    border: 1px solid;
    border-radius:6px;
    min-height: 20px;
}

QPushButton:hover{
    background-color:rgb(255 , 255 , 255);
}

QPushButton#pushButtonLogin,QPushButton#pushButtonRegister,QPushButton#pushButtonForgetOk{
    min-height: 28px;
}

QPushButton#pushButtonForget:hover{
    background-color:rgb(230 , 230 , 230);
}

QPushButton#pushButtonForget{
    border: none;
    min-width: 60px;
}

/* QLineEdit */
QLineEdit{
    border:1px solid;
    border-radius:3px;
}

第3步

编写代码

  1. LoginRegisterEmail.uiMianWindow.ui 转化为.py文件
    使用pyrcc5工具(工具 Python 安装位置,如果是虚拟环境则在虚拟环境位置,如我的\QtLoginRegistration\.venv\Scripts\pyuic5.exe),最好是添加到环境变量,方便使用,转换的命令如下:

    pyuic5 -o LoginRegisterEmail.py LoginRegisterEmail.ui
    pyuic5 -o MianWindow.py MianWindow.ui
    

    注意:.py文件代码较多此处省略,完整代码可见这里 GitHub完整代码

  2. 新建 login_register.py

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ Project     : QtLoginRegistration 
@ File        : login_register.py
@ Author      : yqbao
@ Version     : V1.0.0
@ Description : 
"""
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QDialog

from uis.LoginRegisterEmail import Ui_LoginRegister


class UiLoginRegisterQDialog(QDialog, Ui_LoginRegister):
    """界面逻辑"""

    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self.setupUi(self)

        self.init_ui()

    def init_ui(self):
        """初始化"""
        self.setWindowFlag(Qt.WindowContextHelpButtonHint, on=False)  # 去掉 QDialog 帮助问号
        self.stackedWidget.setCurrentIndex(0)  # 默认登录页
        self.pushButton.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(0))
        self.pushButtonLogin.clicked.connect(self.login)
        self.pushButton_2.clicked.connect(self.page_register)
        self.pushButtonRegister.clicked.connect(self.register)
        self.pushButtonForget.clicked.connect(self.page_forget_password)

    def login(self):
        """登录动作"""
        pass

    def register(self):
        """注册动作"""
        pass

    def page_register(self):
        """注册页"""
        self.stackedWidget.setCurrentIndex(1)

    def page_forget_password(self):
        """忘记密码"""
        self.stackedWidget.setCurrentIndex(2)

  1. 新建 main_window.py
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ Project     : QtLoginRegistration 
@ File        : main_window.py
@ Author      : yqbao
@ Version     : V1.0.0
@ Description : 
"""
from PyQt5.QtWidgets import QWidget

from uis.MianWindow import Ui_MainWindow


class MainWindow(QWidget, Ui_MainWindow):
    """界面逻辑"""

    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self.setupUi(self)

  1. 新建 main.py
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ Project     : QtLoginRegistration 
@ File        : main.py
@ Author      : yqbao
@ Version     : V1.0.0
@ Description : 
"""
import os
import sys

from PyQt5.QtWidgets import QApplication, QDialog

from core.login_register import UiLoginRegisterQDialog
from main_window import MainWindow
from static.resources_rc import qInitResources

qInitResources()  # 加载资源


def read_qss_file(qss_file_name):
    """读取qss"""
    with open(qss_file_name, 'r', encoding='UTF-8') as file:
        return file.read()


class StartupMainWindow(object):
    def __init__(self):
        super().__init__()
        self.app = QApplication(sys.argv)

        self.login_register_ui = UiLoginRegisterQDialog()  # 设置登录
        self.window = MainWindow()  # 系统主窗口

        self.login_ui()
        if self.login_register_ui.exec() == QDialog.Accepted:  # 登录校验是否通过
            self.main_ui()

    def login_ui(self):
        """登录"""
        qss_file = os.path.join(os.getcwd(), 'static/qss/login_register.qss')
        style_sheet = read_qss_file(qss_file)
        self.login_register_ui.setStyleSheet(style_sheet)  # 设置样式

    def main_ui(self):
        """主窗口"""
        self.window.show()
        sys.exit(self.app.exec_())


if __name__ == '__main__':
    StartupMainWindow()

GitHub完整代码
本文章的原文地址
GitHub主页

标签:__,qss,---,调用,self,py,代码运行,添加,ui
From: https://www.cnblogs.com/yqbaowo/p/18000799

相关文章

  • 使用Latex输入日语,设置日语字体,并且添加假名
     \documentclass[12pt]{article}%\usepackage{ctex}\usepackage{xltxtra}%必须带上,否则下面的\setmainfont无法使用%\setmainfont{KozukaGothicProM}%\setmainfont[Mapping=tex-text]{KozukaGothicProM}\setmainfont{UDDigiKyokashoN-R}%\setmainfont{UDDigi......
  • 全流程机器视觉工程开发(四)PaddleDetection C++工程化应用部署到本地DLL以供软件调用
    前言我们之前跑了一个yolo的模型,然后我们通过PaddleDetection的库对这个模型进行了一定程度的调用,但是那个调用还是基于命令的调用,这样的库首先第一个不能部署到客户的电脑上,第二个用起来也非常不方便,那么我们可不可以直接将Paddle的库直接做成一个DLL部署到我们的软件上呢?答案是......
  • vue3-setup中如何通过ref调用子组件的函数
    vue3-setup中如何通过ref调用子组件的函数子组件通过defineExpose向外导出需要调用的函数在父子间中定义ref引用来调用子组件关键代码:<scriptsetup>import{ref,reactive,defineExpose}from'vue'constshow=ref(false);consttitle=ref('添加收款方式');con......
  • ChatGPT API调用python和脚本实现
    ChatGPT由于其独特、近乎准确且类似人类的响应,如今在互联网上引起了过多的讨论。本文讨论如何通过Python代码连接到ChatGPTAPI。 第1步:获取OpenAIAPI的API密钥要获取OpenAIAPI的API密钥,您需要在OpenAI网站上注册一个OpenAI帐户。拥有帐户后,您可以按......
  • Java调用ChatGPT(基于SpringBoot和Vue)实现连续对话、流式输出和自定义baseUrl
     源码及更详细的介绍说明参见Git上的README.md文档https://github.com/asleepyfish/chatgpt本文Demo(SpringBoot和Main方法Demo均包括)的Git地址:https://github.com/asleepyfish/chatgpt-demo流式输出结合Vue前端的Demo的Git地址:https://github.com/asleepyfish/chatg......
  • 如何在Visual Studio新C++项目中调用之前配置过的库?
      本文介绍在VisualStudio软件中调用C++各种配置、编译完毕的第三方库的方法。  在撰写C++代码时,如果需要用到他人撰写的第三方库(例如地理数据处理库GDAL、矩阵运算库Armadillo等),并不能像Python等语言那样,安装好库后直接在不同代码文件中使用;而是需要每一次新建一个代码文件......
  • [word] Word如何添加页面边框
    Word如何添加页面边框?经常需要添加裁剪样式的页面边框,应该怎么添加呢?1、点击开始-段落-编辑和底纹-页面边框,然后在艺术型上选择【带有剪刀的样式】,点击确定后即可。 以上就是添加Word页面边框的技巧,如果要添加其他样式的页面边框,也可以同样操作。......
  • API 调用时的身份认证
    API调用时的身份认证可以使用多种方式来确保安全性,以下是一些常见的处理方式:API密钥(APIKey):每个用户或应用程序都被分配一个唯一的API密钥,用于标识其身份。API密钥通常在HTTP请求的头部或查询参数中传递,服务器端使用这个密钥来验证请求的合法性。这种方式适用于对公开的A......
  • solr 添加别名步骤
    1、(因为配置节名字过长自动添加别名失败,需要修改配置节名称(collection)) 2、修改名称前需要做备份  3、添加collection 4、添加别名 确定后即可在solr中看到添加的别名了 ......
  • Eureka使用技巧: 服务间调用时,巧妙利用zone,指定要调用哪个实例
    问题描述SpringCloud架构下,我们在开发时,一般会搭建一个测试的EurekaServer,多个工程师的应用,都往这个Server进行注册。现有有A、B两个service,A要调用B。B有两个实例,一个是我开发的,另外一个是张三同学开发的。我在B上新开发了几个接口,因此我就想让A只请求我开发的B服务。怎么......