python:使用 PyCharm 和 PyQt5 时,进程以退出代码 1 结束 [英] python: Process finished with exit code 1 when using PyCharm and PyQt5

查看:26
本文介绍了python:使用 PyCharm 和 PyQt5 时,进程以退出代码 1 结束的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有三个 Python(3.4.3) 脚本.其中之一是用于控制 PyQt5 生成的 .ui 文件.当我运行 GUI 程序时,它接受所有数据和所有内容,当我按下 InputDialog 上的 OK 按钮时,窗口关闭并显示控制台.

I have three Python(3.4.3) scripts. One of them is for controlling the .ui file generated by PyQt5. When I run the GUI program it accepts all the data and everything and when I press the OK button on an InputDialog the window closes and the console displays.

进程以退出代码 1 结束

当我在 Python IDLE 上运行相同的代码时,它显示:

When I run the same code on Python IDLE, it shows:

<<<<<<RESTART>>>>>>

当我在 Visual Studio 上使用相同的 Python(3.4.3 或 2.7)代码时,这种情况从未发生过.可能是什么原因?

This never happenned when I used this same Python(3.4.3 or 2.7) code on Visual Studio. What could be the reason?

这是控制.ui文件的python文件的代码.

Here is the code of the python file controlling the .ui file.

import sys
from PyQt5 import QtCore, QtGui, uic, QtWidgets
from Email import encrypt_email
from Email import decrypt_email
from Email import newuser

qtCreatorFile = "rsegui.ui" # Enter file here.

Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)

class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        user, ok = QtWidgets.QInputDialog.getText(self, 'New User', 
    'Are you a new user?')
        user=str(user)
        if user in "YESYesyesYy":
            email, ok = QtWidgets.QInputDialog.getText(self, 'New User', 
    'Enter Your Email ID:')
            email1=str(email)
            self.sender.setText(email)
            newuser(email1)

    self.encrypt_and_send.clicked.connect(self.EncryptEmail)
    self.decrypt.clicked.connect(self.DecryptEmail)
    self.clear.clicked.connect(self.ClearEncrypt)
    self.clear_2.clicked.connect(self.ClearDecrypt)
    self.sender.setPlaceholderText("Your Email ID")
    self.receiver.setPlaceholderText("Receivers, Separate them by ';'")
    self.subject.setPlaceholderText("Enter Subject")
    self.message.setPlaceholderText("Enter Message")
    self.sender_2.setPlaceholderText("Your Email ID")
    self.message_2.setPlaceholderText("Encrypted Text")



    def EncryptEmail(self):
       sender = str(self.sender.text())
       receiver = str(self.receiver.text())
       receivers = receiver.split(';')
       subject = str(self.subject.text())
       message = str(self.message.text())
       password, ok = QtWidgets.QInputDialog.getText(self, 'Password', 
'Enter your password:',QtWidgets.QLineEdit.Password)
       encrypt_email(sender,receivers,subject,message,password)

    def DecryptEmail(self):
       email = str(self.sender_2.text())
       message = str(self.message_2.text())
       self.decrypted.setText(decrypt_email(email,message))

    def ClearDecrypt(self):
       self.sender_2.clear()
       self.message_2.clear()

    def ClearEncrypt(self):
       self.sender.clear()
       self.message.clear()
       self.receiver.clear()
       self.subject.clear()

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())

推荐答案

我也处理过同样的问题,答案是双重的:

I have dealt with the same problem, and the answer is twofold:

  1. 崩溃的原因可能有很多.这可能是一个编程错误,调用一个不存在的函数,传递一个小部件而不是布局等.但是由于您没有得到有用的输出,您不知道在哪里寻找罪魁祸首.这是由于:
  2. PyQT 引发并捕获异常,但不会传递它们.相反,它只是以状态 1 退出以显示捕获到异常.

要捕获异常,您需要覆盖 sys 异常处理程序:

To catch the exceptions, you need to overwrite the sys exception handler:

# Back up the reference to the exceptionhook
sys._excepthook = sys.excepthook

def my_exception_hook(exctype, value, traceback):
    # Print the error and traceback
    print(exctype, value, traceback)
    # Call the normal Exception hook after
    sys._excepthook(exctype, value, traceback)
    sys.exit(1)

# Set the exception hook to our wrapping function
sys.excepthook = my_exception_hook

然后在您的执行代码中,将其包装在 try/catch 中.

Then in your execution code, wrap it in a try/catch.

try:
    sys.exit(app.exec_())
except:
    print("Exiting")

这篇关于python:使用 PyCharm 和 PyQt5 时,进程以退出代码 1 结束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆