【问题标题】:Pycharm doesn't show error information for `PyQt5` program (e.g. `TypeError`)Pycharm 不显示“PyQt5”程序的错误信息(例如“TypeError”)
【发布时间】:2015-10-31 07:51:02
【问题描述】:

在 Pycharm 4.5.2 中,如果我在 PyQt5 插槽中出现错误,当调用插槽时,Pycharm 仅显示 Process finished with exit code 1,但不显示错误发生的位置和原因。当错误位于 __init__ 时不会发生这种情况。
这使得调试非常困难。我该如何解决这个问题?

此小部件由 Qt Designer 生成

例如,如果我在点击按钮时写了button.setText('a'+1):

# -*- coding: utf-8 -*-

import sys
from PyQt5 import Qt
from test import Ui_Form

Application = Qt.QApplication(sys.argv)

class myWidget(Qt.QWidget):
    def __init__(self):
        super(myWidget, self).__init__()
        self.main = Ui_Form()
        self.main.setupUi(self)
        # self.main.pushButton.setText('a'+1)
        # prints `TypeError: Can't convert 'int' object to str implicitly ` normally

        self.show()

        self.main.pushButton.clicked.connect(self.show_error)

    def show_error(self):
        self.main.pushButton.setText('a'+1)
        # only print "Process finished with exit code 1" when clicked on the button, and crash.


my_Qt_Program = myWidget()
my_Qt_Program.show()
sys.exit(Application.exec_())

它在 Windows 控制台中运行良好:

test.py(由Qt Designer生成):

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.5
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(115, 58)
        self.verticalLayout = QtWidgets.QVBoxLayout(Form)
        self.verticalLayout.setObjectName("verticalLayout")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "Show \'a\' +1"))

【问题讨论】:

标签: python pyqt pyqt5


【解决方案1】:

正如 cmets 中所指出的,并且确实在 pycharm thread 上提出了建议:

在您的运行配置中,启用选项Emulate terminal in output console。您可以在执行部分找到它。

运行您的示例

在我的机器(Windows 10,PyCharm Professional 2018.3.1)上,这改变了单击 show 'a' + 1 按钮时的行为,从退出代码 (-1073740791 (0xC0000409)) 退出到显示

Traceback (most recent call last):
  File "path/to/file/so.py", line 25, in show_error
    self.main.pushButton.setText('a' + 1)
TypeError: can only concatenate str (not "int") to str

为了运行你的例子,我不得不改变

from PyQt5 import Qt

进入

from PyQt5.QtWidgets import QApplication, QWidget

并相应地将Qt.Q... 调用更改为Q...,但这可能取决于我的设置。

【讨论】:

    【解决方案2】:

    也许不是你想要的,但这对我有用:

    import logging
    
    def main():
        x = 1/0
    
    if __name__ == '__main__':
        logging.basicConfig(level='INFO')
        main()
    

    编辑:如果您只有一个文件,上述方法有效,但不能解决问题的根源 可以在这里找到更好的答案PyQt: No error msg (traceback) on exit

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多