2016-05-05 6 views
-1

Ich habe ein kleines Programm mit Python in Maya erstellt, und ich bin daran interessiert, die Werte zu drucken, die der Benutzer mit einem Klick auf "Anwenden" eingibt. Irgendwelche Ideen, wie ich das erreichen kann? Ich möchte dann die Werte in einem anderen Codeabschnitt verwenden, um Gebäude in Maya zu erstellen.Zurückrufen von Benutzereingabewerten in maya UI

def runGrid(): 
if mc.window('windowTest9', ex=True): 
    mc.deleteUI('windowTest9', window=True) 

mc.window('windowTest9', title='BuilGen', sizeable=False, resizeToFitChildren=True) 

mc.rowColumnLayout(numberOfColumns = 2, columnWidth = [ (1, 150), (2, 100), (3, 75)]) 

#mc.text(label = 'Top Bar') 
mc.separator(h = 10, style = 'none') 
mc.separator(h = 10, style = 'none') 

mc.text(label='Create a New Building', align = 'left') 
mc.image(image='F:\Photos\office-building-icon-687152.png') 


# insert a blank line space 
mc.separator(h = 10, style = 'singleDash') 
mc.separator(h = 10, style = 'singleDash') 


mc.text(label = 'number of sections wide:', align = 'left') 
buildingWidth = mc.intField(value = 4) 


mc.text(label = 'number of sections deep:', align = 'left') 
buildingDepth = mc.intField(value = 3)  

mc.text(label = 'number of floors:', align = 'left') 
numberOfFloors = mc.intField(value = 2)  


mc.text(label = 'roof:', align = 'left') 
numberOfFloors = mc.checkBox (label='Y/N')  
mc.separator(h = 10, style = 'none') 

# insert another blank line 
mc.separator(h = 10, style = 'none') 
mc.separator(h = 10, style = 'none') 


# create the buttons 
mc.separator(h = 10, style = 'none') 
mc.button(label = 'Apply', command = '') 


mc.button(label = 'Cancel', command = 'mc.deleteUI("windowTest9", window=True)') 

mc.showWindow() 

runGrid() 

Antwort

1

Edit: Wie DrWeeny sagte, wäre es am besten zu den anderen ähnlichen Themen zu beziehen.


Ich habe ein wenig Erinnerung auf meinem Blog vor einiger Zeit, all die verschiedenen nativen Maya UI Art und Weise Befehle der Verwendung mit einer schnellen Art und Weise zu testen, um der Lage sein, sie zu testen:

  • classic Maya String
  • Funktion als Argument
  • lambda
  • functools.partial
  • pymel.core.Callback

Jeder Fall wird auch mit Beispielen mit dem Übertragen von Variablen als Argumente für diese Funktionen gegeben. Denn manchmal muss man es können. Insgesamt empfehle ich die Verwendung functools.partial, es gibt nur Vorteile gegenüber den anderen (wenn Sie PySide vergessen).

Maya UI types

def function(*args): 
    print args 
    cmds.textFieldGrp(text, edit=True, text=str(args)) 

variable = 'Variable' 
width = [1, 250] 
align = [1, 'left'] 
window = cmds.window(title='UI and commands arguments.') 
cmds.columnLayout() 

cmds.textFieldGrp(label="\"function()\"", changeCommand="function()", columnWidth=width, columnAlign=align) 
cmds.textFieldGrp(label="function", changeCommand=function, columnWidth=width, columnAlign=align) 
cmds.textFieldGrp(label="\"function(variable)\"", changeCommand="function(variable)", columnWidth=width, columnAlign=align) 
cmds.textFieldGrp(label="lambda x: function(variable)", changeCommand=lambda x: function(variable), columnWidth=width, columnAlign=align) 
cmds.separator(style="double", height=20) 

import functools 
cmds.textFieldGrp(changeCommand=functools.partial(function), label='functools.partial(function)', columnWidth=width, columnAlign=align) 
cmds.textFieldGrp(changeCommand=functools.partial(function, variable), label='functools.partial(function, variable)', columnWidth=width, columnAlign=align) 
cmds.separator(style="single", height=20) 

import pymel.core 
cmds.textFieldGrp(changeCommand=pymel.core.Callback(function), label='pymel.core.Callback(function)', columnWidth=width, columnAlign=align) 
cmds.textFieldGrp(changeCommand=pymel.core.CallbackWithArgs(function), label='pymel.core.CallbackWithArgs(function)', columnWidth=width, columnAlign=align) 
cmds.textFieldGrp(changeCommand=pymel.core.CallbackWithArgs(function, variable), label='pymel.core.CallbackWithArgs(function, variable)', columnWidth=width, columnAlign=align) 

cmds.separator(style="single", height=20) 
text = cmds.textFieldGrp(label='RESULT: ', text='', width=500) 
cmds.showWindow() 

Wenn eine Klasse mit

Weil es bei der Verwendung von Klasse im Auge nicht gemacht wurde, hat einige Möglichkeiten nicht funktionieren, wenn Sie in einer Klasse sind.

class MayaUI(): 
    def __init__(self): 
     self.variable = 'Variable' 
     self.width = [1, 250] 
     self.align = [1, 'left'] 
     self.window = cmds.window(title='UI and commands arguments.') 
     cmds.columnLayout() 

     cmds.textFieldGrp(label="\"self.function()\"", changeCommand="self.function()", columnWidth=self.width, columnAlign=self.align) 
     cmds.textFieldGrp(label="self.function", changeCommand=self.function, columnWidth=self.width, columnAlign=self.align) 
     cmds.textFieldGrp(label="\"self.function(self.variable)\"", changeCommand="self.function(self.variable)", columnWidth=self.width, columnAlign=self.align) 
     cmds.textFieldGrp(label="lambda x: self.function(self.variable)", changeCommand=lambda x: self.function(self.variable), columnWidth=self.width, columnAlign=self.align) 
     cmds.separator(style="double", height=20) 

     import functools 
     cmds.textFieldGrp(changeCommand=functools.partial(self.function), label='functools.partial(self.function)', columnWidth=self.width, columnAlign=self.align) 
     cmds.textFieldGrp(changeCommand=functools.partial(self.function, self.variable), label='functools.partial(self.function, self.variable)', columnWidth=self.width, columnAlign=self.align) 
     cmds.separator(style="single", height=20) 

     import pymel.core 
     cmds.textFieldGrp(changeCommand=pymel.core.Callback(self.function), label='pymel.core.Callback(self.function)', columnWidth=self.width, columnAlign=self.align) 
     cmds.textFieldGrp(changeCommand=pymel.core.CallbackWithArgs(self.function), label='pymel.core.CallbackWithArgs(self.function)', columnWidth=self.width, columnAlign=self.align) 
     cmds.textFieldGrp(changeCommand=pymel.core.CallbackWithArgs(self.function, self.variable), label='pymel.core.CallbackWithArgs(self.function, self.variable)', columnWidth=self.width, columnAlign=self.align) 

     # A bit more complicated 
     _map = {'textFieldGrp': lambda arg:cmds.textFieldGrp(arg, query=True, text=True)} 
     _com = lambda *args:args[0](self.variable, _map[args[1]](args[2])) 
     cmds.textFieldGrp('textfieldName', changeCommand=pymel.core.Callback(_com, self.function, 'textFieldGrp', 'textfieldName'), label="pymel.core.Callback(_com, self.function, 'textFieldGrp', 'textfieldName') + lambdas", columnWidth=self.width, columnAlign=self.align) 

     cmds.separator(style="single", height=20) 
     self.text = cmds.textFieldGrp(label='RESULT: ', text='', width=500) 
     cmds.showWindow() 

    def function(self, *args): 
     print args 
     cmds.textFieldGrp(self.text, edit=True, text=str(args)) 

MayaUI() 
0

Sie auf dieser anderen Post gehen die Antworten zu sehen: Printing the label of a button when clicked oder die Verwendung von Dictionnary hier: Maya Python - Using data from UI

from functools import partial 

def queryInputs(*args): 
    #args0 = label01 
    print(cmds.text(args[0], q=True, label = 1)) 
    #args[1] = int_01 
    print(cmds.intField(args[1], q=True, v = 1)) 
    #args[2] = cb_01 
    print(cmds.checkBox(args[2], q=True, v = 1)) 


def runGrid(): 
    if cmds.window('windowTest9', ex=True): 
     cmds.deleteUI('windowTest9', window=True) 

    cmds.window('windowTest9', title='BuilGen', sizeable=False, resizeToFitChildren=True) 

    cmds.rowColumnLayout(numberOfColumns = 2, columnWidth = [ (1, 150), (2, 100), (3, 75)]) 

    label_01 = cmds.text(label = 'number of sections wide:', align = 'left') 
    int_01 = buildingWidth = cmds.intField(value = 4) 

    cb_01 = numberOfFloors = cmds.checkBox (label='Y/N')  

    cmds.button(label = 'Apply', command = partial(queryInputs, label_01, int_01, cb_01)) 

    cmds.button(label = 'Cancel', command = 'cmds.deleteUI("windowTest9", window=True)') 

    cmds.showWindow() 

runGrid() 
Verwandte Themen