1
我有一個圖像序列呈現出來。我想在一個簡單的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)
不熟悉python,但我的C++眼睛告訴我,你在循環中改變pixmaps,並睡眠所有的GUI線程。這是不正確的。嘗試使用QTimer用於此目的,信號超時,創建插槽並更改此插槽中的像素映射。如果我不對,或者這對你有幫助,指出我。 – Chernobyl 2014-11-05 20:49:32
它阻止了GUI。我只是嘗試qLabel.repaint(),現在播放該序列。但仍然阻止了GUI。 我會嘗試QTimer,看看它是否仍然阻止UI – arvidurs 2014-11-05 20:59:18
沒有QTimer不會阻止GUI,我發佈這個答案,因爲它是一個解決方案,我也添加了解釋爲什麼它不會阻止GUI線程。 – Chernobyl 2014-11-05 21:03:33