2016-06-27 6 views
0

Я написал простой пользовательский интерфейс, который требует пользователя выбрать что-то из выпадающего списка, а затем с помощью этого выбора, код выполняет остальную часть материалаoptionMenu не возвращает значение

Прямо сейчас, я у меня есть 2 вопроса .. 1. «Значение» не точно возвращается, как только будет выбран формат, и нажата кнопка «ОК» ... Я что-то пропустил? 2. Как я могу сделать закрытие пользовательского интерфейса на кнопке OK?

import maya.cmds as cmds 

def mainCode(): 
    ... 
    ... 
    print "UI popping up" 
    showUI() 

    print "A format has been selected" 
    cmds.optionMenu('filmbackMenu', edit = True, value = xxx) # <-- I want to grab the value from the menu selection and input into this 'value' flag 
    ... 
    ... 

def showUI(): 

    if cmds.window("UI_MainWindow", exists = True): 
     cmds.deleteUI("UI_MainWindow") 

    cmds.window("UI_MainWindow", title = "User Interface Test", w = 500, h = 700, mnb = False, mxb = False, sizeable = False) 
    cmds.columnLayout("UI_MainLayout", w = 300, h =500) 

    cmds.optionMenu("UI_FormatMenu", w = 250, label = "Select a Format") 

    list01 = ['itemA-01', 'itemB-02', 'itemC-02', 'itemD-01', 'itemE-01', 'itemF-03'] 
    for x in list01: 
     cmds.menuItem(label = str(x)) 

    cmds.button("UI_SelectButton", label = "OK", w = 200, command=ObjectSelection) 

    cmds.showWindow("UI_MainWindow") #shows window 

def ObjectSelection(*args): 
    currentFormat = cmds.optionMenu("UI_FormatMenu", query=True, value=True) 
    print currentFormat 
    return currentFormat 

ответ

0

Используйте словари или класс python для передачи данных в вашем скрипте. Я действительно не понимаю, в чем проблема.

Когда вы говорите: «Значение« точно не возвращается », что вы имеете в виду? Можете ли вы рассказать нам, что вы получаете и чего вы ожидаете?

def mainCode(): 
    ... 
    ... 
    showUI() 
    cmds.optionMenu('filmbackMenu', edit = True, value = xxx) # <-- I want to grab the value from the menu selection and input into this 'value' flag 
    ... 

Здесь значение выбора из «входного значения», я предполагаю, что это:

cmds.optionMenu('filmbackMenu', edit = True, value = ObjectSelection()) 

Но поскольку не filmbackMenu в вашем коде, я не уверен.

Ваш второй вопрос ответил на группы Google Джастином. Вам нужно только сделать:

def ObjectSelection(*args): 
    currentFormat = cmds.optionMenu("UI_FormatMenu", query=True, value=True) 
    cmds.deleteUI("UI_MainWindow")#close the UI 
    print currentFormat 
    return currentFormat 

Или, может быть, была выбрана кнопка «ОК»? не означает «нажата кнопка ОК»?

Если вы хотите увидеть, как использовать dictionnaries, вы можете прочитать эту другую должность, где я ответил: Maya Python - Using data from UI Вы на правильном пути к использованию частичной, я рекомендую вам прочитать об этом: Calling back user input values inside maya UI

- - EDIT ---

Я попытался создать полностью Функциональный пример:

import maya.cmds as cmds 

uiDic = {} 
uiDic['this']= 1 

def ui_refresh(*args): 
    uiDic['this'] = cmds.optionMenu("UI_FormatMenu", query=True, value=True) 
    return uiDic['this'] 

def showUI(): 

    if cmds.window("UI_MainWindow", exists = True): 
     cmds.deleteUI("UI_MainWindow") 

    cmds.window("UI_MainWindow", title = "User Interface Test", w = 500, h = 700, mnb = False, mxb = False, sizeable = False) 
    cmds.columnLayout("UI_MainLayout", w = 300, h =500) 

    cmds.optionMenu("UI_FormatMenu", w = 250, label = "Select a Format") 

    list01 = ['itemA-01', 'itemB-02', 'itemC-02', 'itemD-01', 'itemE-01', 'itemF-03'] 
    for x in list01: 
     cmds.menuItem(label = str(x)) 

    cmds.button("UI_SelectButton", label = "OK", w = 200, command=ObjectSelection) 

    uiDic['om_filmback'] = cmds.optionMenu('filmbackMenu') 
    list01 = ['itemA-01', 'itemB-02', 'itemC-02', 'itemD-01', 'itemE-01', 'itemF-03'] 
    for x in list01: 
     cmds.menuItem(label = str(x)) 


    cmds.showWindow("UI_MainWindow") #shows window 

def ObjectSelection(*args): 
    cmds.optionMenu(uiDic['om_filmback'], edit = True, value=ui_refresh()) 

showUI() 
+0

по стоимости не возвращается, я имею в виду, что после того, как пользователь выбрал формат и нажмите кнопку оК, выбранный формат не является возвращен в «Obj ectSelection'. Однако при использовании 'cmds.optionMenu ('filmbackMenu', edit = True, value = ObjectSelection()), пользовательский интерфейс не появляется и просто использует первый элемент в меню в качестве выбора. Поэтому моя дилемма – dissidia

+0

Я изменил ваш код, чтобы что-то проверить. Я отредактировал свой ответ. Когда вы нажмете хорошо, он обновит второй. Не уверен, что именно вы спрашиваете. Постарайтесь быть более точными, если это не так. – DrWeeny

+0

Простите меня, если я не понял, я сделал небольшое редактирование на свой пост. В моей функции mainCode() между строками, которые содержат 'showUI' и' print ', был выбран формат «', я ожидаю, что мой код «остановится» здесь и дождитесь нажатия кнопки «ОК» в пользовательском интерфейсе (что означает, что был выбран формат) перед выполнением следующей строки кода. Вместо этого сценария мой код запускается от начала до конца, не заботясь о выборе пользовательского интерфейса, и выбор может выполняться до тех пор, пока код exec не будет выполнен. заканчивается. Он тоже делает то же самое с вашим кодом, начиная с конца до конца, не принимая выбор пользовательского интерфейса – dissidia