PyQt5图书管理系统练习(12)主界面

环境

系统:windows10系统

编辑器:PyCharm

编程语言:python3+pyqt5

设计逻辑

在之前的所有代码中,其实都能看到signal相关的操作,这是PyQt自带的信号与通信机制.

通过绑定特定的事件,来实现页面之间的跳转或者不同页面之间的通信

菜单设计

PyQT自带的有几种菜单栏选项,这里选择的是menuBar,通过添加action来添加菜单子选项,然后再通过action的setEnabled函数来实现菜单功能的显示与隐藏。

在菜单栏中,有注册、修改密码、登录账户、退出登录、退出可以点击

当然其能否点击需要根据当前窗口决定,比如如果已登录,当然就不能点击登录和修改密码了

至于窗口的setCentralWidget调用,比如输入密码,是切换到用户主页还是到管理员主页,要看发射的信号是什么。

代码

""""
brief:主界面
date:2020-10-07
author:chenyijun
version: python V3.8.1 pyqt5 V5.14.0
"""

import sys, os
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
import qdarkstyle
from SignIn import SignInWidget
from SignUp import SignUpWidget
import sip
from AdministratorHome import AdminHome
from StudentHome import StudentHome
from ChangePasswordDialog import changePasswordDialog

from initDB import dbpath
from initDB import UserBookManager
from initDB import BookDbManager
from initDB import UserDbManager
from initDB import AddOrDropManager


class Main(QMainWindow):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.initDBdata()
        self.layout = QHBoxLayout()
        self.widget = SignInWidget()
        self.resize(900, 600)
        self.setWindowTitle("欢迎登陆图书馆管理系统")
        self.setCentralWidget(self.widget)
        bar = self.menuBar()
        self.Menu = bar.addMenu("菜单栏")
        self.signUpAction = QAction("注册", self)
        self.changePasswordAction = QAction("修改密码", self)
        self.signInAction = QAction("登录", self)
        self.quitSignInAction = QAction("退出登录", self)
        self.quitAction = QAction("退出", self)
        self.Menu.addAction(self.signUpAction)
        self.Menu.addAction(self.changePasswordAction)
        self.Menu.addAction(self.signInAction)
        self.Menu.addAction(self.quitSignInAction)
        self.Menu.addAction(self.quitAction)
        self.signUpAction.setEnabled(True)
        self.changePasswordAction.setEnabled(True)
        self.signInAction.setEnabled(False)
        self.quitSignInAction.setEnabled(False)
        self.widget.is_admin_signal.connect(self.adminSignIn)
        self.widget.is_student_signal[str].connect(self.studentSignIn)
        self.Menu.triggered[QAction].connect(self.menuTriggered)

    def initDBdata(self):
        if not os.path.exists(dbpath):
            self.userdb = UserDbManager()
            self.bookdb = BookDbManager()
            self.userbookdb = UserBookManager()
            self.addordropdb = AddOrDropManager()

            self.userdb.initDatabase()
            self.bookdb.initDatabase()
            self.addordropdb.initDatabase()

    def adminSignIn(self):
        sip.delete(self.widget)
        self.widget = AdminHome()
        self.setCentralWidget(self.widget)
        self.changePasswordAction.setEnabled(False)
        self.signUpAction.setEnabled(True)
        self.signInAction.setEnabled(False)
        self.quitSignInAction.setEnabled(True)

    def studentSignIn(self, studentId):
        sip.delete(self.widget)
        self.widget = StudentHome(studentId)
        self.setCentralWidget(self.widget)
        self.changePasswordAction.setEnabled(False)
        self.signUpAction.setEnabled(True)
        self.signInAction.setEnabled(False)
        self.quitSignInAction.setEnabled(True)

    def menuTriggered(self, q):
        if (q.text() == "修改密码"):
            changePsdDialog = changePasswordDialog(self)
            changePsdDialog.show()
            changePsdDialog.exec_()
        if (q.text() == "注册"):
            sip.delete(self.widget)
            self.widget = SignUpWidget()
            self.setCentralWidget(self.widget)
            self.widget.student_signup_signal[str].connect(self.studentSignIn)
            self.signUpAction.setEnabled(False)
            self.changePasswordAction.setEnabled(True)
            self.signInAction.setEnabled(True)
            self.quitSignInAction.setEnabled(False)
        if (q.text() == "退出登录"):
            sip.delete(self.widget)
            self.widget = SignInWidget()
            self.setCentralWidget(self.widget)
            self.widget.is_admin_signal.connect(self.adminSignIn)
            self.widget.is_student_signal[str].connect(self.studentSignIn)
            self.signUpAction.setEnabled(True)
            self.changePasswordAction.setEnabled(True)
            self.signInAction.setEnabled(False)
            self.quitSignInAction.setEnabled(False)
        if (q.text() == "登录"):
            sip.delete(self.widget)
            self.widget = SignInWidget()
            self.setCentralWidget(self.widget)
            self.widget.is_admin_signal.connect(self.adminSignIn)
            self.widget.is_student_signal[str].connect(self.studentSignIn)
            self.signUpAction.setEnabled(True)
            self.changePasswordAction.setEnabled(True)
            self.signInAction.setEnabled(False)
            self.quitSignInAction.setEnabled(False)
        if (q.text() == "退出"):
            qApp = QApplication.instance()
            qApp.quit()
        return


if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon(":/images/MainWindow_1.png"))
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    mainMindow = Main()
    mainMindow.show()
    sys.exit(app.exec_())

运行结果:

参考:

https://blog.csdn.net/weixin_38312031/article/details/80156011

https://blog.csdn.net/qiqiyingse/article/details/88243138

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值