#python-2.7 #arguments #maya
#python-2.7 #аргументы #maya
Вопрос:
Я новичок в python и пытаюсь передавать аргументы между разными скриптами, но они обновляются только одним способом: я вызываю первый скрипт в maya с такой полкой:
try:
myPM.close()
except:pass
import sys
sys.path.append("C:/Users/manue/Desktop/test")
import UiMayaTest as SBIRP
reload(SBIRP)
myPM = SBIRP.createUI()
это называется script ‘UiMayaTest.py ‘ — это простое окно с записью IntField и кнопкой:
import sys
import maya.cmds as cmds
from functools import partial
def buttonPressed(episode, *args):
passValue(episode, *args)
print '============== buttonPressed ================'
print 'EpisodeName ', EpisodeName
Var = ''
import UiMayaTestFunction
Var = UiMayaTestFunction.FindVarFunc(EpisodeName,Var)
print 'Var : ',Var
def createUI():
myWindow = "SomeWindow"
if cmds.window(myWindow,ex=True):
cmds.deleteUI(myWindow)
cmds.window(myWindow)
cmds.columnLayout( adjustableColumn=True )
cmds.text( label='Episode: ', align='left' )
episode = cmds.intField( "Episode", minValue = 100, maxValue = 1000, value =100)
cmds.button(l="Open Last LIT scene", w=150, h=30, command=partial(buttonPressed,episode))
cmds.setParent("..")
cmds.showWindow()
def passValue(episode, *args):
global EpisodeName
EpisodeName = `cmds.intField( episode, query = True, value = True)`
и вызываемый им скрипт называется ‘UiMayaTestFunction.py’ и просто возвращает переменную с именем Var:
def FindVarFunc(EpisodeName, Var):
print '============== FindVarFunc ================'
print 'EpisodeName:' , EpisodeName
Var = 'Hello world'
print 'Var: ',Var
return Var
переменная ‘EpisodeName’ из UiMayaTest в UiMayaTestFunction хорошо обновляется каждый раз, когда я нажимаю кнопку,
но если я изменяю переменную ‘Var’ в UiMayaTestFunction , она не обновляет ее, у меня всегда один и тот же print или ‘Var’…
Заранее спасибо за любую помощь…
Ответ №1:
Ну …. кажется, что скрипт делает именно то, что он должен делать. Какой результат для вашей переменной Var вы ожидаете? Давайте посмотрим .. если кнопка нажата, вызывается функция buttonPressed() . Там переменная ‘Var’ инициализируется пустой строкой «. Затем вызывается функция FindVarFunc() с аргументом Var, что по-прежнему является пустой строкой. В FindVarFunc() печатается переменная ‘Var’ и возвращает значение, что еще…. ну, вы догадываетесь: пустая строка. И, наконец, результат функции присваивается переменной ‘Var’, а результатом является … пустая строка, которая печатается. Это может помочь назначить ‘Var’ что-то еще, кроме пустой строки, чтобы посмотреть, работает ли она лучше.
Комментарии:
1. спасибо, но переменная ‘Var’ во втором scipt uimayatestфункция. py ligne: Var = ‘Hello world’ хорошо возвращает печать Hello world в UiMayaTest.py … но если я изменю Var = ‘sunday’ в uimayatestфункции… UiMayaTest всегда возвращает мне «Привет, мир», например, если я не обновляю или не обновляю…
2. Любые изменения во внешнем модуле не будут обновлены, пока вы не перезагрузите модуль. Один только импорт загрузит модуль только один раз. Итак, если вы что-то измените в uimayatestфункции. py вам нужно будет выполнить перезагрузку (UiMayaTestFunction) перед вызовом FindVarFunc()
3. Ооо, большое спасибо, Хагги! это работает идеально :)))
4. Как вы думаете, это хороший метод или это очень грязный python?
5. Ваш код может быть немного более «питоническим», что означает, что вы можете использовать класс для своего кода пользовательского интерфейса, где вы можете инкапсулировать все необходимые данные и процедуры. И, возможно, разделение модулей в тестировании pase является источником проблем. Сначала я бы попытался сохранить все в одном модуле, и если это имеет смысл, то позже извлеките другой модуль, подобный вашему UiMayaTestFunction.py .