waiting_redisplay = False def post_redisplay(): global waiting_redisplay if not waiting_redisplay: waiting_redisplay = True app.postEvent(app, QEvent(QEvent.UpdateRequest)) _event = app.event def event(event): global waiting_redisplay if event.type() == QEvent.UpdateRequest: waiting_redisplay = False redisplay() return True return _event(event) app.event = event # managing expose event device = None def expose_event(event): if not window.isExposed(): return global device gl_context.makeCurrent(window) if not device: device = QOpenGLPaintDevice() gl_prepare() device.setSize(window.size()) redisplay()