界面初步设计
界面的初步设计可以通过QtDesigner完成,存在的问题就是能够完成的部分十分有限,例如插入图片、设计接口等功能仍需要将ui文件输出,并转为python代码进行二次编辑。
输出一次代码
class Ui_MainWindow(QWidget):
def setupUi(self, MainWindow):
super().__init__()
MainWindow.setObjectName("MainWindow")
# 限定窗口大小
MainWindow.resize(800, 600)
# 设置窗口中心
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
# 设置姓名label
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(110, 40, 121, 101))
self.label.setObjectName("label")
# 设置点击按钮
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(360, 380, 112, 34))
self.pushButton.setObjectName("pushButton")
# 设置文本读取窗口
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(260, 40, 201, 111))
self.lineEdit.setObjectName("lineEdit")
# 设置文本输出窗口
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
self.textBrowser.setGeometry(QtCore.QRect(230, 160, 256, 192))
self.textBrowser.setObjectName("textBrowser")
# 一些默认设置
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 30))
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 __init__(self, parent=None):
super(MyMainForm, self).__init__(parent)
self.setupUi(self)
# 添加登录按钮信号和槽。注意display函数不加小括号()
self.pushButton.clicked.connect(self.display)
def display(self):
# 利用line Edit控件对象text()函数获取界面输入
username = self.lineEdit.text()
# 利用text Browser控件对象setText()函数设置界面显示
self.textBrowser.setText("登录成功!\n" + "用户名是: " + username + '!')
实现的功能即:1)将类中pushButton的click动作与display函数连接 2)在click动作触发后,读取类中lineEdit变量的text字符串并赋值给username,最后输出
页面跳转
增加界面跳转功能,即再编写一个Window,并通过一个“跳转”按钮连接起来。
# 设置连接——按钮转换界面
self.jumpButton.clicked.connect(self.openAnotherWindow)
def openAnotherWindow(self):
self.another_window = QtWidgets.QMainWindow()
self.ui = Ui_AnotherWindow()
self.ui.setupUi(self.another_window)
self.another_window.show()
学号检测
增加一个文本读取窗口,并将其与“跳转”按钮连接,当检测正确时才可以显示“跳转”按钮。
退出设置
退出功能是内置的,因此在按钮创建之初就可以将其与close绑定
# 设置连接——退出当前界面
self.exitButton.clicked.connect(AnotherWindow.close)
完整代码
MyLog.py 窗口类
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QWidget
class Ui_AnotherWindow(QWidget):
def setupUi(self, AnotherWindow):
# super().__init__()
AnotherWindow.setObjectName("AnotherWindow")
AnotherWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(AnotherWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(110, 40, 181, 101))
self.label.setObjectName("label")
self.exitButton = QtWidgets.QPushButton(self.centralwidget)
self.exitButton.setGeometry(QtCore.QRect(360, 380, 112, 34))
self.exitButton.setObjectName("exitButton")
# 设置连接——退出当前界面
self.exitButton.clicked.connect(AnotherWindow.close)
AnotherWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(AnotherWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 30))
self.menubar.setObjectName("menubar")
AnotherWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(AnotherWindow)
self.statusbar.setObjectName("statusbar")
AnotherWindow.setStatusBar(self.statusbar)
self.retranslateUi(AnotherWindow)
QtCore.QMetaObject.connectSlotsByName(AnotherWindow)
def retranslateUi(self, AnotherWindow):
_translate = QtCore.QCoreApplication.translate
AnotherWindow.setWindowTitle(_translate("AnotherWindow", "AnotherWindow"))
self.label.setText(_translate("AnotherWindow", "This is another window"))
self.exitButton.setText(_translate("AnotherWindow", "退出"))
class Ui_MainWindow(QWidget):
def setupUi(self, MainWindow):
super().__init__()
MainWindow.setObjectName("MainWindow")
# 限定窗口大小
MainWindow.resize(800, 600)
# 设置主窗口
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
# 设置姓名label
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(110, 40, 121, 50))
self.label.setObjectName("label")
self.label1 = QtWidgets.QLabel(self.centralwidget)
self.label1.setGeometry(QtCore.QRect(110, 100, 121, 50))
self.label1.setObjectName("label")
# 设置点击按钮
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(360, 380, 112, 34))
self.pushButton.setObjectName("pushButton")
self.jumpButton = QtWidgets.QPushButton(self.centralwidget)
self.jumpButton.setGeometry(QtCore.QRect(200, 380, 112, 34))
self.jumpButton.setObjectName("jumpButton")
self.jumpButton.setVisible(False)
self.exitButton = QtWidgets.QPushButton(self.centralwidget)
self.exitButton.setGeometry(QtCore.QRect(360, 480, 112, 34))
self.exitButton.setObjectName("exitButton")
# 设置连接——退出当前界面
self.exitButton.clicked.connect(MainWindow.close)
# 设置文本读取窗口
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(260, 40, 200, 50))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit1 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit1.setGeometry(QtCore.QRect(260, 100, 200, 50))
self.lineEdit1.setObjectName("lineEdit1")
# 设置文本输出窗口
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
self.textBrowser.setGeometry(QtCore.QRect(230, 160, 256, 192))
self.textBrowser.setObjectName("textBrowser")
# 一些默认设置
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 30))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
# 设置背景
MainWindow.setStyleSheet("#MainWindow{border-image:url(background.jpg)}")
# 设置连接——按钮转换界面
self.jumpButton.clicked.connect(self.openAnotherWindow)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "姓名:"))
self.label1.setText(_translate("MainWindow", "学号:"))
self.pushButton.setText(_translate("MainWindow", "提交"))
self.jumpButton.setText(_translate("MainWindow", "跳转"))
self.exitButton.setText(_translate("MainWindow", "退出"))
def openAnotherWindow(self):
self.another_window = QtWidgets.QMainWindow()
self.ui = Ui_AnotherWindow()
self.ui.setupUi(self.another_window)
self.another_window.show()
Demo.py
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
# 导入designer工具生成的login模块
from mylog import Ui_MainWindow
class MyMainForm(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyMainForm, self).__init__(parent)
self.setupUi(self)
# 添加登录按钮信号和槽。注意display函数不加小括号()
self.pushButton.clicked.connect(self.display)
def display(self):
# 真实学号
Stuid_true = "自定义"
# 利用line Edit控件对象text()函数获取界面输入
username = self.lineEdit.text()
Stuid = self.lineEdit1.text()
# 利用text Browser控件对象setText()函数设置界面显示
if Stuid == Stuid_true:
self.textBrowser.setText("登录成功!\n" + "用户名是: " + username + '!')
# 设置显示跳转按钮
self.jumpButton.setVisible(True)
else:
self.textBrowser.setText("登录失败!\n" + "请确定学号输入正确!")
if __name__ == "__main__":
# 固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
app = QApplication(sys.argv)
# 初始化
myWin = MyMainForm()
# 将窗口控件显示在屏幕上
myWin.show()
# 程序运行,sys.exit 方法确保程序完整退出。
sys.exit(app.exec_())