pyqt5 实现多窗口跳转的方法,以及ui界面代码与逻辑代码分离

1、qtdesign 新建一个aaa_main.ui     ui界面,同时改下ui   objectName的名字(MainWindow),在pyuic生成代码类不会重名

2、qtdesign 新建一个aaa_child.ui     ui界面,同时改下ui   objectName的名字(ChildWindow);创建一个关闭的按钮

3、用pyuic生成的代码如下aaa_main.ui的代码如下aaa_main.py

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

# Form implementation generated from reading ui file 'aaa_main.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(270, 200, 93, 28))
        self.pushButton.setObjectName("pushButton")
        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", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "下一个窗口"))

4、用pyuic生成的代码如下aaa_child.ui的代码如下aaa_child.py

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

# Form implementation generated from reading ui file 'aaa_child.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_ChildWindow(object):
    def setupUi(self, ChildWindow):
        ChildWindow.setObjectName("ChildWindow")
        ChildWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(ChildWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(290, 200, 93, 28))
        self.pushButton.setObjectName("pushButton")
        ChildWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(ChildWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        ChildWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(ChildWindow)
        self.statusbar.setObjectName("statusbar")
        ChildWindow.setStatusBar(self.statusbar)

        self.retranslateUi(ChildWindow)
        # self.pushButton.clicked.connect(ChildWindow.close) # type: ignore
        QtCore.QMetaObject.connectSlotsByName(ChildWindow)

    def retranslateUi(self, ChildWindow):
        _translate = QtCore.QCoreApplication.translate
        ChildWindow.setWindowTitle(_translate("ChildWindow", "MainWindow"))
        self.pushButton.setText(_translate("ChildWindow", "关闭"))

5、新建一个all_main.py文件,如下

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtCore import pyqtSignal
from aaa_main import Ui_MainWindow
from aaa_child import Ui_ChildWindow

class mainwinclass(QMainWindow,Ui_MainWindow):
    def __init__(self):
        super(mainwinclass,self).__init__()
        self.setupUi(self)

    def pushButtonmain_click(self):
        self.pushButton.clicked.connect(b.show) # type: ignore

class subwinclass(QMainWindow,Ui_ChildWindow):
    # show_main_win_signal = pyqtSignal()  # 该信号用于展示子窗体

    def __init__(self):
        super(subwinclass,self).__init__()
        self.setupUi(self)

    def open(self):
        self.show()


def show_sub():
    b.show()
    a.hide()
def show_main():
    a.show()
    b.hide()

if __name__ == '__main__':
    app=QtWidgets.QApplication(sys.argv)
    a=mainwinclass()
    a.show()
    b=subwinclass()
    a.pushButton.clicked.connect(show_sub)
    b.pushButton.clicked.connect(show_main)

    sys.exit(app.exec_())

6、效果显示

20240223-132230-CSDN直播

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现两个UI窗口的跳转,你可以使用PyQt中的QStackedWidget控件。QStackedWidget可以容纳多个窗口,并且只显示其中的一个窗口。你可以在一个窗口中点击按钮或执行某些操作来切换到另一个窗口。 以下是一个简单的示例代码,演示了如何在两个UI窗口之间进行跳转: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QLabel, QStackedWidget class Window1(QWidget): def __init__(self): super().__init__() layout = QVBoxLayout() self.button = QPushButton('跳转到Window2') self.button.clicked.connect(self.switch_window) layout.addWidget(self.button) self.setLayout(layout) def switch_window(self): window2.setCurrentIndex(1) class Window2(QWidget): def __init__(self): super().__init__() layout = QVBoxLayout() self.label = QLabel('这是Window2') layout.addWidget(self.label) self.setLayout(layout) if __name__ == '__main__': app = QApplication(sys.argv) stackedWidget = QStackedWidget() window1 = Window1() window2 = Window2() stackedWidget.addWidget(window1) stackedWidget.addWidget(window2) stackedWidget.show() sys.exit(app.exec_()) ``` 在这个例子中,我们创建了两个窗口Window1和Window2。Window1中有一个按钮,当点击该按钮时,会切换到Window2。QStackedWidget用来容纳这两个窗口,并且默认只显示第一个窗口。通过setCurrentIndex方法可以切换显示的窗口,索引从0开始,所以setCurrentIndex(1)表示显示第二个窗口。 你可以根据自己的需要修改窗口的布局和添加更多的控件,以实现更丰富的界面和交互。希望对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值