__deets__ hat geschrieben: ↑Montag 18. Februar 2019, 16:35
Wie kommst du denn nun auf das schmale Brett, dass du ploetzlich die QApplication als *Argument* an ein QWindow uebergibst. Du hast doch funktionierende Qt-Anwendungen. Wird das da auch gemacht? Ich habe das auch nirgendwo erwaehnt, das du das machen sollst. Du musst eine Instanz der QApplication erstellen. So wie in JEDEM Qt-Programm. Die wiederum ueberall in irgendwelche Konstruktoren reinzuwerfen...
In manchen der Beispielprogramme wird `QApplication` als Argument übergeben. In anderen wieder nicht.
__deets__ hat geschrieben: ↑Montag 18. Februar 2019, 16:35
Und ja, Domaenen-Objekte sind die Objekte, die deine Anwendung konzeptionell darstellen. Adressen in einer Adressverwaltung zB. Oder eine FUNKTION (weil mehr brauchst du nicht), die einen BMI ausrechnet.
__blackjack__ hat geschrieben: ↑Montag 18. Februar 2019, 17:33
Und vor allem kann man diese Funktion dann auch komplett ohne GUI testen.
Den Aufwand, Qt zufrieden zu stellen, kann man sich mit einer Funktion schön sparen. Es kann so einfach sein mit einer Funktion.
__deets__ hat geschrieben: ↑Montag 18. Februar 2019, 16:35
Last but not least zu Frage 1: ich habe nichts zur Erstellung von kleinen Klassen gesagt. Ich habe etwas zur Vermengung von Anwendungslogik und Darstellungslogik gesagt.
Weil du nichts zur Erstellung kleiner Klassen geschrieben hast, um Anwendungslogik und GUI immer zu trennen, habe ich explizit danach gefragt.
In "test_bmi.py" habe ich noch einen weiteren Fehler entdeckt. Für den pytest wurde "main" importiert, obwohl die Datei "bmi.py" heißt. Ohne den für Qt notwendigen Code ist die Datei auch stark zusammengeschrumpft. Der Test funktioniert jetzt problemlos.
test_bmi.py
Code: Alles auswählen
import bmi
def test_bmi_main_window():
assert bmi.calculate_bmi(180, 80) == 24.691358024691358
bmi.py
Code: Alles auswählen
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi
def calculate_bmi(size, weight):
return weight / (size / 100) ** 2
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
loadUi("bmi.ui", self)
self._write_size()
self._write_weight()
self._write_bmi()
self.horizontalSlider_size.sliderMoved.connect(self._write_bmi)
self.horizontalSlider_size.sliderMoved.connect(self._write_size)
self.horizontalSlider_weight.sliderMoved.connect(self._write_bmi)
self.horizontalSlider_weight.sliderMoved.connect(self._write_weight)
@property
def _size(self):
return self.horizontalSlider_size.value()
@property
def _weight(self):
return self.horizontalSlider_weight.value()
def _write_size(self):
self.output_size.setText(f"{self._size} cm")
def _write_weight(self):
self.output_weight.setText(f"{self._weight} kg")
def _write_bmi(self):
BMI = calculate_bmi(self._size, self._weight)
self.output_BMI.setText(str(round(BMI, 2)))
def main():
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Gruß
Atalanttore