The Foundry Nuke - отображает анимированное значение на QLabel - PullRequest
0 голосов
/ 11 октября 2018

В настоящее время я пытаюсь отобразить значение в QLabel (QLineEdit также будет работать) на основе шкалы времени NUKE (или Maya).

Я использую Nuke для запуска кода, и яхотел бы отобразить значение на основе текущего кадра, чтобы отобразить что-то вроде этого:

Текущий кадр - 1001.Если я перейду на кадр 1002, я бы хотел, чтобы QLabel изменился соответствующим образом.

Есть ли способ сделать это?

import PySide.QtGui as QtGui
import PySide.QtCore as QtCore

def test():
    class framePanel(QtGui.QWidget):
       super(framePanel, self).__init__(self):
           layout = QtGui.QVBoxLayout(self)
           self.label = QtGui.QLabel('This is frame 1001')
           layout.addWidget(self.label)

    framePanel = framePanel()
    framePanel.show()

test()

Спасибо.

1 Ответ

0 голосов
/ 12 октября 2018

Я написал следующий код для Mac версии The Foundry Nuke 11.2v4, поэтому вместо PySide есть модуль PySide2, который используется для предыдущих версий Nuke.Кроме того, есть некоторые различия, касающиеся QtWidgets против QtGui.Для получения текущего кадра вы должны использовать nuke.frame().

Вот пример с QLabel:

import nuke
from PySide2 import QtGui, QtCore
from PySide2 import QtWidgets

def theTest():  
    class framePanel(QtWidgets.QWidget):
        label = QtWidgets.QLabel("The current frame is: %s" % nuke.frame())
        label.show()
theTest()

enter image description here

А вот пример QMessageBox с динамически изменяемым значением :

import nuke
import os.path
from PySide2 import QtGui, QtCore
from PySide2 import QtWidgets

def signalEmitter():
    qApplication = QtWidgets.QApplication.activeWindow()
    qApplication.emit(QtCore.SIGNAL('wasChanged()'))

nuke.addKnobChanged(signalEmitter, nodeClass='Viewer')
qmBox = QtWidgets.QMessageBox(None)
qmBox.setText('The current frame is: %s' % nuke.frame())
qmBox.connect(QtCore.SIGNAL("wasChanged()"), lambda: qmBox.setText('The current frame is: %s' % nuke.frame()))
qmBox.setModal(False)
qmBox.show()

QMessageBox не modal.

enter image description here

Нажмите на это изображение, чтобы воспроизвести анимацию в формате GIF!

...