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 (jmps515@163)
# @Link    : blog.csdn/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.setWindowTitle("欢迎登陆图书馆管理系统")
self.setCentralWidget(self.widget)
bar = uBar()
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)
drop table if exists admin
self.quitSignInAction.setEnabled(False)
self.widget.is_t(self.adminSignIn)
self.widget.is_student_signal[str].connect(self.studentSignIn)
iggered[QAction].uTriggered)
def initDBdata(self):
if not ists(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):
()=="修改密码"):
changePsdDialog=changePasswordDialog(self)
changePsdDialog.show()
<_()
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_t(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_t(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()
<_())
写在最后的感想
当时想学PyQT,是来源与⼀个朋友的想法,他想要我帮他做⼀份电⼒系统调度使⽤情况,我想python应该能做,当时没考虑那么多,直接答应他我可以学⼀下,尝试着给你做出来,然后买了⼀本书,跟着学了个基础,随后想着⽹上个实例⾃⼰做⼀下试试看,这整个程序是来源于⾷图⼈的,然后我跟着学了⼀下,⼜按照⾃⼰的想法修改修改。
⽬前收获挺⼤的,基本上PyQt相关的操作基本上掌握了,他的调度系统也能做出来了,虽然他不⼜不需要了,但是着整个过程已经⼜收获了。
当你开始折腾的时候, 你已经开始成长了
所以在折腾中成长,挺好的