进程完成,退出代码 -1073740791 (0xC0000409) 错误未打开网站

Posted

技术标签:

【中文标题】进程完成,退出代码 -1073740791 (0xC0000409) 错误未打开网站【英文标题】:Process finished with exit code -1073740791 (0xC0000409) error not opening a website 【发布时间】:2021-02-01 13:05:04 【问题描述】:

我正在使用 PyQt5 和 QtDesginer 创建一个桌面应用程序。我有一个连接到数据库的登录页面,并要求用户输入用户名和密码。在设计器中,我创建了一个打开某个链接的窗口。以下代码正在运行。但是当将其插入第二个代码时,它会以退出代码 -1073740791 (0xC0000409) 结束进程。

from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5 import uic
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEngineView
import sys


class UI(QWidget):
    def __init__(self):
        super().__init__()
        uic.loadUi("website.ui", self)

        self.show()


app = QApplication(sys.argv)
window = UI()
app.exec_()
from PyQt5 import QtCore, QtGui, QtWidgets
import mysql.connector as mc
from PyQt5.QtWidgets import QDialog


class Ui_Form(object):

    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(500, 193)
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(Form)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label = QtWidgets.QLabel(Form)
        self.label.setObjectName("label")
        self.horizontalLayout.addWidget(self.label)
        self.lineEditEmail = QtWidgets.QLineEdit(Form)
        self.lineEditEmail.setObjectName("lineEditEmail")
        self.horizontalLayout.addWidget(self.lineEditEmail)
        self.verticalLayout_2.addLayout(self.horizontalLayout)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setObjectName("label_2")
        self.horizontalLayout_2.addWidget(self.label_2)
        self.lineEditPassword = QtWidgets.QLineEdit(Form)
        self.lineEditPassword.setEchoMode(QtWidgets.QLineEdit.Password)
        self.lineEditPassword.setObjectName("lineEditPassword")
        self.horizontalLayout_2.addWidget(self.lineEditPassword)
        self.verticalLayout_2.addLayout(self.horizontalLayout_2)
        spacerItem = QtWidgets.QSpacerItem(20, 40,
                                           QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout_2.addItem(spacerItem)
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setObjectName("pushButton")

        # this is the signal that we have already connected
        self.pushButton.clicked.connect(self.login)
        self.verticalLayout.addWidget(self.pushButton)
        self.labelResult = QtWidgets.QLabel(Form)
        font = QtGui.QFont()
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.labelResult.setFont(font)
        self.labelResult.setText("")
        self.labelResult.setObjectName("labelResult")
        self.verticalLayout.addWidget(self.labelResult)
        self.verticalLayout_2.addLayout(self.verticalLayout)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def login(self):
        try:
            email = self.lineEditEmail.text()
            password = self.lineEditPassword.text()

            mydb = mc.connect(
                host="localhost",
                user="root",
                password="",
                database="program"

            )

            mycursor = mydb.cursor()
            query = "SELECT username,password from user where username " \
                    "like '" + email + "'and password like '" \
                    + password + "'"
            mycursor.execute(query)
            result = mycursor.fetchone()

            if result == None:
                self.labelResult.setText("Incorrect email or password")

            else:
                self.labelResult.setText("You are logged in")
                import Load_exam



        except mc.Error as e:
            self.labelResult.setText("Error")

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "Email:"))
        self.label_2.setText(_translate("Form", "Password:"))
        self.pushButton.setText(_translate("Form", "Login"))


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

【问题讨论】:

什么时候出现这个错误? Load_exam 是做什么的? 加载考试是第一个代码: from PyQt5.QtWidgets import QApplication, QWidget from PyQt5 import uic from PyQt5.QtCore import QUrl from PyQt5.QtWebEngineWidgets import QWebEngineView import sys class UI(QWidget): def __init__( self): super().__init__() uic.loadUi("website.ui", self) self.show() app = QApplication(sys.argv) window = UI() app.exec_() 登录后出现错误 【参考方案1】:

问题的根源主要在于每个进程应该只存在 oneunique QApplication 实例。

当您导入 Load_exam 时,QApplication 实例已经存在并正在执行,并且该 scipt 将尝试执行最后三行(因为没有 if __name__ == '__main__' 检查),因此崩溃。

在提供解决方案之前,请考虑以下两个方面:

import 语句应始终出现在脚本的开头,因为在代码中(尤其是在函数中)导入通常是不必要的,并且经常会导致意想不到的问题;对于常见用途,唯一可接受的例外是在 __name__ 检查中执行此操作; 编辑pyuic 生成的文件被认为是不好的 做法,绝不应该,永远除非你真的知道你在做什么(如果你知道,你可能不会这样做);这些文件是专门导入的,如有关using Designer的官方指南中所述;

记住以上几点,用pyuic重新创建Ui_Form的ui(以下假设生成的文件名为loginForm.py),并创建一个新脚本如下:

from PyQt5 import QtCore, QtGui, QtWidgets, uic
from loginForm import Ui_Form
import mysql.connector as mc


class BrowserWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        uic.loadUi("website.ui", self)


class LoginWindow(QtWidgets.QWidget, Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.login)

    def login(self):
        try:
            email = self.lineEditEmail.text()
            password = self.lineEditPassword.text()

            mydb = mc.connect(
                host="localhost",
                user="root",
                password="",
                database="program"

            )

            mycursor = mydb.cursor()
            query = "SELECT username,password from user where username " \
                    "like '" + email + "'and password like '" \
                    + password + "'"
            mycursor.execute(query)
            result = mycursor.fetchone()

            if result == None:
                self.labelResult.setText("Incorrect email or password")

            else:
                self.labelResult.setText("You are logged in")
                self.showBrowser()

        except mc.Error as e:
            self.labelResult.setText("Error")

    def showBrowser(self):
        self.browser = BrowserWindow()
        self.browser.show()


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    loginWindow = LoginWindow()
    loginWindow.show()
    sys.exit(app.exec_())

由于您已经在浏览器窗口中使用了uic,因此您可以跳过pyuic 部分,并在登录窗口中也使用相同的部分:

class LoginWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        uic.loadUi('loginForm.ui', self)
        self.pushButton.clicked.connect(self.login)

    # ...

【讨论】:

很抱歉我从未听说过 pyuic,我刚开始学习 PyQt。所以,我创建了 LoginWindow 类,但是关于从设计中加载 LoginForm,我不应该寻找按钮吗?例如:按钮 = self.findChild(QPushButton, 'pushButton') 。同样的事情也适用于 lineEditEmail 和 lineEditPassword。我需要你的帮助。 我想指出别的东西,在我的初始代码中而不是打开浏览器,我只是放了一个按钮,并且窗口打开时没有任何错误,如果 O 尝试打开浏览器,如果给出一个错误 @Midoz 您使用Ui_Form 发布的代码是使用pyuic 创建的。 “我不应该寻找按钮”:你试过我的代码吗?不,您不需要使用self.findChild(不幸的是,许多教程都建议,它们是错误):使用uic.loadUisetupUi() 方法的继承会导致创建所有实例每个小部件的属性与设计器中列出的完全相同。 非常感谢 :)

以上是关于进程完成,退出代码 -1073740791 (0xC0000409) 错误未打开网站的主要内容,如果未能解决你的问题,请参考以下文章

循环向量退出并出现错误进程以退出代码 -1073741819 完成

获取前一段时间完成的后台进程的退出代码

进程以退出代码139完成

如何修复错误“进程以退出代码-1073741819(0xC0000005)完成”

进程以python中的退出代码1错误完成[重复]

IIS6 程序池错误< 'DefaultAppPool' 提供服务的进程意外终止>