The Foundry Nuke - отображает анимированное значение на QLabel
В настоящее время я пытаюсь отобразить значение в 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 ответ
Я написал следующий код для Mac версии The Foundry Nuke 11.2v4, так что есть PySide2
модуль вместо PySide
это для предыдущих версий 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()
И вот пример 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
,
Нажмите на эту картинку, чтобы воспроизвести анимацию GIF!