我正在使用PyQt5并且在使用QOpenGLWidget时遇到了一些困难。问题是在QOpenGLWidget中绘制任何东西的唯一方法是使用它的paintGL()方法,这似乎被打破了。这是发生的事情:一旦程序启动,小部件将自己刷新4次并停止。使其再次工作的唯一方法是更改活动窗口(将其切换到终端或任何东西),然后它绘制2个下一帧。切换窗口 - 接下来的2帧 - 依此类推。有谁知道那里发生了什么?或者也许如何避免这个问题?
答案 0 :(得分:1)
我通过创建BasicTimer
对象来解决问题,该对象与QOpenGLWidget.timerEvent()
方法相关。在运行每个计时器的timerEvent
方法中,我会调用update()
方法让窗口小部件自行刷新。这是一个代码片段,可以为您提供一个大致的想法:
from PyQt5.QtWidgets import QOpenGLWidget
from PyQt5.QtCore import QBasicTimer
class OpenGLWidget(QOpenGLWidget):
def __init__(self):
self._timer = QBasicTimer() # creating timer
self._timer.start(1000 / 60, self) # setting up timer ticks to 60 fps
def paintGL(self):
pass # some painting code here
def timerEvent(self, QTimerEvent):
self.update() # refreshing the widget