因此,第一部分對代碼無關緊要,但對於任何知道它的人來說,我都會在The Foundry的'Nuke 」。創建一個pythonPanel GUI。在Python類中使用self(在Nuke製作GUI中)
所以,當我創建我的面板,它開始:
class notePanel(nukescripts.PythonPanel):
def __init__(self):
nukescripts.PythonPanel.__init__(self, 'Note Panel', 'com.ohufx.notePanel')
隨着初始化(個體經營):部分。
當我增加旋鈕,或UI控件,該面板,我用sometihng這樣的:
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)
而且使用的自我,它的偉大工程。
我的問題是,在我第一步中,當我添加旋鈕(就像我創建的字符串旋鈕一樣),我想讓我的一個函數(如上面的launchSGPage)運行在特定按鈕上的腳本,如果我這樣做:
self.sgpage = nuke.PyScript_Knob('sgpage', 'Open SG page', 'self.launchSGPage()')
self.launchSGPage()給我一個錯誤。出於某種原因,自我並不是在這種情況下工作的,到目前爲止,唯一能夠實現這一目的的方法是在我將其添加到UI時命名爲面板(在本例中,我將其命名爲nPanel)並使用其名稱來調用我的函數,像這樣如下:
def addnotePanel():
global nPanel
nPanel = notePanel()
return nPanel.addToPane()
所以我的腳本按鈕看起來像:
self.sgpage = nuke.PyScript_Knob('sgpage', 'Open SG page', 'nPanel.launchSGPage()')
這適用於所有意圖和目的,但似乎只是......骯髒和不潔的給我。我不確定是什麼,但有些東西告訴我這有什麼問題。任何人都可以爲我清除一個更好的方式來鏈接到這個類中的函數,而不是全局變量名嗎?
不幸的是lambda沒有工作。可怕的是,就我所瞭解的python而言,我以某種方式設法跳過了(甚至所有我參考的腳本,從來都沒有出現過)lambda。我查了一下,但你能澄清它的作用嗎? 編寫一個PyScript_Knob的子類可以工作 - 儘管如此,我還是有一段時間。謝謝你爲什麼要自我清理。在這種情況下沒有工作。我沒有想到將它作爲字符串處理的事實將它運行在覈主環境中,而不是在我的班級中。 – aescript
Lambda只是創建一個匿名函數。運行'lambda:self.launchSGPage()'的結果是一個函數對象,它是一個不帶參數的函數,調用時調用'self.launchSGPage()'。你可以把它分配給一個變量,比如f,然後調用'f()'。 –