[PYTHON] Comment écrire une interface graphique à l'aide de la commande maya

** Introduction **

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.

** Exemple d'interface graphique (MEL) **

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. 2019-12-02_12h30_17.png

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. 2019-12-02_12h46_23.png 2019-12-02_11h13_01.png

** Exemple d'interface graphique (maya.cmds) **

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! ** **

** À utiliser avec la syntaxe et LayoutManager **

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!

en conclusion

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

Comment écrire une interface graphique à l'aide de la commande maya
Comment exécuter une commande à l'aide d'un sous-processus en Python
Comment générer une requête à l'aide de l'opérateur IN dans Django
[sh] Comment stocker les résultats de l'exécution de la commande dans des variables
Qiita (1) Comment écrire un nom de code
Comment dessiner un graphique avec Matplotlib
Comment faire une commande pour lire le fichier de paramètres avec pyramide
[Linux] Comment utiliser la commande echo
Comment installer un package à l'aide d'un référentiel
Comment afficher le résultat de sortie de la commande man Linux dans un fichier
Comment exécuter des scripts Maya Python
Comment diviser et traiter une trame de données à l'aide de la fonction groupby
Réfléchissez à la façon d'écrire un filtre avec les versions Shotgun API-Contact
Comment connaître le nombre de processeurs sans utiliser la commande sar
Comment spécifier un fichier .ui dans la boîte de dialogue / interface graphique du widget dans PySide
Comment réparer la population initiale avec un algorithme génétique utilisant DEAP
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
Comment calculer la volatilité d'une marque
Comment coder un drone en utilisant la reconnaissance d'image
Écrivez automatiquement admin.py à l'aide de la commande admin_generator de django-extensions
Ecrire un serveur TCP à l'aide du module SocketServer
Comment écrire une instruction ShellScript Bash for
Comment écrire un document tuple nommé en 2020
[Go] Comment écrire ou appeler une fonction
Comment mettre en ligne sur un Drive partagé à l'aide de pydrive
Comment désinstaller un module installé à l'aide de setup.py
Créez une commande pour obtenir le journal de travail
Comment écrire une instruction de cas bash ShellScript
Créez une interface graphique sur le terminal à l'aide de curses
[2015/11/19] Comment enregistrer un service localement à l'aide du SDK python avec naoqi os
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python
[Circuit x Python] Comment trouver la fonction de transfert d'un circuit en utilisant Lcapy
Un mémorandum expliquant comment exécuter la commande magique! Sudo dans Jupyter Notebook
Lire la source Python-Markdown: Comment créer un analyseur
Comment créer un article à partir de la ligne de commande
Comment supprimer la chaîne de caractères spécifiée avec la commande sed! !! !!
Comment configurer un environnement Python à l'aide de pyenv
Comment créer un sous-menu avec le plug-in [Blender]
Comment écrire un type liste / dictionnaire de Python3
Comment organiser un séminaire pratique à l'aide de Jupyter à l'aide de Docker
Ajouter un utilisateur Linux, comment utiliser la commande useradd
Comment utiliser la commande grep et des exemples fréquents
Comment créer un package Python à l'aide de VS Code
[Python] Comment écrire une docstring conforme à PEP8
Écrire des données dans KINTONE à l'aide du module de requêtes Python
J'ai fait une commande pour marquer le clip de la table
[Introduction à Python] Comment arrêter la boucle en utilisant break?
Je veux automatiser ssh en utilisant la commande expect!
Comment publier un ticket depuis l'API Shogun
(Rappelez-vous rapidement) Comment utiliser la ligne de commande LINUX
Comment écrire plus rapidement en utilisant numpy comme deque
[Introduction à Python] Comment écrire des instructions répétitives à l'aide d'instructions for
Comment utiliser la commande grep pour rechercher de manière récursive des répertoires et des fichiers à une profondeur spécifiée
Comment tester unitaire une fonction contenant l'heure actuelle à l'aide de Freezegun en Python
XPath Basics (2) - Comment écrire XPath
Comment utiliser le générateur
Comment appeler une fonction
Cloner à l'aide de la commande dd