PyQt5在进行任何交互时崩溃[重复]
Posted
技术标签:
【中文标题】PyQt5在进行任何交互时崩溃[重复]【英文标题】:PyQt5 Crashes while doing any interaction [duplicate] 【发布时间】:2022-01-04 13:17:14 【问题描述】:我正在尝试使用模块 LoadUI 和 QtDesigner 制作一个简单的登录/注册表单,但每次我单击一个按钮时它都会因以下错误而崩溃:
Process finished with exit code -1073740791 (0xC0000409)
所以一开始,我制作的登录表单只有一个按钮,该按钮调用一个在控制台中打印的函数“使用电子邮件成功登录:和密码:”问题是每次我点击它时,它都会崩溃那个错误,所以我重新安装了 PyQt5 Designer,因为我确信我的代码可以正常工作,因为我正在按照教程进行操作,并且我创建了一个新的 UI 文件,认为旧的 UI 文件存在错误或其他问题,现在它在添加导航到的按钮时工作正常注册表单小部件并单击它,它再次崩溃,我不知道为什么,它甚至不想向我显示注册 Ui 这里是代码
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QDialog,QApplication
from PyQt5.uic import loadUi
class Login(QDialog):
def __init__(self):
super(Login,self).__init__()
loadUi("Login.ui",self)
self.loginfun.clicked.connect(self.loginfunction)
self.password.setEchoMode(QtWidgets.QLineEdit.Password)
self.regbutt.clicked.connect(self.gotoregister)
def loginfunction(self):
email=self.email.text()
password=self.password.text()
print(f"Successfully logged in with email: email and password: password")
def gotoregister(self):
reg = Register()
widget.addWidget(reg)
widget.setCurrentIndex(widget.currentIndex()+1)
class Register(QDialog):
def __init__(self):
super(Register, self).__init__()
loadUi("Register.ui",self)
self.signupfun.clicked.connect(self.signup())
def signup(self):
email = self.email.text()
if self.password.text() == self.cpassword.text() :
password = self.password.text()
print(f"Successfully Created Account with email: email and password: password")
login = Login()
widget.addWidget(login)
widget.setCurrentIndex(widget.currentIndex()+1)
else:
print("Passwords doesn't Match")
app=QApplication(sys.argv)
window=Login()
widget=QtWidgets.QStackedWidget()
widget.addWidget(window)
widget.setFixedWidth(480)
widget.setFixedHeight(620)
widget.show()
app.exec_()
还有与 Login.Ui、Register.Ui 和 Main.py 的链接,以防万一您需要 Uis 来检查它们https://www.mediafire.com/file/rgw565l0c32j3k4/Ui.rar/file
【问题讨论】:
问题应该是独立的,而不是依赖于可能变得不可用的外部资源。我建议您在终端或提示符中运行代码并查看错误的回溯。也就是说:1.Register中的连接错误(connect
的参数必须是可调用的,不是函数调用的结果;去掉括号); 2. 请改进你的代码风格,函数之间用空行分隔以提高可读性,这是一个非常重要的方面(见官方Style Guide for Python Code)。
3.您遵循教程的事实毫无意义,因为您可能复制了错误的内容,在不知道自己在做什么的情况下进行了修改,或者教程甚至可能是错误的,因此“我确信我的代码有效”是一个错误的假设。事实上,如果我认出那段代码的模式,那就是可以在 Youtube 上找到的教程,并且已知它会提供 很多 错误的建议和不好的建议实践(从您应该不将 QDialog 添加到堆叠的小部件这一事实开始,但该教程中至少有十几个其他严重问题)。跨度>
@musicamante ye 它被点击了。连接
所以我知道我在调试 2 小时后做错了什么,我在比较 tut 和我的代码时发现了错误,唯一的区别是我输入了这个self.signupfun.clicked.connect(self.signup())
,它应该是这样的这个self.signupfun.clicked.connect(self.signup)
我仍然不知道为什么我是初学者,为什么在删除括号时代码有效?
【参考方案1】:
答案是将self.signupfun.clicked.connect(self.signup())
更改为self.signupfun.clicked.connect(self.signup)
it was clicked.connect() error
【讨论】:
问题是重复的,所以请不要添加答案,而是接受您帖子顶部的重复建议。请注意,您也不应该在答案中添加问题。请阅读How to Ask、How to Answer 并再次查看tour:*** 不是聊天或论坛,如果您只能编写一个,请避免编写多个 cmets(您可以编辑 cmets)。以上是关于PyQt5在进行任何交互时崩溃[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 7 中使用 cx_freeze 创建的可执行文件在其他计算机上运行时崩溃并出现有关 PyQt5 的错误