J'ai trois scripts Python (3.4.3). L'un d'eux est pour contrôler le fichier .ui généré par PyQt5. Lorsque j'exécute le programme GUI, il accepte toutes les données et tout et lorsque j'appuie sur le bouton OK d'un InputDialog, la fenêtre se ferme et la console s'affiche.
Process finished with exit code 1
Lorsque j'exécute le même code sur Python IDLE, cela montre:
<<<<<<RESTART>>>>>>
Cela ne s'est jamais produit lorsque j'ai utilisé ce même code Python (3.4.3 ou 2.7) sur Visual Studio. Quelle pourrait être la raison?
Voici le code du fichier python contrôlant le fichier .ui.
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_())
J'ai traité le même problème et la réponse est double:
Pour intercepter les exceptions, vous devez remplacer le gestionnaire d'exceptions 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
Ensuite, dans votre code d'exécution, enveloppez-le dans un try/catch.
try:
sys.exit(app.exec_())
except:
print("Exiting")
Vous avez utilisé self.sender.setText(email)
À mon avis, cela cause probablement le problème car, "expéditeur" est le nom dans la fonction de QObject et il n'a pas d'attribut setText, donc il peut y avoir le problème.
Vous devez appeler spécifiquement le widget et y définir Text. Pour cela, vous pouvez utiliser des instances du fichier py du créateur de mise en page.
J'ai eu le même problème lorsque j'essayais d'utiliser cette self.ui.lineEdit().text()
Ici, le problème était -> J'appelais la fonction lineEdit, alors que je devais utiliser c'est un attribut.