【Pyside6】桌面应用--目录、代码结构设计(附案例)

简介: 【Pyside6】桌面应用--目录、代码结构设计(附案例)

目录设计的必要性


1、每个目录层次有自己的独立的职责,具备不同的功能,协同合作成就一个项目。

2、随着功能模块的增多、代码的逻辑的复杂性增强,模块之间的耦合性问题逐渐显露。良好的目录设计可以有效防止模块的混乱,也能做好对功能模块的快速定位。这对于开发人员来讲是尤其重要的。

3、随着时间的推移,后期再回过头来对项目进行维护时,清晰的目录结构可以让我们快速理清思路、关键定位。


代码结构设计的必要性


1、对于长期的维护,代码设计比可不少。他决定了代码整体开发风格和编写形式。

2、增加可读性、可维护性。松耦合、划分层次。

3、使功能模块更容易理解,代码质量、扩展性更好。


案例(以登录、注册、主界面为例。)


项目演示


Pyside6-登录、注册界面


目录结构分析


1684138053292.jpg

conf:配置一些三方参数:如接口请求地址、路径、数据库信息等

img:存放引用图片(通过接口从后台获取图片也是可行的)

qss:存放界面样式文件

src:为项目源码文件。每个界面为一个module。module中包含原始ui文件和逻辑代码文件

ui:本例采用designer设计ui,故将项目所有ui文件,存于ui文件中

app.py:文件为项目启动文件


代码结构分析


app.py

main类将所有界面做集合,目的是将所有的界面组件联动。如图所示。self包含所有界面代码,将self作为实参传给每个模块类,实现界面联动。

class main():
    def __init__(self):
        super(main, self).__init__()
        '将所有的界面做集合'
        self.login_ui = Login(self)
        self.regis_ui = Regis(self)
        self.index_ui = Index(self)
        '初始化登录界面'
        self.login_ui.login_win.show()


login_module>login_ui

ui文件不多赘述,但注意:ui文件不宜手动修改,因为它是自动生成的,或许在开发阶段还需要ui源文件通过designer进行增删改的操作。此时再转换为py时,可以与逻辑文件兼容。

class Ui_Form(object):
    def setupUi(self, Form):
        if not Form.objectName():
            Form.setObjectName(u"Form")
        Form.resize(373, 249)
        self.lineEdit = QLineEdit(Form)
        self.lineEdit.setObjectName(u"lineEdit")
        self.lineEdit.setGeometry(QRect(100, 70, 171, 21))
        self.lineEdit_2 = QLineEdit(Form)
        self.lineEdit_2.setObjectName(u"lineEdit_2")
        self.lineEdit_2.setGeometry(QRect(100, 110, 171, 21))
        self.pushButton = QPushButton(Form)
        self.pushButton.setObjectName(u"pushButton")
        self.pushButton.setGeometry(QRect(110, 180, 161, 31))
        self.label = QLabel(Form)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(170, 20, 91, 31))
        self.label.setStyleSheet(u"font: 900 11pt \"Arial Black\";")
        self.checkBox = QCheckBox(Form)
        self.checkBox.setObjectName(u"checkBox")
        self.checkBox.setGeometry(QRect(110, 150, 80, 20))
        self.checkBox_2 = QCheckBox(Form)
        self.checkBox_2.setObjectName(u"checkBox_2")
        self.checkBox_2.setGeometry(QRect(200, 150, 80, 20))
        self.retranslateUi(Form)
        QMetaObject.connectSlotsByName(Form)
    # setupUi
    def retranslateUi(self, Form):
        Form.setWindowTitle(QCoreApplication.translate("Form", u"the app", None))
        self.pushButton.setText(QCoreApplication.translate("Form", "登录", None))
        self.label.setText(QCoreApplication.translate("Form", "登录", None))
        self.checkBox.setText(QCoreApplication.translate("Form", "自动登录", None))
        self.checkBox_2.setText(QCoreApplication.translate("Form", "记住密码", None))
    # retranslateUi


login_module>login

继承ui类,此文件中编写逻辑代码。每个逻辑文件的主类中的init都将整个项目模块的代码作为实参传入,故项目每个模块都可以实现对全部模块的联动。

class MyQLabel(QLabel):
    # 自定义信号, 注意信号必须为类属性
    button_clicked_signal = Signal()
    def __init__(self, parent=None):
        super(MyQLabel, self).__init__(parent)
    def mouseReleaseEvent(self, QMouseEvent):
        self.button_clicked_signal.emit()
    # 可在外部与槽函数连接
    def connect_customized_slot(self, func):
        self.button_clicked_signal.connect(func)
class Login(Ui_Form):
    def __init__(self,main):
        super(Login, self).__init__()
        self.main=main
        self.login_win=QWidget()
        self.setupUi(self.login_win)
        '背景提示文字'
        self.lineEdit.setPlaceholderText("name")
        self.lineEdit_2.setPlaceholderText("password")
        '设置密码格式'
        self.lineEdit_2.setEchoMode(QLineEdit.Password)
        self.label2=MyQLabel(self.login_win)
        self.label2.setText('点击注册')
        self.label2.setGeometry(QRect(10, 220, 91, 31))
        'label点击事件'
        self.label2.connect_customized_slot(self.login_regis_show)
        '禁止窗口拉伸、禁用最大化按钮'
        self.login_win.setFixedSize(self.login_win.width(), self.login_win.height())
        '登录,进入主界面'
        self.pushButton.clicked.connect(self.login_index_show)
    def login_regis_show(self):
        self.login_win.close()
        self.main.regis_ui.regis_win.show()
    def login_index_show(self):
        self.login_win.close()
        self.main.index_ui.index_win.show()



完整源码地址


链接:https://pan.baidu.com/s/1vdoJvlYN1rBvP50kPUIc9w

提取码:6xp8

相关文章
|
容器
Pyside6-第十三篇-布局(最后一章废话-理论篇)
Pyside6-第十三篇-布局(最后一章废话-理论篇)
1224 0
Pyside6-第八篇-QLabel文本标签
Pyside6-第八篇-QLabel文本标签
858 0
|
人工智能 算法 自动驾驶
使用OpenCV实现Halcon算法(2)形状匹配开源项目,shape_based_matching
使用OpenCV实现Halcon算法(2)形状匹配开源项目,shape_based_matching
5289 1
使用OpenCV实现Halcon算法(2)形状匹配开源项目,shape_based_matching
Pyside6-第七篇-QLineEdit文本行编辑(内设案例)
Pyside6-第七篇-QLineEdit文本行编辑(内设案例)
1643 0
|
数据安全/隐私保护
Pyside6实操笔记(一):系统页面跳转
本文介绍了如何使用Pyside6实现系统页面跳转,包括登录界面跳转到注册界面的代码实现。关键步骤包括创建空窗口、编写跳转逻辑,并提供了完整的登录和注册窗口代码。此外,还涉及了国际化、主题色设置和窗口特效等高级功能。
581 0
|
编解码 UED
Qt侧边栏的动态切换:隐藏与显示技术详解
在现代用户界面设计中,侧边栏(Sidebar)是一个常见的组件,它为用户提供了导航和工具面板的功能。在某些应用场景下,我们可能需要动态地隐藏或显示侧边栏,以优化界面布局或提供更灵活的用户体验。本文将分享如何在Qt框架下实现侧边栏的隐藏与呈现,包括技术细节和代码示例。
1152 3
|
XML JSON Ubuntu
Python实用记录(十五):PyQt/PySide6打包成exe,精简版(nuitka/pyinstaller/auto-py-to-exe)
本文介绍了使用Nuitka、PyInstaller和auto-py-to-exe三种工具将Python的PyQt/PySide6应用打包成exe文件的方法。提供了详细的安装步骤、打包命令和参数说明,适合新手学习和实践。
4926 0
Pyside6-第六篇-各按钮的信号与槽
Pyside6-第六篇-各按钮的信号与槽
611 0
|
前端开发 Java
【案例+源码】详解MVC框架模式及其应用
【案例+源码】详解MVC框架模式及其应用
1157 0
|
UED
【Qt 学习笔记】Qt窗口 | 工具栏 | QToolBar的使用及说明
【Qt 学习笔记】Qt窗口 | 工具栏 | QToolBar的使用及说明
2215 2