采用PYQT5编写界面,在获取界面中控件qtextedit用户输入值时程序退出?

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton,QVBoxLayout,QTextEdit,QMessageBox

class Windows(QWidget):
    def __init__(self):
        super(Windows,self).__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('数据程序---作者:****')
        self.setFixedSize(800,500)
        vbox=QVBoxLayout()
        label=QLabel()
        label.setText('内容:')
        label.setFixedWidth(800)
        label.setFixedHeight(20)
        vbox.addWidget(label)
        self.edit=QTextEdit()
        self.edit.setFixedWidth(780)
        self.edit.setFixedHeight(350)
        vbox.addWidget(self.edit)
        btn=QPushButton()
        btn.setStyleSheet("color:#fff;background-color:#409eff;border: 1px solid #409eff;border-radius: 10px;")
        btn.setFixedWidth(800)
        btn.setFixedHeight(50)

        btn.setText("点击")
        btn.setFixedWidth(780)
        btn.clicked.connect(self.btn_Click)
        vbox.addWidget(btn)


        self.setLayout(vbox)
    def btn_Click(self):
        txt=self.edit.toPlaintText()
        print(f'测试一下看什么问题。。。{txt}')
        QMessageBox.information(self,'消息对话框','测试!')

if __name__=="__main__":
    app=QApplication([])
    windows=Windows()
    windows.show()
    sys.exit(app.exec())

程序退出报出如下内容
进程已结束,退出代码为 -1073740791 (0xC0000409)
程序不能获取到textEdit控件输入内容,直接退出,不知道什么原因?

阅读 525
avatarAI BotBETA

根据提供的代码和错误信息,问题出在toPlaintText()方法的拼写错误。正确的方法应该是toPlainText()(少了一个字母"n")。这个拼写错误导致Python解释器无法找到对应的方法,从而引发程序崩溃。

错误原因分析

def btn_Click(self):
    txt = self.edit.toPlaintText()  # ❌ 错误拼写 (缺少字母"n")
    # 正确应为:self.edit.toPlainText()

修复后的代码

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayout, QTextEdit, QMessageBox

class Windows(QWidget):
    def __init__(self):
        super(Windows, self).__init__()
        self.initUI()
    
    def initUI(self):
        # ... [其余布局代码保持不变] ...
        
    def btn_Click(self):
        txt = self.edit.toPlainText()  # ✅ 修正拼写错误
        print(f'获取的文本内容:{txt}')
        QMessageBox.information(self, '消息对话框', f'成功获取{len(txt)}个字符')

if __name__ == "__main__":
    app = QApplication(sys.argv)  # 建议传入sys.argv
    windows = Windows()
    windows.show()
    sys.exit(app.exec())

关键修改说明:

  1. 修正方法名

    • toPlaintText()toPlainText()
    • 这是QTextEdit获取纯文本的标准方法
  2. 其他优化建议

    • QApplication([]) 改为 QApplication(sys.argv) 以支持命令行参数
    • 在消息框中显示实际获取的字符数,方便调试
    • 删除不必要的固定尺寸设置(如非必要)

错误代码退出原因:

当调用不存在的toPlaintText()方法时,Python会抛出AttributeError异常。由于PyQt的信号槽机制默认会捕获异常并终止程序,导致出现0xC0000409(STATUS_STACK_BUFFER_OVERRUN)错误代码。

⚠️ 注意:PyQt开发中建议使用try-except捕获异常,或在命令行运行程序查看完整错误堆栈。
1 个回答

找到原因了,具体查过过程以及修改方法如下:
第一:在方法btn_Click(self):中添加入方法查找原因:

try:
    txt=self.edit.toPlainText()
except Exception as e:
    print(f'错误原因:{e}')

得到具体原因:
错误提示为:出现错误'Windows' object has no attribute 'edit'
原因没有获取到界面控件qtextedit的内容
因此修改如下
在界面布局方法中修改为:

将 代码:    
                  edit=QTextEdit()
                  edit.setFixedWidth(780)
                  edit.setFixedHeight(350)
                  vbox.addWidget(edit)
改为:

        self.edit=QTextEdit()
        self.edit.setFixedWidth(780)
        self.edit.setFixedHeight(350)
        vbox.addWidget(self.edit)

运行成功
但是怪就怪在我之前的代码好像就是修改之后的代码,怎么之前运行就是不行,今天修改过来就可以了,遇到怪事了?!!!

推荐问题