이미지 시퀀스가 렌더링되었습니다. QMainWindow 또는 QDialog에서 원금 회수를 원합니다. 이것은 내가 가지고있는 것입니다. 그것은 qlabel에 이미지를로드하지만, 업데이트되는 라벨을 볼 수 없습니다. 그냥 마지막으로로드 된 이미지를 보여줄뿐입니다. 누군가 뭔가를 알고 있을까요?Qt를 사용하여 이미지 시퀀스 재생 QMainWindow
from PySide import QtCore, QtGui
import shiboken
import maya.OpenMayaUI as apiUI
import time
def getMayaWindow():
"""
Get the main Maya window as a QtGui.QMainWindow instance
@return: QtGui.QMainWindow instance of the top level Maya windows
"""
ptr = apiUI.MQtUtil.mainWindow()
if ptr is not None:
return shiboken.wrapInstance(long(ptr), QtGui.QWidget)
class Viewer(QtGui.QMainWindow):
def __init__(self, parent = getMayaWindow()):
super(Viewer, self).__init__(parent)
self.setGeometry(400, 600, 400, 300)
self.setUi()
def setUi(self):
self.label = QtGui.QLabel()
self.setCentralWidget(self.label)
def showUi(self):
self.show()
def loadImage(self, path):
self.label.clear()
image = QtGui.QImage(path)
pp = QtGui.QPixmap.fromImage(image)
self.label.setPixmap(pp.scaled(
self.label.size(),
QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation))
x = Viewer()
x.showUi()
for i in range(1, 11):
x.loadImage("C://anim%03d.png" % i)
time.sleep(0.5)
파이썬에 익숙하지 않지만 내 C++ 눈은 회 돌이에서 pixmaps를 변경하고 모든 GUI 스레드를 잠자 게한다고 알려줍니다. 올바르지 않습니다. 이를 위해 QTimer를 사용하고, 타임 아웃 신호를 보내고, 슬롯을 생성하고,이 슬롯에서 픽스맵을 변경하십시오. 내가 옳지 않거나 이것이 당신을 도왔다면 나를 가르쳐주십시오. – Chernobyl
GUI를 차단합니다. 방금 시퀀스를 재생하는 qLabel.repaint()를 시도했습니다. 그러나 여전히 GUI를 차단합니다. QTimer를 사용하여 여전히 UI를 차단하는지 확인합니다 – arvidurs
아니요 QTimer가 GUI를 차단하지 않습니다. 솔루션이기 때문에 답변을 게시 했으므로 GUI 스레드를 차단하지 않는 이유에 대한 설명도 추가했습니다. – Chernobyl