鱼C论坛

 找回密码
 立即注册
查看: 2337|回复: 3

QT使用pyqtSignal跳转窗口问题

[复制链接]
发表于 2020-10-10 19:09:11 | 显示全部楼层 |阅读模式
1鱼币
登录页面代码:
  1. import sys
  2. from PyQt5.QtWidgets import *
  3. from PyQt5.QtGui import *
  4. from PyQt5.QtCore import *
  5. import qdarkstyle
  6. import hashlib
  7. from db.db import DB


  8. class SignInWidget(QWidget):
  9.     is_admin_signal = pyqtSignal()
  10.     is_student_signal = pyqtSignal(str)

  11.     def __init__(self):
  12.         super(SignInWidget, self).__init__()
  13.         self.resize(900, 600)
  14.         self.setWindowTitle("图书馆管理系统")
  15.         self.setUpUI()

  16.     def setUpUI(self):
  17.         self.Vlayout = QVBoxLayout(self)
  18.         self.Hlayout1 = QHBoxLayout()
  19.         self.Hlayout2 = QHBoxLayout()
  20.         self.formlayout = QFormLayout()

  21.         self.label1 = QLabel("学号: ")
  22.         labelFont = QFont()
  23.         labelFont.setPixelSize(18)
  24.         lineEditFont = QFont()
  25.         lineEditFont.setPixelSize(16)
  26.         self.label1.setFont(labelFont)
  27.         self.lineEdit1 = QLineEdit()
  28.         self.lineEdit1.setFixedHeight(32)
  29.         self.lineEdit1.setFixedWidth(200)
  30.         self.lineEdit1.setFont(lineEditFont)
  31.         self.lineEdit1.setMaxLength(16)

  32.         self.formlayout.addRow(self.label1, self.lineEdit1)

  33.         self.label2 = QLabel("密码: ")
  34.         self.label2.setFont(labelFont)
  35.         self.lineEdit2 = QLineEdit()
  36.         self.lineEdit2.setFixedHeight(32)
  37.         self.lineEdit2.setFixedWidth(200)
  38.         self.lineEdit2.setMaxLength(16)

  39.         # 设置验证
  40.         reg = QRegExp("PB[0~9]{8}")
  41.         pValidator = QRegExpValidator(self)
  42.         pValidator.setRegExp(reg)
  43.         self.lineEdit1.setValidator(pValidator)

  44.         reg = QRegExp("[a-zA-z0-9]+$")
  45.         pValidator.setRegExp(reg)
  46.         self.lineEdit2.setValidator(pValidator)

  47.         passwordFont = QFont()
  48.         passwordFont.setPixelSize(10)
  49.         self.lineEdit2.setFont(passwordFont)

  50.         self.lineEdit2.setEchoMode(QLineEdit.Password)
  51.         self.formlayout.addRow(self.label2, self.lineEdit2)
  52.         self.signIn = QPushButton("登 录")
  53.         self.signIn.setFixedWidth(160)
  54.         self.signIn.setFixedHeight(40)
  55.         self.signIn.setFont(labelFont)
  56.         self.formlayout.addRow("", self.signIn)

  57.         self.label = QLabel("图书管理系统")
  58.         fontlabel = QFont()
  59.         fontlabel.setPixelSize(30)
  60.         self.label.setFixedWidth(200)
  61.         # self.label.setFixedHeight(80)
  62.         self.label.setFont(fontlabel)
  63.         self.Hlayout1.addWidget(self.label, Qt.AlignCenter)
  64.         self.widget1 = QWidget()
  65.         self.widget1.setLayout(self.Hlayout1)
  66.         self.widget2 = QWidget()
  67.         self.widget2.setFixedWidth(300)
  68.         self.widget2.setFixedHeight(150)
  69.         self.widget2.setLayout(self.formlayout)
  70.         self.Hlayout2.addWidget(self.widget2, Qt.AlignCenter)
  71.         self.widget = QWidget()
  72.         self.widget.setLayout(self.Hlayout2)
  73.         self.Vlayout.addWidget(self.widget1)
  74.         self.Vlayout.addWidget(self.widget, Qt.AlignTop)

  75.         self.signIn.clicked.connect(self.signInCheck)
  76.         self.lineEdit2.returnPressed.connect(self.signInCheck)
  77.         self.lineEdit1.returnPressed.connect(self.signInCheck)

  78.     def signInCheck(self):
  79.         number_Id = self.lineEdit1.text()
  80.         password = self.lineEdit2.text()
  81.         if number_Id == "" or password == "":
  82.             print(QMessageBox.warning(self, "警告", "学号和密码不可为空!", QMessageBox.Yes, QMessageBox.Yes))
  83.             return
  84.         # 打开数据库连接
  85.         db = DB()
  86.         count, res = db.query_super(table_name='user', column_name='StudentId', condition=number_Id)
  87.         print(count, res)
  88.         hash = hashlib.md5()
  89.         hash.update(password.encode(encoding='utf-8'))
  90.         if count == 0:
  91.             print(QMessageBox.information(self, "提示", "该账号不存在!", QMessageBox.Yes, QMessageBox.Yes))
  92.         else:
  93.             if number_Id == res[0][1] and hash.hexdigest() == res[0][3]:
  94.                 if res[0][4] == '0':
  95.                     self.is_admin_signal.emit()
  96.                 else:
  97.                    self.is_student_signal.emit(number_Id)
  98.             else:
  99.                 print(QMessageBox.information(self, "提示", "密码错误!", QMessageBox.Yes, QMessageBox.Yes))
  100.         return


  101. if __name__ == "__main__":
  102.     app = QApplication(sys.argv)
  103.     app.setWindowIcon(QIcon("./images/MainWindow_1.png"))
  104.     app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
  105.     mainMindow = SignInWidget()
  106.     mainMindow.show()
  107.     sys.exit(app.exec_())
复制代码
学生主页:
  1. import sys

  2. from PyQt5 import sip
  3. from PyQt5.QtWidgets import *
  4. from PyQt5.QtGui import QIcon, QFont
  5. from PyQt5.QtCore import Qt
  6. import qdarkstyle
  7. from BookStorageViewer import BookStorageViewer
  8. from borrowBookDialog import borrowBookDialog
  9. from returnBookDialog import returnBookDialog
  10. from BorrowStatusViewer import BorrowStatusViewer


  11. class StudentHome(QWidget):
  12.     def __init__(self, studentId):
  13.         super(StudentHome, self).__init__()
  14.         self.StudentId = studentId
  15.         self.resize(700, 600)
  16.         self.setWindowTitle("欢迎使用图书馆管理系统")
  17.         self.setUpUI()

  18.     def setUpUI(self):
  19.         # 总布局
  20.         self.layout = QHBoxLayout(self)
  21.         # 按钮布局
  22.         self.buttonLayout = QVBoxLayout()
  23.         # 按钮
  24.         self.borrowBookButton = QPushButton("借书")
  25.         self.returnBookButton = QPushButton("还书")
  26.         self.myBookStatus = QPushButton("借阅状态")
  27.         self.allBookButton = QPushButton("所有书籍")
  28.         self.buttonLayout.addWidget(self.borrowBookButton)
  29.         self.buttonLayout.addWidget(self.returnBookButton)
  30.         self.buttonLayout.addWidget(self.myBookStatus)
  31.         self.buttonLayout.addWidget(self.allBookButton)
  32.         self.borrowBookButton.setFixedWidth(100)
  33.         self.borrowBookButton.setFixedHeight(42)
  34.         self.returnBookButton.setFixedWidth(100)
  35.         self.returnBookButton.setFixedHeight(42)
  36.         self.myBookStatus.setFixedWidth(100)
  37.         self.myBookStatus.setFixedHeight(42)
  38.         self.allBookButton.setFixedWidth(100)
  39.         self.allBookButton.setFixedHeight(42)
  40.         font = QFont()
  41.         font.setPixelSize(16)
  42.         self.borrowBookButton.setFont(font)
  43.         self.returnBookButton.setFont(font)
  44.         self.myBookStatus.setFont(font)
  45.         self.allBookButton.setFont(font)

  46.         self.storageView = BookStorageViewer()
  47.         self.borrowStatusView = BorrowStatusViewer(self.StudentId)
  48.         self.allBookButton.setEnabled(False)

  49.         self.layout.addLayout(self.buttonLayout)
  50.         self.layout.addWidget(self.storageView)
  51.         self.borrowBookButton.clicked.connect(self.borrowBookButtonClicked)
  52.         self.returnBookButton.clicked.connect(self.returnBookButtonClicked)
  53.         self.myBookStatus.clicked.connect(self.myBookStatusClicked)
  54.         self.allBookButton.clicked.connect(self.allBookButtonClicked)

  55.     def borrowBookButtonClicked(self):
  56.         borrowDialog = borrowBookDialog(self.StudentId, self)
  57.         borrowDialog.borrow_book_success_signal.connect(self.borrowStatusView.borrowedQuery)
  58.         borrowDialog.borrow_book_success_signal.connect(self.storageView.searchButtonClicked)
  59.         borrowDialog.show()
  60.         borrowDialog.exec_()
  61.         return

  62.     def returnBookButtonClicked(self):
  63.         returnDialog = returnBookDialog(self.StudentId, self)
  64.         returnDialog.return_book_success_signal.connect(self.borrowStatusView.returnedQuery)
  65.         returnDialog.return_book_success_signal.connect(self.borrowStatusView.borrowedQuery)
  66.         returnDialog.return_book_success_signal.connect(self.storageView.searchButtonClicked)
  67.         returnDialog.show()
  68.         returnDialog.exec_()

  69.     def myBookStatusClicked(self):
  70.         self.layout.removeWidget(self.storageView)
  71.         sip.delete(self.storageView)
  72.         self.storageView = BookStorageViewer()
  73.         self.borrowStatusView = BorrowStatusViewer(self.StudentId)
  74.         self.layout.addWidget(self.borrowStatusView)
  75.         self.allBookButton.setEnabled(True)
  76.         self.myBookStatus.setEnabled(False)
  77.         return

  78.     def allBookButtonClicked(self):
  79.         self.layout.removeWidget(self.borrowStatusView)
  80.         sip.delete(self.borrowStatusView)
  81.         self.borrowStatusView = BorrowStatusViewer(self.StudentId)
  82.         self.storageView = BookStorageViewer()
  83.         self.layout.addWidget(self.storageView)
  84.         self.allBookButton.setEnabled(False)
  85.         self.myBookStatus.setEnabled(True)
  86.         return


  87. if __name__ == '__main__':
  88.     app = QApplication(sys.argv)
  89.     app.setWindowIcon(QIcon("./images/MainWindow_1.png"))
  90.     app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
  91.     mainMindow = StudentHome("123456")
  92.     mainMindow.show()
  93.     sys.exit(app.exec_())
复制代码
管理员主页:
  1. import sys
  2. from PyQt5.QtWidgets import *
  3. from PyQt5.QtGui import *
  4. import qdarkstyle
  5. from addBookDialog import addBookDialog
  6. from dropBookDialog import dropBookDialog
  7. from BookStorageViewer import BookStorageViewer
  8. from UserManage import UserManage


  9. class AdminHome(QWidget):
  10.     def __init__(self):
  11.         super().__init__()
  12.         self.setUpUI()

  13.     def setUpUI(self):
  14.         self.resize(900, 600)
  15.         self.setWindowTitle("欢迎使用图书馆管理系统")
  16.         self.layout = QHBoxLayout()
  17.         self.buttonlayout = QVBoxLayout()
  18.         self.setLayout(self.layout)

  19.         font = QFont()
  20.         font.setPixelSize(16)
  21.         self.userManageButton = QPushButton("用户管理")
  22.         self.addBookButton = QPushButton("添加书籍")
  23.         self.dropBookButton = QPushButton("淘汰书籍")
  24.         self.userManageButton.setFont(font)
  25.         self.addBookButton.setFont(font)
  26.         self.dropBookButton.setFont(font)
  27.         self.userManageButton.setFixedWidth(100)
  28.         self.userManageButton.setFixedHeight(42)
  29.         self.addBookButton.setFixedWidth(100)
  30.         self.addBookButton.setFixedHeight(42)
  31.         self.dropBookButton.setFixedWidth(100)
  32.         self.dropBookButton.setFixedHeight(42)
  33.         self.buttonlayout.addWidget(self.addBookButton)
  34.         self.buttonlayout.addWidget(self.dropBookButton)
  35.         self.buttonlayout.addWidget(self.userManageButton)
  36.         self.layout.addLayout(self.buttonlayout)
  37.         self.storageView = BookStorageViewer()
  38.         self.layout.addWidget(self.storageView)

  39.         self.addBookButton.clicked.connect(self.addBookButtonClicked)
  40.         self.dropBookButton.clicked.connect(self.dropBookButtonClicked)
  41.         self.userManageButton.clicked.connect(self.userManage)

  42.     def addBookButtonClicked(self):
  43.         addDialog = addBookDialog(self)
  44.         addDialog.add_book_success_signal.connect(self.storageView.searchButtonClicked)
  45.         addDialog.show()
  46.         addDialog.exec_()

  47.     def dropBookButtonClicked(self):
  48.         dropDialog = dropBookDialog(self)
  49.         dropDialog.drop_book_successful_signal.connect(self.storageView.searchButtonClicked)
  50.         dropDialog.show()
  51.         dropDialog.exec_()

  52.     def userManage(self):
  53.         UserDelete = UserManage(self)
  54.         UserDelete.show()
  55.         UserDelete.exec_()


  56. if __name__ == "__main__":
  57.     app = QApplication(sys.argv)
  58.     app.setWindowIcon(QIcon("./images/MainWindow_1.png"))
  59.     app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
  60.     mainMindow = AdminHome()
  61.     mainMindow.show()
  62.     sys.exit(app.exec_())
复制代码
数据库文件:

CREATE TABLE `user` (
  `id` varchar(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `StudentId` varchar(16) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `Name` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `Password` char(32) COLLATE utf8_unicode_ci NOT NULL,
  `IsAdmin` bit(1) NOT NULL DEFAULT b'0',
  `TimesBorrowed` int(11) NOT NULL DEFAULT '0',
  `NumBorrowed` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `Unique_studentID` (`StudentId`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('01aa6e87-eefc-41b6-8627-f426e75cb2d1', '201725210151', 'admin', 'e10adc3949ba59abbe56e057f20f883e', '0', '0', '0');

如何在登录页面登录成功后,跳转到其它两个页面;


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-10 19:24:11 | 显示全部楼层
跳转到其他页面,其实就是窗口的隐藏和显示吧

另外加一个__init__.py,来设置,主窗口,和其他窗口的显示隐藏的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-10 19:55:36 From FishC Mobile | 显示全部楼层
窗口实例不是有show和close方法么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-10 20:27:40 | 显示全部楼层
当初我自己写的是这么用的
检测先谈一个对话框 对话框有选项检测时学生还是管理员

                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 04:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表