[Python] PyQt, QGraphicsTextItem con margine e segfault

Alessandro Re ale a ale-re.net
Mar 9 Feb 2016 03:20:23 CET


Ciao lista :)
Volevo postare su SO, ma so che qui ci sono dei bravi pythonisti che
mangiano PyQt la mattina a colazione e quindi ho pensato di rallegrare
un po' l'atmosfera facendo una domandina a riguardo.

L'idea è questa: vorrei avere una scena con dei QGraphicsTextItem,
solo che vorrei mettere attorno al testo un pochino di margine. Per
vari motivi, voglio creare una nuova classe che se ne occupi.

Per mettere i margini, il mio codice fa così: reimplemento
boundingRect(), chiamo super().boundingRect() e ci aggiungo un po' di
margine.
Poi, mi basta disegnare quello stesso rettangolo dentro la paint(),
prima di invocare super().paint().

Fin qui, tutto liscio: il bordo viene disegnato senza apparenti problemi.

Poi però ho provato ad aggiungere la possibilità di spostare gli
elementi col mouse, e questo richiede di implementare shape(). La mia
implementazione dovrebbe fare più o meno come quella di default: uso
il boundingRect() (inclusivo di margini).

Ecco il problema: quando provo a trascinare uno StyledItem che *non
contiene testo*, va in segfault. Se invece l'item ha un testo, allora
funziona come mi aspetto.

Non riesco a capire dove sta il problema. Qualcuno mi aiuta (e mi da
qualche dritta su come affrontare il debug in futuri casi come
questo)?

Per non inquinare la mail di codice mal formattato, un minimal working
example lo trovate
[qui](https://gist.github.com/akiross/e7a6119a7e622bed9477).

BTW, Python 3.4.2, PyQt (QT_VERSION_STRING) 5.5.1.

Grazie mille in anticipo!
~Ale


Maggiori informazioni sulla lista Python