3つのPython(3.4.3)スクリプトがあります。それらの1つは、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_())
私は同じ問題に対処しましたが、答えは2つあります。
例外をキャッチするには、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")
self.sender.setText(email)
を使用しました
「送信者」はQObjectの関数内の名前であり、setText属性がないため、問題がある可能性があるため、これはおそらく私の問題の原因です。
具体的にはウィジェットを呼び出し、それにウィジェットを設定する必要があります。これには、レイアウト作成者のpyファイルのインスタンスを使用できます。
これを使用しようとしたときに同じ問題が発生しましたself.ui.lineEdit().text()
ここでの問題は、-> lineEdit関数を呼び出すことでしたが、1つの属性を使用する必要がありました。