Ich habe den Übergang von PyQt4
zu PyQt5
gemacht. Meine App (erstellt mit QtDesigner) hat ein Kontrollkästchen, das eine Schaltfläche "Speichern" aktiviert, falls Sie Ihre Datei speichern möchten. Unter PyQt4
würde sich der Dialog öffnen, ich würde meine Datei wählen, OK drücken, fertig. Ich habe eine Überprüfung der OK-Schaltfläche der Hauptanwendung implementiert, die einen Fehler verursachen würde, wenn der Pfad ungültig wäre, z. wenn Sie Abbrechen in QFileDialog
gedrückt haben.Drücken der Taste im QFileDialog-Popup beendet die Anwendung
Mit PyQt5
meine Anwendung beendet vollständig, wenn ich die QFileDialog
in irgendeiner Weise schließen (OK, Abbrechen, X). Ich möchte nur den QFileDialog schließen und nicht mein Hauptfenster. Wie mache ich das? Danke für deine Zeit und Hilfe.
Hier ist der relevante Teil meines Code:
self.path = self.ui.savepathButton.pressed.connect(lambda: self.file_save())
def file_save(self):
path = QFileDialog.getSaveFileName(self, "Choose a path and filename", os.getcwd().replace("\\", "/") +
"/test.stl", filter="Stereolithography Files (*.stl)")
self.ui.savepath_label.setText(path) <------ NO ERROR WITHOUT THIS LINE
def OKButton_click(self):
if os.path.isdir(os.path.split(self.ui.savepath_label.text())[0]) is False:
# Warning if the filename is invalid.
file_error = QMessageBox()
file_error.setIcon(QMessageBox.Warning)
file_error.setText("Invalid path or filename.")
file_error.setInformativeText("Please choose a working path and filename.") file_error.setWindowTitle("File name error")
file_error.setStandardButtons(QMessageBox.Ok)
file_error.exec_()
else:
self.accept()
Edit:
Ich weiß, wo mein Fehler liegt, aber ich kann es immer noch nicht beheben. Ich habe die Zeile im Code markiert. Warum beendet self.ui.savepath_label.setText(path)
meine Anwendung?
Nachdem ich die Problemumgehung mit 'str()' gefunden habe, bemerkte ich, dass es tatsächlich ein Tupel zurückgeben würde und im Wesentlichen das tat, was Sie in Ihrer Antwort so gut erklärt haben. Danke für deinen sehr aufschlussreichen Post! – Ian