Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: PyQt5 widgets in QGridLayout 'leegmaken'  (gelezen 868 keer)

PyQt5 widgets in QGridLayout 'leegmaken'
« Gepost op: 2015/05/15, 20:29:48 »
Momenteel ben ik bezig met een eenvoudig puzzelspelletje in Qt5 met PyQt5 (in python dus). De puzzel bestaat uit een raster (QGridLayout zonder spacing). Elk vakje (QWidget) in het raster implementeert QWidget.paintEvent(). Als de gebruiker op een vakje klikt dan wordt update() aangeroepen op alle widgets in het QGridLayout om de paintEvents aan te roepen. Er ontstaat een probleem wanneer er een kleiner puzzelbord wordt geladen dan er al op het scherm stond. In dat geval blijven er 'artefacten' achter van het vorige bord (zie bijlage).

Wat is de handigste manier om eerst alle widgets in het raster te wissen voordat er een nieuwe puzzel wordt opgebouwd?

Re: PyQt5 widgets in QGridLayout 'leegmaken'
« Reactie #1 Gepost op: 2015/05/17, 15:43:33 »
Soort van opgelost. Voor het wissen van de inhoud van een widget is het voldoende om niets te doen tijdens het paintEvent. Voor het tekenen wordt de widget al leeggemaakt. Nu heb ik een variabele erased erbij gezet en als die op True staat wordt er niets gedaan in het paintEvent.

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: PyQt5 widgets in QGridLayout 'leegmaken'
« Reactie #2 Gepost op: 2015/05/31, 16:00:21 »
Lijkt me wel een correcte oplossing. Wat je zegt klopt inderdaad volgens de documentatie "When the paint event occurs, the update region has normally been erased, so you are painting on the widget's background." De details van implementatie zijn niet duidelijk, dus het is mij niet 100% duidelijk waar het probleem nu precies zit, maar als de QWidgets het enige zichtbare zijn en je overal paintEvent() oproept en niets tekent zouden ze inderdaad leeg moeten zijn (en zodoende enkel hun eigen achtergrondkleur hebben).

QML (ook onderdeel van Qt 5) is mogelijk wel een betere kandidaat voor dit soort spelletjes!
Daar kan je in de toekomst misschien eens mee experimenteren?
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)