使用python线程为Maya创建GIF

问题描述 投票:0回答:1

我想使用python在自定义Maya用户界面中添加gif元素。由于Maya不接受动画图像作为输入,因此我创建了一个while循环并编辑输入图像。为此,我使用了Timer,一切正常,直到我重新运行脚本。旧线程仍旧处于活动状态(尽管我每次运行脚本时都会将其杀死)

这是我的代码。我有一个“开始”和“停止”按钮,它们按预期的方式工作,但是如果重新运行该脚本,旧线程仍处于活动状态。

from threading import Timer
import time
import maya.cmds as cmds

global t
global N
global B

def initGif():
    global t
    global N
    global B

    terminateGif()  
    N = 0

    t = Timer(1.0, startGif)
    t.start()

def startGif():
    global N
    global t
    while N < 1000:
        if N < 1000:
            print "Hello", t # This is where the actual images would iterate instead of "Hello"
            time.sleep(5)
        else:
            terminateGif()
            continue

def terminateGif():
    global t
    global N
    N = 9999999

    try:
        t.cancel()
    except:
        t = "None"
        return

def UI():
    if cmds.window("win", exists = True):
        cmds.deleteUI("win")
    cmds.window("win", w = 500, h = 500)

    cmds.columnLayout()
    cmds.button("stop", c = lambda *args : terminateGif())
    cmds.button("start", c = lambda *args : initGif())

    cmds.showWindow("win")

UI()
initGif()

python maya
1个回答
0
投票

事实上,您试图使gif使用线程和计时器的事实只是要求Maya崩溃,或者至少会降低场景的性能。

不是强烈承担所有开销,我强烈建议您只使用PySide,它始终是Maya内置的。这是一个简单的示例,无需处理线程的噩梦:

from PySide2 import QtCore
from PySide2 import QtGui
from PySide2 import QtWidgets


class Win(QtWidgets.QWidget):

    def __init__(self, parent=None):
        super(Win, self).__init__(parent)

        self.setWindowTitle("Gif Example")
        self.resize(500, 500)

        self.movie = QtGui.QMovie("/PATH/TO/YOUR/GIF.gif")  # Set your gif path here.
        self.movie.setScaledSize(QtCore.QSize(150, 150))  # You can resize it too.
        self.movie.start()

        self.gif = QtWidgets.QLabel(parent=self)  # Use QLabel to display the gif.
        self.gif.setMovie(self.movie)

        self.main_layout = QtWidgets.QVBoxLayout()
        self.main_layout.addWidget(self.gif)
        self.setLayout(self.main_layout)


win = Win()
win.show()
© www.soinside.com 2019 - 2024. All rights reserved.