pyqt界面跳转出现问题,会直接退出

pyqt界面跳转出现问题,一共用qtdesigner做了4个界面,写了一个controller来控制,
从主界面A(hello)跳转到界面B(login)和C(operate)时没有问题,但从B(login)跳转到D(serch)的时候就会退出,
显示:进程已结束,退出代码-1073740791 (0xC0000409)
请帮忙看一下是代码哪个地方出了问题。

import sys
from PyQt5 import QtCore, QtWidgets, QtCore
from PyQt5.QtWidgets import *
# 导入 Qt designer 设计的页面
import login
from hello import Ui_MainWindow as Hello_Ui
from login import Ui_MainWindow as Login_Ui
from operate import Ui_MainWindow as Operate_Ui
from serch import Ui_MainWindow as Serch_Ui

# 主窗口
class HelloWindow(QtWidgets.QMainWindow, Hello_Ui):
    switch_window1 = QtCore.pyqtSignal() # 跳转信号
    switch_window2 = QtCore.pyqtSignal() # 跳转信号
    def __init__(self):
        super(HelloWindow, self).__init__()
        self.setupUi(self)
        self.queryButton.clicked.connect(self.goOperate)
        self.manageButton.clicked.connect(self.goLogin)
    def goLogin(self):
        accout = int(self.lineEdit.text())
        password = int(self.lineEdit_2.text())
        if accout == 1234 and password == 1234:
            reply = QMessageBox.about(self, "提示", "密码正确!")
            self.switch_window1.emit()
        else:
            reply4 = QMessageBox.about(self, "提示", "账号或密码错误,请重新输入!")

    def goOperate(self):
        self.switch_window2.emit()

# 登录窗口
class LoginWindow(QtWidgets.QMainWindow, Login_Ui):
    switch_window3 = QtCore.pyqtSignal()
    def __init__(self):
        super(LoginWindow, self).__init__()
        self.setupUi(self)
        self.pushButton_4.clicked.connect(self.goSerch)

    def goSerch(self):
        self.switch_window3.emit()
# 操作窗口
class SerchWindow(QtWidgets.QMainWindow, Serch_Ui):
    def __init__(self):
        super(SerchWindow, self).__init__()
        self.setupUi(self)

class OperateWindow(QtWidgets.QMainWindow, Operate_Ui):
    def __init__(self):
        super(OperateWindow, self).__init__()
        self.setupUi(self)
# 利用一个控制器来控制页面的跳转
class Controller:
    def __init__(self):
        pass
    # 跳转到 hello 窗口
    def show_hello(self):
        self.hello = HelloWindow()
        self.hello.switch_window1.connect(self.show_login)
        self.hello.switch_window2.connect(self.show_operate)
        self.hello.show()
    # 跳转到 login 窗口, 注意关闭原页面
    def show_login(self):
        self.login = LoginWindow()
        self.login.switch_window3.connect(self.show_serch)
        self.hello.close()
        self.login.show()
    # 跳转到 operate 窗口, 注意关闭原页面
    def show_operate(self):
        self.operate = OperateWindow()
        self.hello.close()
        self.operate.show()

    def show_serch(self):
        self.serch = SerchWindow()
        self.login.close()
        self.serch.show()

def main():
    app = QtWidgets.QApplication(sys.argv)
    controller = Controller() # 控制器实例
    controller.show_hello() # 默认展示的是 hello 页面
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

你好,你的跳转代码主题没有问题,我复现你的问题时发现调用了不存在的对象属性不会跳转,直接关闭了页面
请确认跳转的UI中是否在使用的时候调用了不存在的对象属性,我这里测试跳转
UI是我随便弄的几个,屏蔽了报错的不存在(我的UI没有)调用属性
测试代码1(无报错)



import sys

from PyQt5 import QtWidgets,QtCore
from PyQt5.QtWidgets import *

# 导入 Qt designer 设计的页面
from hello import Ui_MainWindow as Hello_Ui
from login import Ui_MainWindow as Login_Ui
from operate import Ui_MainWindow as Operate_Ui
from serch import Ui_MainWindow as Serch_Ui


# 主窗口
class HelloWindow(QtWidgets.QMainWindow,Hello_Ui):
    switch_window1 = QtCore.pyqtSignal()  # 跳转信号
    switch_window2 = QtCore.pyqtSignal()  # 跳转信号
    
    def __init__(self):
        super(HelloWindow,self).__init__()
        self.setupUi(self)
        self.queryButton.clicked.connect(self.goOperate)
        self.manageButton.clicked.connect(self.goLogin)
    
    def goLogin(self):
        # accout = int(self.lineEdit.text())
        # password = int(self.lineEdit_2.text())
        # if accout == 1234 and password == 1234:
        reply = QMessageBox.about(self,"提示","密码正确!")
        self.switch_window1.emit()
        # else:
        #     reply4 = QMessageBox.about(self,"提示","账号或密码错误,请重新输入!")
        #
    
    def goOperate(self):
        self.switch_window2.emit()


# 登录窗口
class LoginWindow(QtWidgets.QMainWindow,Login_Ui):
    switch_window3 = QtCore.pyqtSignal()
    
    def __init__(self):
        super(LoginWindow,self).__init__()
        self.setupUi(self)
        # self.pushButton_4.clicked.connect(self.goSerch)
    
    def goSerch(self):
        self.switch_window3.emit()


# 操作窗口
class SerchWindow(QtWidgets.QMainWindow,Serch_Ui):
    def __init__(self):
        super(SerchWindow,self).__init__()
        self.setupUi(self)


class OperateWindow(QtWidgets.QMainWindow,Operate_Ui):
    def __init__(self):
        super(OperateWindow,self).__init__()
        self.setupUi(self)


# 利用一个控制器来控制页面的跳转
class Controller:
    def __init__(self):
        pass
    
    # 跳转到 hello 窗口
    def show_hello(self):
        self.hello = HelloWindow()
        self.hello.switch_window1.connect(self.show_login)
        self.hello.switch_window2.connect(self.show_operate)
        self.hello.show()
    
    # 跳转到 login 窗口, 注意关闭原页面
    def show_login(self):
        self.login = LoginWindow()
        self.login.switch_window3.connect(self.show_serch)
        self.hello.close()
        self.login.show()
    
    # 跳转到 operate 窗口, 注意关闭原页面
    def show_operate(self):
        self.operate = OperateWindow()
        self.hello.close()
        self.operate.show()
    
    def show_serch(self):
        self.serch = SerchWindow()
        self.login.close()
        self.serch.show()


def main():
    app = QtWidgets.QApplication(sys.argv)
    controller = Controller()  # 控制器实例
    controller.show_hello()  # 默认展示的是 hello 页面
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

img


测试代码二(有报错,跳转失败)


import sys

from PyQt5 import QtWidgets,QtCore
from PyQt5.QtWidgets import *

# 导入 Qt designer 设计的页面
from hello import Ui_MainWindow as Hello_Ui
from login import Ui_MainWindow as Login_Ui
from operate import Ui_MainWindow as Operate_Ui
from serch import Ui_MainWindow as Serch_Ui


# 主窗口
class HelloWindow(QtWidgets.QMainWindow,Hello_Ui):
    switch_window1 = QtCore.pyqtSignal()  # 跳转信号
    switch_window2 = QtCore.pyqtSignal()  # 跳转信号
    
    def __init__(self):
        super(HelloWindow,self).__init__()
        self.setupUi(self)
        self.queryButton.clicked.connect(self.goOperate)
        self.manageButton.clicked.connect(self.goLogin)
    
    def goLogin(self):
        # accout = int(self.lineEdit.text())
        # password = int(self.lineEdit_2.text())
        # if accout == 1234 and password == 1234:
        reply = QMessageBox.about(self,"提示","密码正确!")
        self.switch_window1.emit()
        # else:
        #     reply4 = QMessageBox.about(self,"提示","账号或密码错误,请重新输入!")
        #
    
    def goOperate(self):
        self.switch_window2.emit()


# 登录窗口
class LoginWindow(QtWidgets.QMainWindow,Login_Ui):
    switch_window3 = QtCore.pyqtSignal()
    
    def __init__(self):
        super(LoginWindow,self).__init__()
        self.setupUi(self)
        self.pushButton_4.clicked.connect(self.goSerch)
    
    def goSerch(self):
        self.switch_window3.emit()


# 操作窗口
class SerchWindow(QtWidgets.QMainWindow,Serch_Ui):
    def __init__(self):
        super(SerchWindow,self).__init__()
        self.setupUi(self)


class OperateWindow(QtWidgets.QMainWindow,Operate_Ui):
    def __init__(self):
        super(OperateWindow,self).__init__()
        self.setupUi(self)


# 利用一个控制器来控制页面的跳转
class Controller:
    def __init__(self):
        pass
    
    # 跳转到 hello 窗口
    def show_hello(self):
        self.hello = HelloWindow()
        self.hello.switch_window1.connect(self.show_login)
        self.hello.switch_window2.connect(self.show_operate)
        self.hello.show()
    
    # 跳转到 login 窗口, 注意关闭原页面
    def show_login(self):
        self.login = LoginWindow()
        self.login.switch_window3.connect(self.show_serch)
        self.hello.close()
        self.login.show()
    
    # 跳转到 operate 窗口, 注意关闭原页面
    def show_operate(self):
        self.operate = OperateWindow()
        self.hello.close()
        self.operate.show()
    
    def show_serch(self):
        self.serch = SerchWindow()
        self.login.close()
        self.serch.show()


def main():
    app = QtWidgets.QApplication(sys.argv)
    controller = Controller()  # 控制器实例
    controller.show_hello()  # 默认展示的是 hello 页面
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

img


有帮助请点击右上角的采纳,谢谢

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632