Lors de la création d'un outil avec maya, vous pouvez créer une interface graphique pour l'outil. Lors de la création avec MEL, utilisez la commande MEL Si vous le faites avec Python, vous pouvez utiliser PySide ou appeler MEL depuis maya.cmds ou pymel.
Lorsqu'ils regardent Twitter, de nombreuses personnes utilisent PySide pour écrire en Python.
Cette fois, lors de la création d'une interface graphique à l'aide de maya.cmds visant une couche de niche
Il est pratique d'utiliser la syntaxe with et LayoutManager
! Je vais vous présenter cela.
Avant d'expliquer l'exemple en utilisant maya.cmds, si vous le faites avec MEL, cela ressemblera à ceci, par exemple.
global proc testWindow()
{
//Traitement pour effacer l'ancien lorsque l'interface graphique existe déjà
if(`window -ex testWindow`) deleteUI testWindow;
string $windowName = `window -title "testWindow" testWindow`;
//Créer une interface graphique
string $tabTest = `tabLayout -innerMarginWidth 1 -innerMarginHeight 5 -scrollable false`;
string $tabTestColumn =`columnLayout -adj true -rowSpacing 10`;
button -label "TestButton";
button -label "TestButton";
textField -tx "TestTextField" -w 500;
rowLayout -numberOfColumns 4 -columnWidth4 100 150 150 150 -columnAttach4 left left left left;
button -label "TestButton";
checkBox -label "TestCheckBox";
checkBox -label "TestCheckBox";
checkBox -label "TestCheckBox";
setParent..;
text -label "TestText";
textField -tx "TestTextField" -w 500;
setParent..;
tabLayout -edit -tabLabel $tabTestColumn "Test" $tabTest;
//Afficher l'interface graphique
showWindow;
}
testWindow()
Lorsque vous exécutez le MEL ci-dessus, une interface graphique comme celle-ci sera lancée.
Codons en couleur la partie du code qui constitue l'interface graphique. Le plus grand cadre rouge est columnLayout (la disposition consiste à organiser les éléments verticalement) Placez les boutons et les champs textFields dans la disposition columnLayout en partant du haut dans le cadre bleu. Dans le cadre vert, trois boutons et checkBox sont placés sur une seule ligne. Lors de l'écriture dans MEL, si vous modifiez le retrait en fonction de la hiérarchie dans la disposition de l'interface graphique Le code sera plus facile à lire.
Voici un exemple écrit par maya.cmds.
# !/usr/bin/env python
# -*- coding: utf-8 -*-
import maya.cmds as cmds
def testWindow():
#Traitement pour effacer l'ancien lorsque l'interface graphique existe déjà
if cmds.window('testWindow', ex=1):
cmds.deleteUI('testWindow')
windowName = cmds.window('testWindow',title='testWindow')
#Créer une interface graphique
tabTest=cmds.tabLayout(scrollable=False, innerMarginHeight=5, innerMarginWidth=1)
tabTestColumn=cmds.columnLayout(adj=True, rowSpacing=10)
cmds.button(label="TestButton")
cmds.button(label="TestButton")
cmds.textField(w=500, tx="TestTextField")
cmds.rowLayout(numberOfColumns=4, columnAttach4=('left', 'left', 'left', 'left'), columnWidth4=(100, 150, 150, 150))
cmds.button(label="TestButton")
cmds.checkBox(label="TestCheckBox")
cmds.checkBox(label="TestCheckBox")
cmds.checkBox(label="TestCheckBox")
cmds.setParent('..')
cmds.text(label="TestText")
cmds.textField(w=500, tx="TestTextField")
cmds.setParent('..')
cmds.tabLayout(tabTest, edit=1, tabLabel=(tabTestColumn, "Test"))
#Afficher l'interface graphique
cmds.showWindow()
if __name__ == '__main__':
testWindow()
Dans le cas de maya.cmds (dans le cas de python), une erreur se produira si l'indentation change.
Il n'est pas possible de modifier le retrait en fonction de la hiérarchie dans la mise en page.
De plus, cmds.setParent ('..')
apparaît plusieurs fois, je veux donc le supprimer. .. ..
Voici donc le sujet principal de cette fois! ** **
Utilisez la syntaxe with en combinaison avec le module par défaut LayoutManager
en maya.
La syntaxe with est principalement utilisée lors de l'ouverture et de la fermeture de fichiers.
Si vous n'utilisez pas avec, écrivez comme ↓
f = open("test.txt", "r")
print(f.read())
f.close()
Vous pouvez utiliser avec pour omettre la partie f.close ()
.
Heureusement, la ligne sous l'instruction with est en retrait.
with open("test.txt", "r") as f:
print(f.read())
LayoutManager
utilise ce mécanisme avec la syntaxe
C'est un module qui vous permet de changer le retrait librement.
Puisqu'il est inclus dans la bibliothèque de maya.common.ui, importez-le comme suit.
from maya.common.ui import LayoutManager
Ce qui suit est une réécriture de l'exemple GUI en utilisant maya.cmds en utilisant LayoutManager
.
# !/usr/bin/env python
# -*- coding: utf-8 -*-
import maya.cmds as cmds
from maya.common.ui import LayoutManager
def testWindow():
#Traitement pour effacer l'ancien lorsque l'interface graphique existe déjà
if cmds.window('testWindow', ex=1):
cmds.deleteUI('testWindow')
windowName = cmds.window('testWindow',title='testWindow')
#Créer une interface graphique
tabTest=cmds.tabLayout(scrollable=False, innerMarginHeight=5, innerMarginWidth=1)
with LayoutManager(cmds.columnLayout(adj=True, rowSpacing=10)) as tabTestColumn:
cmds.button(label="TestButton")
cmds.button(label="TestButton")
cmds.textField(w=500, tx="TestTextField")
with LayoutManager(cmds.rowLayout(numberOfColumns=4, columnAttach4=('left', 'left', 'left', 'left'), columnWidth4=(100, 150, 150, 150))):
cmds.button(label="TestButton")
cmds.checkBox(label="TestCheckBox")
cmds.checkBox(label="TestCheckBox")
cmds.checkBox(label="TestCheckBox")
cmds.text(label="TestText")
cmds.textField(w=500, tx="TestTextField")
cmds.tabLayout(tabTest, edit=1, tabLabel=(tabTestColumn, "Test"))
#Afficher l'interface graphique
cmds.showWindow()
if __name__ == '__main__':
testWindow()
La position du retrait a changé et cmds.setParent ('..')
C'est parti, donc c'est un peu plus facile à voir!
Il est difficile de voir si vous n'en avez pas besoin parce que vous utilisez PySide ou si vous laissez le retrait
Vous pourriez penser que
Je n'ai pas trouvé LayoutManager
même lorsque j'ai cherché sur le net, alors je l'ai présenté.
Ce n'est pas une fonctionnalité très utile, mais si vous l'aimez, essayez-la!
Recommended Posts