本文介绍了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:

<<<<<<<<<>>>>>

当我在 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-19 17:55