@Gironimo: Wo liegt denn das Problem? Die Funktion hat im einfachsten Fall nur ein Argument – den Dateinamen, und liefert dann die GUI aus der Datei als Rückgabewert. Also wenn in der *.ui-Datei ein `QDialog` mit Inhalt definiert ist, bekommt man ein `QDialog`-Exemplar zurück geliefert. Und das hat die ganzen Namen die man für die Widgets darin im Designer festgelegt hat als Attribute. Also in Deinem Fall `exitButton`, `buttonFlaschenrechner`, `inputAnzahl1L`, und so weiter.
Alternativ kann man als zweites Argument, neben dem Dateinamen auch ein Objekt angeben das für die oberste Ebene verwendet werden soll. Das muss dann vom gleichen Typ sein wie die Wurzel in der *.ui-Datei, also `QDialog` und dann werden auch auf *dem* Objekt all die Attribute für die einzelnen Teile gesetzt. Dann sollte man den Rückgabewert ignorieren, denn sonst hat man zwei verschiedene Wege um an die gleichen Werte zu kommen, was verwirrend und überflüssig ist.
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)
dialog = loadUi('Sudhausrechner.ui')
dialog.exitButton.clicked.connect(dialog.close)
# ...
dialog.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Hierbei muss das Arbeitsverzeichnis das sein wo auch die ui-Datei liegt, ansonsten muss man mit dem Wert von `__file__` und den Funktionen aus `os.path` einen relativ zum Modul basteln. Und für eine sinnvolle Anwendung wird man eine Klasse schreiben wenn man nicht mit `functools.partial()` das `QDialog`-Objekt an die Rückruffunktionen für die Berechnungen binden möchte.
Alternative:
Code: Alles auswählen
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QApplication, QDialog
from PyQt5.uic import loadUi
class SudhausrechnerUi(QDialog):
def __init__(self):
QDialog.__init__(self)
loadUi('Sudhausrechner.ui', self)
self.exitButton.clicked.connect(self.close)
# ...
def main():
app = QApplication(sys.argv)
gui = SudhausrechnerUi()
gui.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()