我不太精通Python-我希望在一些代码上有所帮助。我正在尝试从nuke中的所有选定节点中选择两个随机节点。
我已经做得足够多了,可以在所选节点的数组中打印两个随机选择的节点名称,但是谁能帮忙完成代码,以便选择两个具有匹配名称的节点?本质上,我在想节点名称是否包含chosen_nodes
字符串,请选择这些节点。
谢谢。
import nuke
import random
array = []
for node in nuke.selectedNodes():
n = node['name'].value()
array.append(n)
chosen_nodes = random.sample(array, k=2)
print chosen_nodes
答案 0 :(得分:0)
使用此代码,您可以从几个选定的节点中选择两个随机节点:
import nuke
import random
array = []
for node in nuke.selectedNodes():
name = node['name'].value()
array.append(name)
print(array)
if nuke.selectedNodes():
for index in nuke.selectedNodes():
index['selected'].setValue(False)
for i in range(1, 3, 1): # range(start, non-inclusive stop, step)
r = random.randint(1, len(array))
nuke.toNode(array[r-1]).setSelected(True)
array.remove(array[r-1]) # delete randomly generated element from array
array = []
答案 1 :(得分:0)
基本上,我在想节点名称是否包含
chosen_nodes
字符串,请选择这些节点。
这应该接近您想要的!
match = 'chosen_nodes'
for node in nuke.selectedNodes():
node.setSelected(False)
if match in node['name'].value():
node.setSelected(True)
稍微复杂一点的版本:
def selectNodesWithFuzzyName(name, nodes=None):
"""
Set the selected nodes to only those that match the passed name.
Parameters
----------
node : str
Glob-style name of a node e.g. 'Grade*'
nodes : Optional[Iterable[nuke.Node]]
If provided, only operate on only these nodes. Otherwise
the currently selected nodes will be used.
"""
import fnmatch
if nodes is None:
nodes = nuke.selectedNodes()
for node in nodes:
node.setSelected(False)
if fnmatch.fnmatch(node['name'].value(), name):
node.setSelected(True)
selectNodesWithFuzzyName('Grade*')