Okay, das hier soll einfach mal dazu dienen, ein bisschen Dampf abzulassen:

Vorgeschichte

Ich bastel gerade daran, mit Qt eine grafische Oberfläche für eins meiner Programme zu stricken. Das Design der Oberfläche in dem Editor läuft angenehm intuitiv und wenn man vorher schonmal mit dem Visual Studio von Microsoft Windows Forms oder mit dem GUI-Designer von Netbeans gearbeitet hat, dann findet man sich sehr schnell zurecht. Natürlich hat auch Qt einen etwas eigenen Ansatz, Schaltflächen zu positionieren, aber er ergibt zumindest Sinn und man kann sich darauf einstellen.

Nun gilt es anschließend die in XML generierte Oberfläche (.ui-Datei) für den eigentlichen Programmcode in Python verfügbar zu machen, damit das ganze tolle Rumgeklicke auch überhaupt etwas bringt. Ich habe mich dazu entschlossen pyuic5 zu verwenden, das mir mittels eines einfachen Shellkommandos aus meiner .ui-Datei ein Python-Skript generiert, welches ich anschließend in meinem Programmcode referenzieren kann.

O P T I M I E R U N G

Anmerkung am Rande: damit das alles ein bisschen intuitiver funktioniert und weil ich gern Arbeitsabläufe optimiere, habe mich mir ein Skript geschrieben, das erst die übergebene Datei im QtCreator zur Bearbeitung öffnet und (nachdem dieser wieder geschlossen wurde) automatisch in eine Python-Datei umwandelt:

#!/bin/bash
qtcreator "$1"
newfilename=$(python3 -c "
import sys
print(sys.argv[1].split('.')[0] + '.py')

" "$1")
pyuic5 "$1" -o "$newfilename"
#echo "$newfilename"

Jaja, ich weiß, das wäre bestimmt auch rein mit shell-Kommandos gegangen, aber eins nach dem anderen. Erstmal bringe ich mir Python bei.

Das Problem

Ooookay. Wie dem auch sei- das funktioniert alles ganz hervorragend. Bis ich schließlich versuche Events aus der Oberfläche (wie das Klicken eines Buttons), in Qt nennt sich das dann übrigens "Signale", mit Funktionen in meinem Quellcode (in Qt: "Slots") zu verbinden: dann geht alles total den Bach runter.

Das Problem: nach EINIGER intitialer Verwirrung, beginne ich zu verstehen, dass pyuic5 automatisch einen Aufuf der Funktion connectSlotsByName einbaut; einer Funktion, die - i kid you not - automatisch meinen Code abgrast, um Slots für Signale zu finden... und das anhand der Namensgebung! Also welcher Vollidiot jemals auf die Idee gekommen ist, diese Scheiße einzubauen UND dann auch noch per default einzuschalten, gehört geohrfeigt.

Vollidioten. Überall.

Wenn ich mich als Programmierer nicht mehr darauf verlassen kann, dass mein Code das - und NUR das - tut, was ich explizit durch Befehle fordere, dann kann man sich die ganze Scheiße auch sparen und sich gleich an den See legen. Denn die ganze Zeit, die man dafür aufwendet, durch solche Scheiße verursachtes Fehlverhalten ausfindig zu machen, ist die Mühe einfach nicht wert.

WIE man darauf kam, dass dieses "magic behaviour" - und ja, solche Formulierung findet man tatsächlich in zahlreichen Posts zu dem Thema - eine gute Idee sein könnte, ist mir vollkommen schleierhaft. Soviel Cool Aid kann man gar nicht saufen.

So- Rant vorbei. Jetzt wird weiter am UI gebastelt. Hoffentlich treffe ich nicht weitere Überraschungen solcher Art.