@caargoo: Gar keine davon würde ich sagen. Einfach das Fenster schliessen wäre der normale Weg, denn die Voreinstellung bei `QApplication` ist das die Hauptschleife beendet wird sobald das letzte Fenster der Anwendung geschlossen wurde.
Am falschesten sind `quit()` und `exit()` denn das gibt es gar nicht. Die sind nicht dokumentiert und existieren nur weil die Python-Entwickler zu ”faul” waren sauberer zwischen einer interaktiven Python-Shell und einem Programm zu unterscheiden.
`sys.exit()` sollte man nicht verwenden, weil das das Programm an der Stelle tatsächlich beendet. Man kann dann keinen Code mehr haben der entweder nach dem Ende der GUI-Hauptschleife ausgeführt wird, beispielsweise um Aufräumarbeiten durchzuführen, noch kann man die Möglichkeit von Qt nutzen an der Stelle Code laufen zu lassen der gegen das Programmende noch ein Veto einlegen kann. Üblich beispielsweise bei ”Editoren” jedweder Art die Nachfrage bei veränderten und ungesicherten Daten, ob man das Programm wirklich beenden will, oder vielleicht doch lieber erst die Änderungen speichern möchte.
Weitere Anmerkungen: Sternchen-Importe sind Böse™. Das macht Programme unnötig unübersichtlicher und fehleranfälliger und es besteht die Gefahr von Namenskollisionen. Es wird auch überhaupt nichts davon in dem Programm benötigt.
``as`` beim Import ist zum Umbenennen. `uic` wird aber gar nicht umbenannt.
Namen sollte man nicht kryptisch abkürzen. Statt `QtWidgets` als `wid` zu importieren würde man hier besser einfach `QApplication` explizit importieren.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Für alle vier Varianten ist die `prog_ende()`-Funktion überflüssig weil die ja nur wieder einfach nur ein anderes aufrufbares Objekt aufruft. Da kann man auch gleich *das* Objekt beim `connect()` übergeben.
`exec_()` wird es in PyQt6 nicht mehr geben und `exec` ist in Python 3 kein Schlüsselwort mehr, also sollte man den Unterstrich weglassen.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.uic import loadUi
def main():
app = QApplication(sys.argv)
window = loadUi("endeui.ui")
window.beenden.clicked.connect(window.close)
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()