簡體   English   中英

python:使用 PyCharm 和 PyQt5 時,進程以退出代碼 1 結束

[英]python: Process finished with exit code 1 when using PyCharm and PyQt5

我有三個 Python(3.4.3) 腳本。 其中之一是用於控制 PyQt5 生成的 .ui 文件。 當我運行 GUI 程序時,它接受所有數據和所有內容,當我按下 InputDialog 上的 OK 按鈕時,窗口關閉並顯示控制台。

Process finished with exit code 1

當我在 Python IDLE 上運行相同的代碼時,它顯示:

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

當我在 Visual Studio 上使用相同的 Python(3.4.3 或 2.7)代碼時,這從未發生過。 可能是什么原因?

這是控制 .ui 文件的 python 文件的代碼。

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_())

我處理過同樣的問題,答案是雙重的:

  1. 它崩潰的原因可能有很多。 這可能是一個編程錯誤,調用了一個不存在的函數,傳遞了一個小部件而不是布局,等等。但是由於您沒有獲得有用的輸出,您不知道在哪里尋找罪魁禍首。 這是由以下原因引起的:
  2. PyQT 引發並捕獲異常,但不傳遞它們。 相反,它只是以狀態 1 退出以顯示異常已被捕獲。

要捕獲異常,您需要覆蓋 sys 異常處理程序:

# 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 中。

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

我在pycharm、python 3.8、qt5中遇到了同樣的問題。 pycharm 中的 qt 錯誤從未顯示堆棧跟蹤; 從 cmd 運行文件時錯誤顯示正確。

我通過執行以下操作解決了問題:打開要運行的文件的編輯配置,向下滾動並選中Emulate terminal in output console框。

您使用過self.sender.setText(email)

在我看來,這可能是導致問題的原因,因為“發件人”是 QObject 函數中的名稱,它沒有任何 setText 屬性,因此可能存在問題。

您必須專門調用小部件並為其設置文本。 為此,您可以使用布局創建器的 py 文件實例。

我在嘗試使用此self.ui.lineEdit().text()時遇到了同樣的問題在這里,問題是 -> 我正在調用 lineEdit 函數,而我不得不使用它的一個屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM