Menu maya保存菜单信息(帧范围)

Menu maya保存菜单信息(帧范围),menu,maya,Menu,Maya,我有一个菜单,其中包含多个帧范围,用于设置动画的不同对象。每次关闭和重新打开帧范围时,我都需要该菜单来保存该帧范围。是否可以将数据保存到外部文件。有许多方法可以从外部保存数据。最简单的方法之一可能是使用json模块: import os import json path = "PATH/TO/YOUR/FILE/data.json" def save_data(frame_range): with open(path, "w") as f: f.write(jso

我有一个菜单,其中包含多个帧范围,用于设置动画的不同对象。每次关闭和重新打开帧范围时,我都需要该菜单来保存该帧范围。是否可以将数据保存到外部文件。

有许多方法可以从外部保存数据。最简单的方法之一可能是使用
json
模块:

import os
import json


path = "PATH/TO/YOUR/FILE/data.json"


def save_data(frame_range):
    with open(path, "w") as f:
        f.write(json.dumps(frame_range))


def load_data():
    if os.path.exists(path):
        with open(path, "r") as f:
            return json.loads(f.read())


save_data([1, 100])

stored_range = load_data()

print stored_range
# Output: [1, 100]
import pickle


path = "PATH/TO/YOUR/FILE/data.p"


def save_data(frame_range):
    with open(path, "w") as f:
        f.write(pickle.dumps(frame_range))


save_data([1, 100])
在本例中,它正在转储一个
列表
,但它支持更多(字典、嵌套数据结构)

另一种选择是使用
pickle
模块保存数据:

import os
import json


path = "PATH/TO/YOUR/FILE/data.json"


def save_data(frame_range):
    with open(path, "w") as f:
        f.write(json.dumps(frame_range))


def load_data():
    if os.path.exists(path):
        with open(path, "r") as f:
            return json.loads(f.read())


save_data([1, 100])

stored_range = load_data()

print stored_range
# Output: [1, 100]
import pickle


path = "PATH/TO/YOUR/FILE/data.p"


def save_data(frame_range):
    with open(path, "w") as f:
        f.write(pickle.dumps(frame_range))


save_data([1, 100])
您还可以使用
cpickle
以二进制格式导出

在Maya中,可以将设置直接保存到用户的首选项:

cmds.optionVar(iv=("frameStart", 1))
cmds.optionVar(iv=("frameEnd", 100))
对于更复杂的数据结构,您还可以直接在
cmds.optionVar
中存储
json
字符串

import json
def saveS ():
    startFrame =  cmds.textField ('one', q= True, text = True)
    endFrame = cmds.textField ('two', q= True, text = True)
    frame= {}
    frame["start"] = startFrame
    frame["end"] = endFrame
    file2 = open ("maya/2018/scripts/test_pickle/dataCopy.json", "w")
    json.dump (frame, file2)
    file2.close()
def helpMenu():
    if(cmds.window('window1_ui',q=True,ex=True)):cmds.deleteUI('window1_ui')
    cmds.window('window1_ui')
    cmds.columnLayout(adj=True)
    cmds.checkBox( label='Default' )
    cmds.textField('one', cc= 'saveS ()')
    cmds.textField('two', cc= 'saveS ()')
    json_file = open ("maya/2018/scripts/test_pickle/dataCopy.json", "r")
    frame = json.load(json_file)
    json_file.close()
    ted=frame["start"]
    cmds.textField ('one', edit= True, text = ted)
    fred=frame["end"]
    cmds.textField ('two', edit= True, text = fred)
    cmds.showWindow('window1_ui')
 helpMenu()

这就是我想到的。谢谢你的帮助@GreenCell。

谢谢你的帮助。我在找皮克,但那需要一条路,对吗?我需要菜单供多个用户使用,并加载文本字段中的帧范围,与他们之前输入的内容相同。此外,每次更改数字时都需要重写它。
pickle
本身不需要路径,但可以将其传递到要写入的文件,就像
json
一样。这不是你想要的吗?我可以做到这一点,但每次我都需要它应用到ui上。我该怎么做呢?请编辑你的帖子,并附上一个简单的例子,说明你到目前为止都做了些什么。如果我不知道您的界面使用的是什么框架,我就无能为力。我添加了一个ui的图像。我只需要startframe和endframe变量,以便在每次打开菜单时保存。因此,菜单打开,用户放入帧范围,保存帧范围,关闭并重新打开菜单,使用与帧范围相同的编号。