PyQt5界面跳转处理案例

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、思路

1.为了后期对界面的优化处理我们采用界面层和业务层分离的方法

2.使用PyQt5 的 Qt Designer 可视化编辑界面特别注意创建窗体时使用QMainWindow 再通  过PyUIC转换为界面类

3.定义一个业务层类去继承两个类分别是设计的界面基类和QMainWindow类需要引入的包

 from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget,   QFileDialog,QMessageBox

4.初始化业务层类

5.设置信号与槽

6.定义槽

二、结构说明

一共有四个文件

  • first_window.py                         第一个窗体界面层
  • first_window_actions.py            第一个窗体的业务层
  • another_window.py                   另一个窗体界面层
  • another_window_actions.py      另一个窗体界业务层

三、代码

1first_window.py 文件---界面层

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'demo.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(558, 483)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(195, 186, 191, 51))
        font = QtGui.QFont()
        font.setFamily("黑体")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 558, 18))
        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", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "打开另一界面"))


first_window.py 运行后窗体

2another_window.py文件---界面层

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'another_window.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(433, 413)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(170, 208, 181, 41))
        font = QtGui.QFont()
        font.setFamily("黑体")
        font.setPointSize(20)
        self.label.setFont(font)
        self.label.setObjectName("label")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 433, 18))
        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", "MainWindow"))
        self.label.setText(_translate("MainWindow", "另一个界面"))

another_window.py运行后窗体

3another_window_actions.py 文件---业务层

import sys
import another_window
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QFileDialog, QMessageBox
from PyQt5 import QtWidgets

# 业务类需要继承两个类一个设计的主界面另一个是QMainWindow
class AnotherWindowActions(another_window.Ui_MainWindow, QMainWindow):
    def __init__(self):
        """
         特别注意最容易出错
         1.派生新类访问基类需要super(),同时它的参数是基类文件下的类及“ui_home_window.py中的 
           Ui_MainWindow类”
        """

        super(another_window.Ui_MainWindow, self).__init__()
        self.setupUi(self)


4first_window_actions.py文件---业务层

import sys
import first_window
import another_window_actions
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QFileDialog, QMessageBox
from PyQt5 import QtWidgets


# 注意这里定义的第一个界面的后端代码类需要继承两个类
class FirstWindowActions(first_window.Ui_MainWindow, QMainWindow):
    def __init__(self):
        super(first_window.Ui_MainWindow, self).__init__()
        # 创建界面
        self.setupUi(self)
        # 绑定槽函数
        self.pushButton.clicked.connect(self.open_btn_clicked)
    
    # 核心代码
    # 定义一个按钮的槽函数
    def open_btn_clicked(self):
        """点击相应按钮跳转到第二个界面"""
        # 实例化第二个界面的后端类并对第二个界面进行显示
        # 通过派生新类去访问类
        self.another_window = another_window_actions.AnotherWindowActions()
        self.another_window.show()



# 主程序入口
if __name__ == '__main__':
    # 这里是界面的入口在这里需要定义QApplication对象之后界面跳转时不用再重新定义只需要调用show()函数即可
    app = QApplication(sys.argv)

    # 实例化
    demo_window = FirstWindowActions()

    # 显示
    demo_window.show()

    sys.exit(app.exec_())

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6