所以这第一部分对代码应该没有太大影响,但仅供任何知道它的人参考,我在 The Foundry 的“Nuke”中编写这个。创建一个 pythonPanel GUI。
所以当我创建我的面板时,它开始:
class notePanel(nukescripts.PythonPanel):
def __init__(self):
nukescripts.PythonPanel.__init__(self, 'Note Panel', 'com.ohufx.notePanel')
使用init (self): 部分。
当我在这个面板中添加旋钮或 UI 控件时,我会使用一些类似的东西:
self.proj = nuke.String_Knob('proj', 'Project:', os.environ['SHOW'])
self.addKnob(self.proj)
self.proj.setFlag(nuke.STARTLINE)
哪个工作正常。此外,当我创建在面板中运行的脚本时,我会执行以下操作:
def launchSGPage(self):
pr = self.proj.value()
sh = self.shot.value()
url = shotgun.getURL(pr,sh)
webbrowser.get('/usr/bin/google-chrome %s').open(url)
也使用self,效果很好。
我的问题是,在我的第一步中,当我添加旋钮时(就像我创建的字符串旋钮)并且我想让我的一个函数(如上面的 launchSGPage)运行在特定按钮上的脚本,如果我这样做这个:
self.sgpage = nuke.PyScript_Knob('sgpage', 'Open SG page', 'self.launchSGPage()')
self.launchSGPage() 给了我一个错误。出于某种原因,self 在这种情况下不起作用,到目前为止,我让它起作用的唯一方法是在我将它添加到 ui 时命名我的面板(在这种情况下我将它命名为 nPanel)并使用它的名称来调用我的函数,如下所示:
def addnotePanel():
global nPanel
nPanel = notePanel()
return nPanel.addToPane()
所以我的脚本按钮看起来像:
self.sgpage = nuke.PyScript_Knob('sgpage', 'Open SG page', 'nPanel.launchSGPage()')
这适用于所有意图和目的,但对我来说似乎......肮脏和不干净。我不确定是什么,但有些东西告诉我这有问题。谁能为我清理一个更好的方法来链接到我在这个类中的函数,而不是通过全局变量名?