PyQT5一起学做图书管理系统(13)主界面及菜单设计

PyQT5一起学做图书管理系统(13)主界面及菜单设计

环境

系统:windows10系统
编辑器:Sublime3
编程语言:python3+pyqt5

设计逻辑

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

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

菜单设计

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

在菜单栏中,有注册、修改密码、登录账户、退出登录、退出可以点击
当然其能否点击需要根据当前窗口决定,比如如果已登录,当然就不能点击登录和修改密码了
至于窗口的setCentralWidget调用,比如输入密码,是切换到用户主页还是到管理员主页,要看发射的信号是什么。

代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2018-12-05 21:36:58
# @Author  : Jimy_Fengqi ([email protected])
# @Link    : https://blog.csdn.net/qiqiyingse/

import sys,os
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon, QFont
from PyQt5.QtCore import *
import qdarkstyle
from SignIn import SignInWidget
from SignUp import SignUpWidget
import sip
from AdminHome import AdminHome
from StudentHome import StudentHome
from changePasswordDialog import changePasswordDialog
import images
from db.userInfoManager import dbpath
from db.userInfoManager import UserBookManager
from db.userInfoManager import BookDbManager
from db.userInfoManager import UserDbManager
from db.userInfoManager 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_())

写在最后的感想

当时想学PyQT,是来源与一个朋友的想法,他想要我帮他做一份电力系统调度使用情况,我想python应该能做,当时没考虑那么多,直接答应他我可以学一下,尝试着给你做出来,然后买了一本书,跟着学了个基础,随后想着网上找个实例自己做一下试试看,这整个程序是来源于食图人的,然后我跟着学了一下,又按照自己的想法修改修改。

目前收获挺大的,基本上PyQt相关的操作基本上掌握了,他的调度系统也能做出来了,虽然他不又不需要了,但是着整个过程已经又收获了。

当你开始折腾的时候, 你已经开始成长了
所以在折腾中成长,挺好的

 

你可能感兴趣的:(pyqt,PyQT5跟我学做图书管理系统,PyQt5,图书管理系统)