Python PyQt5 QOpenGLWidget空闲问题

Python PyQt5 QOpenGLWidget空闲问题,python,qt,qt5,pyqt5,Python,Qt,Qt5,Pyqt5,我正在使用PyQt5,在使用QOpenGLWidget时遇到了一些困难。问题是,在QOpenGLWidget中绘制任何内容的唯一方法是使用其paintGL()方法,该方法似乎已被破坏。发生的情况如下:一旦程序启动,小部件会自动刷新4次并停止。使其再次工作的唯一方法是更改活动窗口(将其切换到terminal或任何东西),然后它再绘制两帧。将窗口向后切换-获取下两帧-依此类推。有人知道那里发生了什么吗?或者如何避免这个问题?我通过创建一个BasicTimer对象来解决这个问题,该对象通过deaful

我正在使用PyQt5,在使用QOpenGLWidget时遇到了一些困难。问题是,在QOpenGLWidget中绘制任何内容的唯一方法是使用其paintGL()方法,该方法似乎已被破坏。发生的情况如下:一旦程序启动,小部件会自动刷新4次并停止。使其再次工作的唯一方法是更改活动窗口(将其切换到terminal或任何东西),然后它再绘制两帧。将窗口向后切换-获取下两帧-依此类推。有人知道那里发生了什么吗?或者如何避免这个问题?

我通过创建一个
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