如何将窗格添加到nuke并在GUI中使用它?

2024-05-15 13:54:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个nuke窗格,我可以用调用嵌入窗格的相同方式调用它。 到目前为止,我可以在“自定义窗口”菜单中看到它,但当我按下按钮时,面板显示为空

enter image description here

我知道代码正在工作,因为当我在脚本编辑器中复制/粘贴它时,它可以按需要工作,但我可能缺少一些调用填充窗格的函数

我正在使用QtWidgets,这是我的简化代码:

class NukePanel_AssetManager(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.setLayout(QtWidgets.QVBoxLayout())
        myTable    = QtWidgets.QTableWidget()
        # all my functions and the things I am creating #
        self.layout().addWidget(myTable)

pane = nuke.getPaneFor('Properties.1')
panels.registerWidgetAsPanel('NukePanel_AssetManager', 'Asset Manager', 'uk.co.thefoundry.NukePanel_AssetManager', True).addToPane(pane)

我错过了什么


Tags: 代码selfinit方式mytable菜单按钮parent
3条回答

这就解决了

import nukescripts
import myPanelScript


pathToClass='myPanelScript.NukePanel_AssetManager' #the full python path to your panel
HRName='Asset Manager' #the Human-readable name you want for your panel
regName='NukePanel.AssetManager' #the internal registered name for this panel (used for saving and loading layouts)

nukescripts.panels.registerWidgetAsPanel(pathToClass, HRName, regName, True).addToPane(nuke.getPaneFor('Properties.1'))

谢谢你们所有人的回答,因为如果没有你们的投入,这对我来说是不可能的

模态窗格

在Nuke GUI中使用常规模式窗格的最简单方法如下:

import nuke

pane = nuke.Panel('Set number of Blur nodes')
pane.addSingleLineInput('Number of Blur nodes', '')
pane.show()

someInput = pane.value('Number of Blur nodes')

if someInput <= "0": 
    nuke.message('ERROR\nSet a number between 1 and 3')
elif someInput >= "4":
    nuke.message('ERROR\nSet a number between 1 and 3')
elif "1" <= someInput <= "3":
    nuke.message('number of Blur nodes: ' + someInput)
    
    for _ in list(range(1, int(someInput[0]) + 1)):
        nuke.createNode('Blur', inpanel = False)


非模态窗格

当然,您通常需要非模态窗格,如图片所示:

enter image description here

import nuke
import nukescripts

class Panes:

    def createPane(self):
        pythonPanel = nukescripts.PythonPanel('Keying Panel')
        knob = nuke.Keyer_Knob('keyer', 'range')
        knob.setValue( [0.0, 0.075, 0.5, 1.0] )
        pythonPanel.addKnob(knob)
        pythonPanel.addToPane()
        return self

Panes().createPane()

这可能与面板的定义位置有关。由于registerWidgetAsPanel中的第一个参数是panel类名称的字符串表示形式(非常奇怪),因此它在脚本面板中工作(因为它就在那里定义),但在通过init加载它时不工作(因为它实际上是在模块中定义的)。如果您的模块名为MyPanels

from nukescripts.panels import registerWidgetAsPanel

pathToClass='MyPanels.NukePanel_AssetManager' #the full python path to your panel
HRName='Asset Manager' #the Human-readable name you want for your panel
regName='NukePanel.AssetManager' #the internal registered name for this panel (used for saving and loading layouts)

registerWidgetAsPanel(pathToClass, HRName, regName)

Nuke有一些奇怪和不一致的模块导入;如果仍有问题,请尝试将面板/模块作为变量添加到nuke模块下,该模块随处可见:

import nuke
from MyPanels import NukePanel_AssetManager

nuke.NukePanel_AssetManager=NukePanel_AssetManager

哈奇,但过去帮了我很多忙

相关问题 更多 >