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

    科技2025-02-10  14

    环境

    系统: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

     

    Processed: 0.012, SQL: 8