PyQt5 - 关闭应用程序 bec。 .value() 方法的错误[重复]

Posted

技术标签:

【中文标题】PyQt5 - 关闭应用程序 bec。 .value() 方法的错误[重复]【英文标题】:PyQt5 - closes application bec. of error with .value() method [duplicate] 【发布时间】:2018-10-24 17:43:15 【问题描述】:

每当我在我的 PyQt5 应用程序的第二个窗口中单击一个按钮时,该按钮应该只在 GUI 中打印 QDateEdit 的值,它会以以下行关闭:“进程以退出代码 -1073740791 (0xC0000409) 完成”。我发现问题与 .value() 方法有关。下面是使用 Ui_Form 类重现该错误的最小方法:

import sys
from PyQt5 import QtWidgets
from ui.fenster import Ui_Form


app = QtWidgets.QApplication(sys.argv)

class AppendWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.ui.submit.clicked.connect(self.show_value)


    def show_value(self):
        print(self.ui.date.value())






append = AppendWindow()

append.show()
sys.exit(app.exec_())

Ui_Form:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(413, 215)
        self.date = QtWidgets.QDateEdit(Form)
        self.date.setGeometry(QtCore.QRect(72, 26, 321, 20))
        self.date.setObjectName("date")
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(9, 26, 57, 16))
        self.label.setObjectName("label")
        self.age = QtWidgets.QSpinBox(Form)
        self.age.setGeometry(QtCore.QRect(70, 120, 321, 20))
        self.age.setObjectName("age")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(10, 120, 23, 16))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(9, 69, 27, 16))
        self.label_3.setObjectName("label_3")
        self.name = QtWidgets.QPlainTextEdit(Form)
        self.name.setGeometry(QtCore.QRect(72, 69, 319, 21))
        self.name.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.name.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.name.setObjectName("name")
        self.submit = QtWidgets.QPushButton(Form)
        self.submit.setGeometry(QtCore.QRect(170, 170, 75, 23))
        self.submit.setObjectName("submit")

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "Geburtsjahr"))
        self.label_2.setText(_translate("Form", "Alter"))
        self.label_3.setText(_translate("Form", "Name"))
        self.submit.setText(_translate("Form", "Absenden!"))

有谁知道如何解决这个问题? 感谢您的帮助!

【问题讨论】:

请提供minimal reproducible example,分享Ui_Form类。 QPlainTextEdit 没有 value() 方法,因此它会抛出该错误,如果要获取文本,则必须使用 toPlainText()。改为print(self.ui.name.toPlainText()) 谢谢,这解决了 QPlainTextEdit 的问题,但我还需要获取 QDateEdit 的值。是不是也没有 value() 方法? doc.qt.io/qt-5/qdatetimeedit.html#dateTime-prop : print(self.ui.date.dateTime().toString()),请阅读文档。 好的,非常感谢!!我想我现在自己想通了。 【参考方案1】:

您需要在主代码中添加app.exec() 才能启动主循环。

app = QtWidgets.QApplication(sys.argv)
app.exec()

主循环处理所有传入事件并将它们传递给您的 GUI 元素。

【讨论】:

不知道为什么,但这会导致程序一开始就没有打开 GUI。

以上是关于PyQt5 - 关闭应用程序 bec。 .value() 方法的错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我想在应用程序关闭时保存 PyQt5 设置

为啥在 PyQt5 中打开新窗口时我的应用程序会关闭?

如何在 PyQt5 中正确显示图片? [关闭]

如何要求用户在 Pyqt5 中输入图像 [关闭]

如何在循环中打开(和关闭)PyQt5 应用程序,并让该循环多次运行

如何在不关闭 GUI 窗口的情况下停止运行 PyQt5 程序?