首先了解PyQt5 可视化界面的写法,首先创建ui文件,建好后保存。点击tools->external tools->pyUIC将其转换为py文件。因为当界面变更时,转化为的py文件会更新,所以不要对该py文件进行改动。这里涉及一个界面和操作逻辑分离。具体参考下面这个博客,大致就是将界面的操作新写一个类,继承界面类,里面封装界面的各种操作,比如按钮点击事件。
https://www.cnblogs.com/linyfeng/p/11223707.html
点击登录按钮后跳转到新界面:
需要先给登录按钮设计逻辑,当用户名密码均匹配时关闭本窗口,开启新窗口。在init函数中为self新设一个成员变量,就是新窗口实体。在需要显示新窗口的位置将其show出来,将self关闭即可。
#登录界面:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
import db
from PyQt5 import QtCore, QtWidgets
from main import Ui_widget
class Ui_MainWindow(QMainWindow):
def __init__(self):
super(Ui_MainWindow, self).__init__()
self.setupUi(self)
db.createUserTable()#创建数据库
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.load = QtWidgets.QPushButton(self.centralwidget)
self.load.setGeometry(QtCore.QRect(220, 310, 93, 28))
self.load.setObjectName("load")
self.reg = QtWidgets.QPushButton(self.centralwidget)
self.reg.setGeometry(QtCore.QRect(470, 310, 93, 28))
self.reg.setObjectName("reg")
self.id = QtWidgets.QLabel(self.centralwidget)
self.id.setGeometry(QtCore.QRect(310, 150, 72, 15))
self.id.setObjectName("id")
self.pwd = QtWidgets.QLabel(self.centralwidget)
self.pwd.setGeometry(QtCore.QRect(310, 220, 72, 15))
self.pwd.setObjectName("pwd")
self.id_text = QtWidgets.QLineEdit(self.centralwidget)
self.id_text.setGeometry(QtCore.QRect(460, 150, 113, 21))
self.id_text.setObjectName("id_text")
self.pwd_text = QtWidgets.QLineEdit(self.centralwidget)
self.pwd_text.setGeometry(QtCore.QRect(460, 220, 113, 21))
self.pwd_text.setObjectName("pwd_text")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "登陆界面"))
self.load.setToolTip(_translate("MainWindow", "登录"))
self.load.setText(_translate("MainWindow", "登录"))
self.reg.setText(_translate("MainWindow", "注册"))
self.id.setText(_translate("MainWindow", "用户名"))
self.pwd.setText(_translate("MainWindow", "密码"))
#主界面
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication
class Ui_widget(QtWidgets.QMainWindow):
def __init__(self):
super(Ui_widget, self).__init__()
self.setupUi(self)
def setupUi(self, widget):
widget.setObjectName("widget")
widget.resize(965, 637)
self.choose = QtWidgets.QPushButton(widget)
self.choose.setGeometry(QtCore.QRect(200, 70, 93, 28))
self.choose.setObjectName("choose")
self.imgView = QtWidgets.QGraphicsView(widget)
self.imgView.setGeometry(QtCore.QRect(340, 170, 491, 331))
self.imgView.setObjectName("imgView")
self.retranslateUi(widget)
QtCore.QMetaObject.connectSlotsByName(widget)
def retranslateUi(self, widget):
_translate = QtCore.QCoreApplication.translate
widget.setWindowTitle(_translate("widget", "监测"))
self.choose.setText(_translate("widget", "选择视频"))
#总逻辑
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
import db
from xxsystem import Ui_MainWindow
from main import Ui_widget
class login_UI(Ui_MainWindow):
def __init__(self):
super(login_UI, self).__init__()
self.setupUi(self)
self.mainFrame = main_UI()
# 注意下面的函数名不能加()
self.load.clicked.connect(self.load_click)
self.reg.clicked.connect(self.reg_click)
def load_click(self):
id=self.id_text.text()
pwd=self.pwd_text.text()
if id=='':
print("请输入用户名")
if pwd=='':
print("请输入密码")
if id!='' and pwd!='':
cmd=db.login(id,pwd)
print(cmd)
if cmd=="login success":
self.mainFrame.show()
self.close()
def reg_click(self):
id = self.id_text.text()
pwd = self.pwd_text.text()
if id == '':
print("请输入用户名")
if pwd == '':
print("请输入密码")
if id != '' and pwd != '':
cmd=db.register(id,pwd)
print(cmd)
class main_UI(Ui_widget):
def __init__(self):
super(main_UI, self).__init__()
if __name__=='__main__':
app=QApplication(sys.argv)
frame=login_UI()
frame.show()
sys.exit(app.exec())