我正在使用PyQt5,并且使用QOpenGLWidget有一些困难。问题是,在QOpenGLWidget中绘制任何东西的唯一方法是使用它的paintGL()方法,这似乎是坏的。发生的事情是这样的:一旦程序启动,小部件恰好刷新4次并停止。让它再次工作的唯一方法是改变活动窗口(将其切换到终端或任何东西),然后它绘制2下一帧。将窗口切换回来-获得下一个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