fhy0123 2022-05-05 20:33 采纳率: 66.7%
浏览 286
已结题

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()

  • 写回答

2条回答 默认 最新

  • 关注

    你好,你的跳转代码主题没有问题,我复现你的问题时发现调用了不存在的对象属性不会跳转,直接关闭了页面
    请确认跳转的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


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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月14日
  • 已采纳回答 5月6日
  • 赞助了问题酬金5元 5月6日
  • 创建了问题 5月5日

悬赏问题

  • ¥15 对于这个问题的代码运行
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败