Hallo,
That's it !
BlackJack hat geschrieben:...Es werden ja nirgends die Aussmasse des `QPixmap`-Exemplars gesetzt.
Und wenn man mal in die Qt-Dokumentation schaut was der `QPixmap`-Konstruktur macht wenn man nichts übergibt, dann steht dort „Constructs a null pixmap.” und es wird auf die `isNull()`-Methode verwiesen in der steht was das bedeutet: „A null pixmap has zero width, zero height and no contents. You cannot draw in a null pixmap.”. Gleich unter dem Kontruktor ohne Argumente steht in der Dokumentation einer der zwei Ganzzahlwerte als Argumente nimmt die `width` und `height` heissen.
Das war genau das, was ich einfach nirgendwo gefunden hatte. QPixmap wird immer für fertige Images beschrieben, die ja schon eine Größe haben.
Das hier in der Klassenreferenz
QPixmap.__init__ (self, int w, int h)
QPixmap.__init__ (self, QSize)
See also isNull().
hatte ich schlicht und ergreifend nicht gesehen ! (zu viel Wald, wo sind hier die Bäume ?

) Einen isNull()-Fehler hatte ich ja auch immer bekommen.
BlackJack hat geschrieben:Warum bekommt `paint_grid()` den `QPainter` als Argument übergeben?
`QPainter` hat keine `draw_line()`-Methode, die heisst `drawLine()`.
Da hast Du recht ! Ich hatte mein mittlerweile Test-Programm nicht gewissenhaft genug heruntergekürzt. war wohl auch schon etwas übermüdet ! Sorry !
BlackJack hat geschrieben:Man sollte das `QPainter`-Objekt auch nicht zu lange existieren lassen sonst bekommt man später Probleme mit dem Programmende. Solange nämlich der Painter noch zugriff auf das Pixmap-Exemplar hat, kann das nicht freigegeben werden ...
Guter Tip ! Würde ich normalerweise auch nicht so machen, wird ja schleisslich auch im "Haupt-Thread" angenagelt.
BlackJack hat geschrieben:Wenn die Pixmap schon in einem Label dargestellt wird, muss man sie nicht noch mal selbst auf das Widget malen, beziehungsweise sollte man das nicht, denn damit übermalt man ja das Label.
Also reicht es, wenn man das Pixmap dem Label zuweist und man muss es nicht explizit in einer überschriebenen paintEvent()-Methode darstellen. Verstanden !
BlackJack hat geschrieben:Die Fenstergeometrie und das platzieren von Widgets sollte man nicht von Hand festlegen sondern Layout Manager verwenden. Besonders wenn man GUIs verändert oder erweitert würde das sonst viel unnötige Handarbeit nach sich ziehen.
Das denke ich mal. Deshalb ordne ich die Komponenten im Qt-Designer in Layouts an, auch die geplanten Widgets mit Zeichnungen.
BlackJack hat geschrieben:Der `show()`-Aufruf in der Widget-`__init__()` ist doppelt weil in der `main()`-Funktion noch mal diese Methode aufgerufen wird. Keines der vorhandenen Widgets `show()`\t sich selbst, also sollte der Aufruf in der `__init__()` verschwinden.
Ist auch klar ! Hatte mich schon gewundert, dass der paintEvent immer zweimal ausgelöst wird.
BlackJack hat geschrieben:Nochmal zur PyQt-Dokumentation: Die reicht nicht, denn die beschreibt nur wie die Qt-Konstrukte auf Python abgebildet werden und die Unterschiede zur Qt-Dokumentation. Man muss auch für Python die Qt-Dokumentation für C++ lesen.
Deshalb tendiere ich ja auch immer wieder dazu, doch noch C++ zu lernen, eben weil PyQt die C++-Routinen von Qt lediglich "verscriptet". Trotz meiner C- und Java-Kenntnisse bekomme ich aber beim Anblick von C++-Code immer die Krise !
Danke jedenfalls für das "Auf-die-Sprünge-Helfen" ! Vielleicht sehe ich immer alles einfach viel zu kompliziert
Grüße
mephisto-online