PyQt5 QOpenGLWidget 空闲问题
PyQt5 QOpenGLWidget idle issue
我正在使用 PyQt5,但在使用 QOpenGLWidget 时遇到了一些困难。问题是在 QOpenGLWidget 中绘制任何东西的唯一方法是使用它的 paintGL() 方法,这似乎被破坏了。下面是发生的情况:程序启动后,小部件会自动刷新 4 次并停止。让它再次工作的唯一方法是更改活动 window(将其切换到终端或任何东西),然后它会绘制 2 个下一帧。将 window 切换回来 - 获取接下来的 2 帧 - 依此类推。有谁知道那里发生了什么?或者如何避免这个问题?
我通过创建一个默认绑定到 QOpenGLWidget.timerEvent()
方法的 BasicTimer
对象解决了这个问题。在运行每个计时器滴答的 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
我正在使用 PyQt5,但在使用 QOpenGLWidget 时遇到了一些困难。问题是在 QOpenGLWidget 中绘制任何东西的唯一方法是使用它的 paintGL() 方法,这似乎被破坏了。下面是发生的情况:程序启动后,小部件会自动刷新 4 次并停止。让它再次工作的唯一方法是更改活动 window(将其切换到终端或任何东西),然后它会绘制 2 个下一帧。将 window 切换回来 - 获取接下来的 2 帧 - 依此类推。有谁知道那里发生了什么?或者如何避免这个问题?
我通过创建一个默认绑定到 QOpenGLWidget.timerEvent()
方法的 BasicTimer
对象解决了这个问题。在运行每个计时器滴答的 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