我有三个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_())
答案 0 :(得分:17)
我处理过同样的问题,答案是双重的:
要捕获异常,您需要覆盖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")
答案 1 :(得分:0)
您已使用self.sender.setText(email)
在我看来,这可能是导致问题的原因,因为“发件人”是QObject函数中的名称,它没有任何setText属性,因此可能有问题。
您必须专门调用该小部件并对其设置setText。 为此,您可以使用布局创建器的py文件的实例。
当我尝试使用此self.ui.lineEdit().text()
时遇到了相同的问题
在这里,问题是->我正在调用lineEdit函数,而我不得不使用它的一个属性。
答案 2 :(得分:0)
我在pycharm,python 3.8,qt5中遇到了相同的问题。 pycharm中的qt错误从未显示stacktrace;从cmd运行文件,错误会正确显示。
我通过执行以下操作解决了: 打开要运行的文件的 Edit Configurations ,向下滚动并选中在输出控制台中仿真终端框。