文章目录
- 一.前言
- 二.预览
- 三.实现方案
- 1.实现原理
- 1.PyQt5
- 2. 具体实现
- 2.UI设计
- 1.UI组件化、模块化
- 2.UI设计风格思路
- 3.项目代码结构
- 4.使用方法
- 3.代码分享
- 1.支持跳转网页的QLabel组件
- 2.三角形ICON按钮
- 四.总结
大小:33.3 M,软件安装包放在了这里!
一.前言
大家好啊!本次给大家带来我开发的仿崩坏三web页面的登录页面,使用的技术是PyQt5,最后打包软件制作成了安装包,欢迎大家体验!
二.预览
这就是我们的软件主体了,整体采用一个背景,前景是不同方式的登录方案,主要分为短信登录、密码登录、扫码登录,三个页面都实现了,这里只举一个例子来展示界面效果。
三.实现方案
1.实现原理
1.PyQt5
PyQt5是一个Python库,它提供了对Qt5图形界面(GUI)应用程序框架的访问。Qt是一个跨平台的应用程序框架,它允许开发者创建非常复杂的GUI应用程序。
PyQt5是由Phil Thompson 开发的,是对Qt应用程序框架的Python包装。它是PySide的一个可选的API,PySide是它的另一个版本,但在某些情况下,PyQt5的性能更好。
2. 具体实现
通过使用PyQt5配合python的方案完成GUI界面的设计,使用虚拟环境打包的方式缩小打包体积,最后使用安装程序将我们的软件做成安装包。
2.UI设计
1.UI组件化、模块化
本次的UI完全是使用手写代码的方式,所有组件都是单独的类,均可以进行单元模块测试,说具体一点,我们的最后软件效果就是一架飞机,每个模块就是个个组件,这些组件可以是特殊的也可以是复用的,模块的复用保证了软件整体的风格一致性,更好的实现了UI上的“高内聚,低耦合”。
这里我们一个组件来举例子,登录面板:
这些组件我们是能够单独调试测试的
2.UI设计风格思路
有了好的设计才能落实软件GUI的开发,本次参考了WEB端的网页,在网页端下载相关资源最后通过硬编码放置到项目中,这样我们就能够对外隐藏相关资源文件。
这里给大家看下我的资源文件列表:
3.项目代码结构
这里认为读者已经拿到本项目的源代码,
我们所有的源代码都在src/目录下
为了生成qrc转出的.py方便一些,这里仍然写了自定义的脚本来一键生成资源数据
我们主要的代码量在widgets/目录下,这里包括:基础组件、自定义的组件、页面组件、特殊组件。
4.使用方法
通过安装程序之后,创建桌面图标,双击打开后软件会全屏,如果需要关闭的话,直接点击登录区域的X即可。
3.代码分享
这里和大家分享我的代码
1.支持跳转网页的QLabel组件
class HyperlinkLabel(QLabel):
"""
封装了支持超链接和文本交互的 QLabel。
"""
def __init__(self, parent=None):
super().__init__(parent)
self.setWordWrap(True)
self.setOpenExternalLinks(True) # 允许点击链接跳转到浏览器
self.setTextInteractionFlags(Qt.TextBrowserInteraction) # 支持文字交互
def set_html_text(self, html_text):
"""
设置 HTML 格式的文本。
"""
self.setText(html_text)
2.三角形ICON按钮
class TriangleIconButton(QPushButton):
def __init__(self, *args, **kwargs):
super(TriangleIconButton, self).__init__(*args, **kwargs)
self.param_init()
self.ui_init()
def param_init(self):
self.icon = ""
self.qta_icon = ""
self.size_factor = 1
def ui_init(self):
self.setFixedSize(35, 35) # 设置按钮的大小
self.setCursor(Qt.PointingHandCursor)
self.setStyleSheet("border: none;") # 去掉边框
def set_icon(self, icon_name: str):
"""
设置按钮的图标。
:param icon_name: 图标名称,支持 QtAwesome 图标的名称,如 'fa5s.triangle'。
"""
self.icon = icon_name
self.qta_icon = qta.icon(icon_name, color="#47B1F5")
self.update() # 更新按钮界面,以便重新绘制图标
def paintEvent(self, event):
super(TriangleIconButton, self).paintEvent(event)
if not self.qta_icon: return
painter = QPainter(self)
# 设置为透明背景
painter.setRenderHint(QPainter.Antialiasing)
painter.setOpacity(1) # 保证图标不透明
# 通过 QtAwesome 渲染设置的图标
self.qta_icon.paint(painter, QRect(0, 0, self.width(), self.height()), Qt.AlignCenter)
# 画一个白色遮罩,覆盖右下角的四分之一区域
rect_width = self.width() // self.size_factor
rect_height = self.height() // self.size_factor
mask_polygon = QPolygon([
QPoint(self.width() - rect_width, self.height()), # 左下角(右下四分之一区域的左上角)
QPoint(self.width(), self.height() - rect_height), # 右上角
QPoint(self.width(), self.height()) # 右下角
])
painter.setBrush(QColor(255, 255, 255)) # 设置白色遮罩
painter.setPen(Qt.transparent) # 不显示边框
painter.drawPolygon(mask_polygon) # 绘制白色三角形遮罩
painter.end()
四.总结
本次和大家分享了我使用PyQt5开发的一款仿崩坏三登录页面,只有UI没有功能,大家需要代码的话请私聊作者,自己加后端逻辑,前端固然美丽但是没有强大的后端也只是一个躯壳。大家觉得我做的还算可以,能给点个赞么?