2017-07-21 3 views
0
import maya.cmds as cmds 
from functools import partial 

def export(txtField): 
    print "hello" 
    #print cmds.textField(txtField, q=1) 

if cmds.window('exporter', q=1, ex=1): 
    cmds.deleteUI('exporter') 
window = cmds.window('exporter') 
cmds.columnLayout(adjustableColumn=True) 
name = cmds.textField(text='testing...') 
press = cmds.button('Export...', c=partial(export, name)) 
cmds.showWindow('exporter') 

So Im immer Fehler:teilweise, bekommen einige Daten aus Textfield

# Error: export() takes exactly 1 argument (2 given) # 

So Im neu zu teilweise, und ich verstehe nicht, was sie tun und wie sie funktionieren. Aber ich weiß, dass es möglich ist, das zu tun, was ich will. Also einfach auszudrucken, was ich in Textfield habe

+0

die Antwort ist unten; nur aus Neugier (ich hoffe, es ist in Ordnung, in einem Kommentar zu fragen, da es nicht verwandt ist) hast du es geschafft, dass das funktioniert? https://stackoverflow.com/questions/44703839/changereplace-file-within-reference Ich bin noch SO als ein aktiver Benutzer ziemlich neu und ich bin nicht sicher, ob ich verfolgen sollte, welche Antworten waren nicht explizit akzeptiert ... – mapofemergence

Antwort

1

In diesem Fall partial ist wahrscheinlich übertrieben. @ Mapofemergence Antwort wird gut funktionieren, aber Sie können dies nur tun:

from maya import cmds  

if cmds.window('exporter', q=1, ex=1): 
    cmds.deleteUI('exporter') 

window = cmds.window('exporter') 
cmds.columnLayout(adjustableColumn=True) 
tf = cmds.textField(text='testing...') 
def export(*_): 
    print "textfield says" , cmds.textField(tf, q=1, text=1) 

press = cmds.button('Export...', c=export) 
cmds.showWindow('exporter') 

seit export definiert wird, nachdem das Textfeld erstellt wird, fängt es den Variablenwert zum Zeitpunkt der Erstellung.

+0

Danke @theodox. Übrigens was ist * _? –

+0

Knöpfe feuern immer ihre Befehle mit einem Argument ab (was fast immer 'Falsch' ist). 99% der Zeit ignorierst du es einfach. '* _' ist Python-Kurzhand für" nimm hier ein Argument, aber ich werde es später ignorieren " – theodox

1

Hier ist etwas, das für Sie arbeiten soll:

from maya import cmds 
from functools import partial 

def export(txtField, *args): 
    print txtField, ':', args 
    print cmds.textField(txtField, q=1, text=1) 

if cmds.window('exporter', q=1, ex=1): 
    cmds.deleteUI('exporter') 

window = cmds.window('exporter') 
cmds.columnLayout(adjustableColumn=True) 
name = cmds.textField(text='testing...') 
press = cmds.button('Export...', c=partial(export, name)) 
cmds.showWindow('exporter') 

Was (und vielleicht verwirrend sein) geschieht, ist, dass der Befehl von Maya-Taste aufgerufen bereits übergibt ein Argument Standard, in diesem Fall False. Als Konsequenz fügt partial das zusätzliche Argument an das von Ihnen angegebene Argument an, und daher wird erwartet, dass export zwei Argumente erhält, nicht nur eins.

Es ist einige Zeit, die ich nicht native Maya UI-Befehle verwenden, so dass ich nicht sicher bin, was False steht und wenn Sie erwarten können, dass ein sinnvolles Argument übergeben wird, unter verschiedenen Bedingungen. Wie auch immer, Sie können dies umgehen, indem Sie Ihrer Funktionsdefinition ein zusätzliches Argument hinzufügen.

Sie könnten etwas wie def export(txtField, _): schreiben, aber das würde nur funktionieren, wenn Sie sicher sind, dass der übergebene Parameter einer ist. Aus diesem Grund habe ich stattdessen def export(txtField, *args): verwendet. Auf diese Weise können Sie args drucken und Fehler beheben (unabhängig von der Anzahl der Argumente), während der Rest des Codes funktioniert.

Als Randbemerkung, für andere Verwendungen von partial mit Maya Sie dies lesen möchten: https://theodox.github.io/2014/maya_callbacks_cheat_sheet