2015-12-08 67 views
0

快速版本: 我想弄清楚如何將一個腳本中的函數的列表或元組傳遞給另一個腳本中的函數。我遇到的問題是,它總是在第二個腳本中變爲NoneObjectType,然後除了將它打印爲長字符串之外,我無法對其進行任何操作。返回Python中的特定類型

長版本: 我使用一個名爲波塞爾的3D程序,它允許使用Python來自動匹配任務。正因爲如此,我製作了一個名爲SelectMultiple的小腳本,它給了我一個很好的wxPython窗口,我可以選擇我想修改的項目。因爲我一遍又一遍地看到使用它,我希望它成爲它自己的腳本。

下面是函數,我從打電話的selectMultiple:

def MyApp(): 
    title = "Select from list" 
    # Make the selection window pop up 
    mydialog = userInput(title, lst) 
    popupwindow = mydialog.ShowModal() 

    # If the user cancels win = 0 
    if popupwindow == wx.ID_CANCEL: 
     print "User canceled" 
     return 

    # Get the selected actors 
    selected = mydialog.GetSelectedActors() 

    # We are finished with the dialog 
    mydialog.Destroy() 

    return lst(selected) 

默認選擇是一個元組,你可以看到我試圖返回之前鑄造它作爲一個列表,但它不」 t在我的另一個劇本中表現出來。該文件不會導入,我可以打印它並獲取一個顯示內容的字符串,但它始終是NoneType,我不能用它做很多事情。這是我打來的腳本:

import poser 
import os 

scene = poser.Scene() 

pathname = os.path.split(poser.AppLocation())[0] 
pathname = os.path.join(pathname, 'Runtime', 'Python', 'poserScripts', 'ScriptsMenu', 'GadgetGirl') 
sys.path.append(pathname) 

try: 
    import SelectMultiple 
except: 
    print "Could not import SelectMultiple script" 

    def ChoiceWindow(): 
     title = "SuperFly Node Fixer" 
     message = "Choose the operation to preform" 
     list_of_operations = ["Delete Node", "Detach Node", "Re-Link Node"] 

     drop_down_window = poser.DialogSimple.AskMenu(title, message, list_of_operations) 
     return drop_down_window 


    def Controller(): 
     script_to_run = ChoiceWindow() 
     #Need to call multiple so that we can know on what figures 
     list_of_figures = SelectMultiple.MyApp() 
     print type(list_of_figures) 

Controller() 

所以是的,我怎麼得到一個非None類型的東西回來。

+0

您是否打算偶爾輸入'list(selected)'而不是'lst(selected)'?如果有意的話,你還需要展示一個'mydialog.GetSelectedActors()'的最小例子' – Dan

+0

你是否100%確定'return lst(selected)'正在被執行?如果你的腳本進入'如果popupwindow == wx.ID_CANCEL:'conditional,那麼'return'將會執行,返回值將是'None'。 – Kevin

+1

你的意思是'lst'而不是'list'?在返回之前嘗試打印出該值。聽起來像這個問題是由'userInput'返回的對象。 –

回答

-2

循環通過selected元組並將項添加到列表中。

l = list()  
for item in selected: 
    l.append(item) 
    return l 

而且我不知道你使用的是什麼版本的Python,但演員的名單list()lst()

0

所以我創造了我自己的問題有一個錯字。在我發現被選中後不是一個列表,而是一個元組,我錯誤地將列表輸入爲lst,然後無法弄清楚它爲什麼不是列表。感謝您的幫助