You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5使用loadUi加载QtDesigner制作的UI后点击按钮崩溃如何解决

问题根因

你代码中唯一的致命错误是Register类的信号绑定语句多写了括号,导致绑定的是函数执行后的返回值,而非函数对象本身:

# 错误写法,会在Register类初始化时立即执行signup方法,而非点击按钮时触发
self.signupfun.clicked.connect(self.signup())

该错误会触发非法调用/栈溢出问题,对应你拿到的0xC0000409报错码。你用全局widget变量的写法虽不规范但不会直接导致崩溃。

修复方案

把Register类里的信号绑定语句去掉括号即可,同时可以优化全局变量调用逻辑避免后续出现内存泄漏问题,修复后完整代码如下:

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QDialog,QApplication
from PyQt5.uic import loadUi

class Login(QDialog):
    def __init__(self, stacked_widget):
        super(Login,self).__init__()
        self.stacked_widget = stacked_widget
        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(self.stacked_widget)
        self.stacked_widget.addWidget(reg)
        self.stacked_widget.setCurrentIndex(self.stacked_widget.currentIndex()+1)

class Register(QDialog):
    def __init__(self, stacked_widget):
        super(Register, self).__init__()
        self.stacked_widget = stacked_widget
        loadUi("Register.ui",self)
        # 去掉signup后的括号,绑定函数对象本身
        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(self.stacked_widget)
            self.stacked_widget.addWidget(login)
            self.stacked_widget.setCurrentIndex(self.stacked_widget.currentIndex()+1)
        else:
            print("Passwords doesn't Match")

if __name__ == '__main__':
    app=QApplication(sys.argv)
    widget=QtWidgets.QStackedWidget()
    window=Login(widget)
    widget.addWidget(window)
    widget.setFixedWidth(480)
    widget.setFixedHeight(620)
    widget.show()
    sys.exit(app.exec_())

内容的提问来源于stack exchange,提问作者hokage minato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:15:06