1)在Qt Creator中设计的登录界面如下图:
1)第一步
制作好三个ui文件后,通过bat文件转换为py文件,bat文件代码如下:
echo off
copy .\mainApplication.ui mainApplication.ui
pyuic5 -o ui_mainApplication.py mainApplication.ui
copy .\logOn.ui logOn.ui
pyuic5 -o ui_logOn.py logOn.ui
copy .\logOnWarn.ui logOnWarn.ui
pyuic5 -o ui_logOnWarn.py logOnWarn.ui
copy .\res.qrc \res.qrc
pyrcc5 res.qrc -o res_rc.py
可得ui_logOn.py、ui_logOnWarn.py和ui_mainApplication.py三个文件,其内容我们无需关心,系统自动生成,在程序中调用即可。
2)第二步
创建告警框py文件logOnWarn.py,其内容如下:
import sys
from PyQt5.QtWidgets import QDialog
from PyQt5.QtCore import Qt
from ui_logOnWarn import Ui_Dialog
class LogOnWarnDialog(QDialog):
def __init__(self, message='警告', parent=None):
super().__init__(parent)
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint) # 固定窗口大小
self.ui.label.setText(message)
创建登录界面py文件logOn.py,其内容如下:
import sys
from PyQt5.QtWidgets import QDialog
from PyQt5.QtCore import Qt, pyqtSlot
from ui_logOn import Ui_Dialog
from logOnWarn import LogOnWarnDialog
class LogOnDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint) # 固定窗口大小
self.__systemUserName = "admin" # 登录账号
self.__systemPassword = "123456" # 登录密码
def sendData(self): # 以元祖形式返回数据至主界面
return self.ui.IPLineEdit.text(), self.ui.portLineEdit.text()
def closeEvent(self, event):
sys.exit()
@pyqtSlot()
def on_OKPushButton_clicked(self):
userName = self.ui.userNameLineEdit.text()
password = self.ui.passwordLineEdit.text()
IP = self.ui.IPLineEdit.text()
port = self.ui.portLineEdit.text()
if (port == "") or (IP == ""):
alarmMessage = LogOnWarnDialog("IP或端口不能为空")
alarmMessage.exec()
if (userName == self.__systemUserName) and (password == self.__systemPassword):
self.accept()
else:
alarmMessage = LogOnWarnDialog("账号或密码错误")
alarmMessage.exec()
创建主界面py文件mainApplication.py,其内容如下:
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QDialog
from PyQt5.QtCore import Qt, QEvent
from ui_mainApplication import Ui_Widget
from logOn import LogOnDialog
class MyApplication(QWidget):
def __init__(self, IP, port, parent=None):
super().__init__(parent)
self.ui = Ui_Widget()
self.ui.setupUi(self)
self.ui.IPLabel.setText("IP:"+IP) # 设置主界面IP标签
self.ui.portLabel.setText("端口:"+port) # 设置主界面端口标签
if __name__ == "__main__":
application = QApplication(sys.argv)
# 弹出登录框
logOnDialog = LogOnDialog()
ret = logOnDialog.exec() # 模态方式显示
if ret == QDialog.Accepted:
IPRec, portRec = logOnDialog.sendData() # 接收来自界面的IP和端口
myApplication = MyApplication(IPRec, portRec)
myApplication.showMaximized() # 最大化显示
sys.exit(application.exec_())
else:
sys.exit(application.exec_())
运行主界面程序,结果如下面一系列图所示: