ReadMe

Bauplan Fenster mit PyQt6 – wie ich Schritt für Schritt eine Desktop-App gebaut habe!

Zurück

Mal ehrlich: Wer heute noch jede Zeile GUI-Code komplett selbst aus dem Nichts schreibt, macht sich das Leben unnötig schwer. Für so ziemlich jedes Problem gibt es längst eine Bibliothek, die die Drecksarbeit übernimmt. In meinem Fall waren das **PyQt6** für die Oberfläche und **Matplotlib** fürs Plotten – zwei Schwergewichte, die seit Jahren im professionellen Python-Umfeld ihren Dienst tun.

Lass mich dir ein kleines Geheimnis verraten: In der modernen Python-Welt ist das Erfinden des Rades nicht nur unnötig – es ist schlichtweg illegal! (Okay, nicht wirklich illegal, aber die Python-Community schüttelt leise den Kopf).

Früher war Programmieren irgendwie wie der Bau einer Ritterburg. Ein echter Programmierer hat jeden Stein selbst behauen, jeden Balken selbst gesägt und natürlich auch noch den Burggraben eigenhändig ausgehoben. Wer fertige Bausteine benutzt hat, wurde mit skeptischen Blicken bedacht – nach dem Motto: “Das ist doch geschummelt!”

Heute ist Python eher wie ein riesiger Werkzeugkasten. Niemand kommt auf die Idee, erst einen Hammer zu schmieden, bevor er einen Nagel einschlägt. Man nimmt einfach den Hammer, der schon da ist. Genau dafür gibt es Bibliotheken und Frameworks.

Python lebt von seinem gigantischen Ökosystem. Bibliotheken wie NumPy, Pandas, Matplotlib, PyQt6, SciPy oder Requests sind nicht deshalb so beliebt, weil Programmierer faul geworden sind. Sie existieren, weil Tausende Entwickler über viele Jahre ihr Wissen darin gebündelt haben. Es wäre fast schon unhöflich, all diese Arbeit zu ignorieren und alles noch einmal neu zu erfinden.

Nehmen wir einmal PyQt6. Natürlich könnte man versuchen, sämtliche Fenster, Buttons, Menüs und Ereignisbehandlungen selbst zu programmieren. Man könnte vermutlich auch sein eigenes Betriebssystem schreiben – aber warum sollte man? Oder Matplotlib. Natürlich könnte man jeden einzelnen Pixel berechnen, Achsen zeichnen, Beschriftungen platzieren, Zoom-Funktionen entwickeln und Kurven Punkt für Punkt malen. Nach ungefähr drei Jahren hätte man dann vielleicht den ersten brauchbaren Plot.

Das Problem ist aber nie "kenne ich die Bibliothek", sondern "kriege ich die Bibliotheken dazu, vernünftig miteinander zu reden". Ein paar Beispiele, über die man früher oder später stolpert:

- `QWidget` reicht für ein einfaches Formular, aber sobald man eine Menüleiste will, braucht man plötzlich `QMainWindow` und `setCentralWidget()` statt `setLayout()` – eine Falle, in die ich ohne Erklärung sicher reingelaufen wäre.
- Matplotlib-Plot lässt sich nicht einfach "reinkopieren". Man braucht `FigureCanvasQTAgg` als Brücke zwischen Matplotlib- `Figure` und Qt-Widget-Baum, und dann noch `canvas.draw()` nach jedem Update, sonst bleibt der alte Plot stehen.
- `QAction` liegt in PyQt6 plötzlich in `QtGui` statt in `QtWidgets` – so eine kleine Verschiebung zwischen PyQt5 und PyQt6, die einen sonst zehn Minuten Kopfkratzen kostet.
- Ein `QDialog` erbt das Stylesheet des Hauptfensters **nicht** automatisch, weil er technisch ein eigenständiges Top-Level-Fenster ist – auch wenn man ihm brav einen `parent` mitgibt.

Es tauchen viele Fragen auf! Würdest du nun versuchen, die vielen Fragen mit "Stichwörtern" in die Suchleiste des Browsers einzugeben, um all die Informationen dem Internet zu entlocken, fühlst du dich im unübersichtlichen Irrgarten, zu dem das Internet geworden ist, du bräuchtest dafür buchstäblich eine Ewigkeit. Es hat sich aber was geändert! Man gibt in das Suchfeld von Google Chrome nicht mehr ein Suchwort ein! Man formuliert mehrere Sätze und Fragen – schon schaltet sich KI ein!

Genau bei diesen Nahtstellen kam KI ins Spiel. Wir haben das Ganze nicht als fertigen Code-Dump abgearbeitet, sondern in klar abgegrenzten Phasen aufgebaut: erst das Grundgerüst mit Eingabefeldern und Signal/Slot-Verbindung für den Button, dann Fenstergrößen und Bildschirm-Zentrierung, danach Styling über QSS (Qt Style Sheets – im Prinzip CSS für Qt-Widgets), anschließend der eingebettete Matplotlib-Plot mit Nullstellen und Scheitelpunkt, und zum Schluss eine echte Menüleiste samt About-Dialog mit klickbarem Link.

Jede Phase kam mit einer Erklärung, *warum* etwas so und nicht anders gemacht wird – nicht nur "hier ist der Code, kopier ihn", sondern auch, welche Stolperfallen es gibt und wie die einzelnen Teile technisch ineinandergreifen. Das ist am Ende der eigentliche Mehrwert: Man bekommt nicht nur eine funktionierende App, sondern versteht auch, warum sie funktioniert – und kann beim nächsten Projekt selbst weitermachen, ohne bei jedem Widget wieder bei null anzufangen.

Für mich war das definitiv keine Einbahnstraße "KI schreibt, ich klicke Kopieren". Eher ein Pair-Programming-Partner, der genau da einspringt, wo die Doku entweder zu knapp oder zu unübersichtlich ist – und der einem die vielen kleinen, undokumentierten Fallstricke zwischen den Bibliotheken erspart.



Zurück