Python PyQt5 QOpenGLWidget空闲问题
我正在使用PyQt5,在使用QOpenGLWidget时遇到了一些困难。问题是,在QOpenGLWidget中绘制任何内容的唯一方法是使用其paintGL()方法,该方法似乎已被破坏。发生的情况如下:一旦程序启动,小部件会自动刷新4次并停止。使其再次工作的唯一方法是更改活动窗口(将其切换到terminal或任何东西),然后它再绘制两帧。将窗口向后切换-获取下两帧-依此类推。有人知道那里发生了什么吗?或者如何避免这个问题?我通过创建一个Python PyQt5 QOpenGLWidget空闲问题,python,qt,qt5,pyqt5,Python,Qt,Qt5,Pyqt5,我正在使用PyQt5,在使用QOpenGLWidget时遇到了一些困难。问题是,在QOpenGLWidget中绘制任何内容的唯一方法是使用其paintGL()方法,该方法似乎已被破坏。发生的情况如下:一旦程序启动,小部件会自动刷新4次并停止。使其再次工作的唯一方法是更改活动窗口(将其切换到terminal或任何东西),然后它再绘制两帧。将窗口向后切换-获取下两帧-依此类推。有人知道那里发生了什么吗?或者如何避免这个问题?我通过创建一个BasicTimer对象来解决这个问题,该对象通过deaful
BasicTimer
对象来解决这个问题,该对象通过deafult绑定到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
同样的事情也发生在我身上,但当窗口切换时,我不会得到额外的事件。我刚开始有两个项目。如果其他qt窗口不可见,我会收到更多事件,等等。同样的问题:感谢您花时间写这篇文章!我已经做了很多类似的事情,但都不起作用。(我有一个启动计时器的插槽,计时器最终调用
self.update
)我验证它是否正在调用self.update
,是否正在调用update(self)
,但这似乎不会导致任何paintGL
调用。您的paintGL()
有什么作用吗?我的意思是,它是否至少会先打几个电话,直到它停下来?无论如何,我发现重要的是创建一个QBasicTimer
,因为QTimer
并没有死死地绑定到timerEvent
,这对我来说是一条死胡同。您使用的是QBasicTimer
?