程序的功能:使用PyQt4显示图像(简单的jpg / png文件)。
目标:在屏幕上显示/绘制图像,与屏幕刷新率同步。
我希望实现的伪代码示例:
pixmap = set_openGL_pixmap(myPixmap)
draw_openGL_pixmap(pixmap)
doSomthingElse()
理想情况下,draw_openGL_pixmap(pixmap)
函数应仅在刷新屏幕并显示图像后返回。在真正绘制图像后,将立即执行doSomthingElse()
。
到目前为止我尝试了什么:
QApplication.processEvents()
:这似乎没有诀窍,因为它没有处理与屏幕刷新率同步。QApplication.processEvents()
之前不会在屏幕上绘制图像,或直到控件返回到应用程序的事件循环(即,当我调用的所有函数都已返回并且GUI正在等待新事件时)。repaint()
方法将立即显示图像。但是,我不认为在调用repaint()
时,它会等到屏幕刷新事件返回之前。 答案 0 :(得分:2)
感谢Trialarion对我的问题的评论,我找到了解决方案here。
对于任何有兴趣的人,这里显示的图像与屏幕刷新率同步显示图像:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtOpenGL import *
app = QApplication(sys.argv)
# Use a QGLFormat with the swap interval set to 1
qgl_format = QGLFormat()
qgl_format.setSwapInterval(1)
# Construct a QGLWidget using the above format
qgl_widget = QGLWidget(qgl_format)
# Set up a timer to call updateGL() every 0 ms
update_gl_timer = QTimer()
update_gl_timer.setInterval(0)
update_gl_timer.start()
update_gl_timer.timeout.connect(qgl_widget.updateGL)
# Set up a graphics view and a scene
grview = QGraphicsView()
grview.setViewport(qgl_widget)
scene = QGraphicsScene()
scene.addPixmap(QPixmap('pic.png'))
grview.setScene(scene)
grview.show()
sys.exit(app.exec_())