[PYTHON] So schreiben Sie eine GUI mit dem Befehl maya

** Einführung **

Wenn Sie ein Tool mit Maya erstellen, können Sie eine GUI für das Tool erstellen. Verwenden Sie beim Erstellen mit MEL den Befehl MEL Wenn ich mit Python mache, denke ich, dass es so ist, als würde man PySide verwenden oder MEL von maya.cmds oder pymel aus aufrufen.

Beim Betrachten von Twitter verwenden viele Leute PySide, wenn sie in Python schreiben. Diesmal beim Erstellen einer GUI mit maya.cmds, die auf eine Nischenebene abzielt Es ist bequem, die mit Syntax und "LayoutManager" zu verwenden! Ich werde das vorstellen.

** GUI-Beispiel (MEL) **

Wenn Sie das Beispiel mit maya.cmds mit MEL erstellen, sieht es beispielsweise so aus.

global proc testWindow()
{
//Verarbeitung zum Löschen der alten, wenn die GUI bereits vorhanden ist
if(`window -ex testWindow`) deleteUI testWindow;
string $windowName = `window -title "testWindow" testWindow`;
//GUI erstellen
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;
//GUI anzeigen
showWindow;
}

testWindow()

Wenn Sie die obige MEL ausführen, wird eine solche GUI gestartet. 2019-12-02_12h30_17.png

Lassen Sie uns den Teil des Codes, der die GUI erstellt, farblich kennzeichnen. Der größte rote Rahmen ist columnLayout (das Layout besteht darin, die Elemente vertikal anzuordnen). Platzieren Sie Schaltflächen und Textfelder im Spaltenlayout in der Reihenfolge von oben am blauen Rahmen. Im grünen Rahmen befinden sich drei Schaltflächen und ein Kontrollkästchen in einer Zeile. Wenn Sie beim Schreiben in MEL den Einzug gemäß der Hierarchie im GUI-Layout ändern Der Code ist leichter zu lesen. 2019-12-02_12h46_23.png 2019-12-02_11h13_01.png

** GUI-Beispiel (maya.cmds) **

Das folgende Beispiel wurde von maya.cmds geschrieben.

# !/usr/bin/env python
# -*- coding: utf-8 -*-
    
import maya.cmds as cmds

def testWindow():
    #Verarbeitung zum Löschen der alten, wenn die GUI bereits vorhanden ist
    if cmds.window('testWindow', ex=1):
        cmds.deleteUI('testWindow')
    windowName = cmds.window('testWindow',title='testWindow')
    #GUI erstellen
    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"))
    #GUI anzeigen
    cmds.showWindow()

if __name__ == '__main__':  
    testWindow()

Im Fall von maya.cmds (im Fall von Python) tritt ein Fehler auf, wenn sich der Einzug verschiebt. Es ist nicht möglich, den Einzug entsprechend der Hierarchie im Layout zu ändern. Außerdem wird cmds.setParent ('..') oft angezeigt, daher möchte ich es löschen. .. .. Also hier ist das Hauptthema dieser Zeit! ** ** **

** Verwendung mit Syntax und LayoutManager **

Verwenden Sie die with-Syntax in Kombination mit dem Standardmodul LayoutManager in Maya. Die with-Syntax wird hauptsächlich beim Öffnen und Schließen von Dateien verwendet. Wenn Sie nicht mit verwenden, schreiben Sie als ↓

f = open("test.txt", "r")
print(f.read())
f.close()

Mit können Sie den Teil f.close () weglassen. Glücklicherweise wird die Zeile unter der with-Anweisung eingerückt.

with open("test.txt", "r") as f:
    print(f.read())

LayoutManager verwendet diesen Mechanismus mit Syntax Es ist ein Modul, mit dem Sie den Einzug frei ändern können. Importieren Sie es wie folgt, da es in der Bibliothek von maya.common.ui enthalten ist.

from maya.common.ui import LayoutManager

Das Folgende ist eine Neufassung des GUI-Beispiels unter Verwendung von maya.cmds mit LayoutManager.

# !/usr/bin/env python
# -*- coding: utf-8 -*-
    
import maya.cmds as cmds
from maya.common.ui import LayoutManager

def testWindow():
    #Verarbeitung zum Löschen der alten, wenn die GUI bereits vorhanden ist
    if cmds.window('testWindow', ex=1):
        cmds.deleteUI('testWindow')
    windowName = cmds.window('testWindow',title='testWindow')
    #GUI erstellen
    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"))
    #GUI anzeigen
    cmds.showWindow()

if __name__ == '__main__':  
    testWindow()

Die Position des Einzugs hat sich geändert und cmds.setParent ('..') Es ist weg, also etwas leichter zu sehen!

abschließend

Es ist schwer zu erkennen, ob Sie es nicht benötigen, weil Sie PySide verwenden oder ob Sie den Einzug verlassen Das könnte man denken Ich habe "LayoutManager" nicht gefunden, selbst als ich im Internet gesucht habe, also habe ich es eingeführt. Es ist keine sehr nützliche Funktion, aber wenn es Ihnen gefällt, probieren Sie es aus!

Recommended Posts

So schreiben Sie eine GUI mit dem Befehl maya
So führen Sie einen Befehl mit einem Unterprozess in Python aus
So generieren Sie eine Abfrage mit dem IN-Operator in Django
[sh] Das Speichern der Befehlsausführung führt zu Variablen
Qiita (1) Wie schreibe ich einen Codenamen?
So zeichnen Sie ein Diagramm mit Matplotlib
So erstellen Sie einen Befehl zum Lesen der Einstellungsdatei mit Pyramide
[Linux] Verwendung des Befehls echo
So installieren Sie ein Paket mithilfe eines Repositorys
So geben Sie das Ausgabeergebnis des Linux-Befehls man in eine Datei aus
So führen Sie Maya Python-Skripte aus
Teilen und Verarbeiten eines Datenrahmens mithilfe der Groupby-Funktion
Überlegen Sie, wie Sie einen Filter mit den Shotgun API-Contact-Versionen schreiben
So ermitteln Sie die Anzahl der CPUs ohne den Befehl sar
So geben Sie eine .ui-Datei in der Dialog- / Widget-GUI in PySide an
Wie man die anfängliche Population mit einem genetischen Algorithmus unter Verwendung von DEAP fixiert
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
So berechnen Sie die Volatilität einer Marke
So codieren Sie eine Drohne mithilfe der Bilderkennung
Schreiben Sie admin.py automatisch mit dem Befehl admin_generator von django-extensions
Schreiben Sie einen TCP-Server mit dem SocketServer-Modul
So schreiben Sie einen ShellScript Bash für Anweisung
Wie schreibe ich ein benanntes Tupeldokument im Jahr 2020?
[Go] So schreiben oder rufen Sie eine Funktion auf
Hochladen auf ein freigegebenes Laufwerk mit pydrive
So deinstallieren Sie ein mit setup.py installiertes Modul
Erstellen Sie einen Befehl, um das Arbeitsprotokoll abzurufen
So schreiben Sie eine ShellScript-Bash-Case-Anweisung
Erstellen Sie eine GUI auf dem Terminal mit Flüchen
[19.11.2015] So registrieren Sie einen Dienst lokal mit dem Python SDK bei naoqi os
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy
Ein Memorandum zur Ausführung des Befehls! Sudo magic in Jupyter Notebook
Lesen Sie die Python-Markdown-Quelle: So erstellen Sie einen Parser
So erstellen Sie einen Artikel über die Befehlszeile
So löschen Sie die angegebene Zeichenfolge mit dem Befehl sed! !! !!
So richten Sie eine Python-Umgebung mit pyenv ein
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
Wie man ein praktisches Seminar mit Jupyter mit Docker abhält
Linux-Benutzer hinzufügen, wie der Befehl useradd verwendet wird
Verwendung des Befehls grep und häufiger Samples
So erstellen Sie ein Python-Paket mit VS Code
[Python] So schreiben Sie eine Dokumentzeichenfolge, die PEP8 entspricht
Schreiben Sie Daten mit dem Python-Anforderungsmodul in KINTONE
Ich habe einen Befehl zum Markieren des Tabellenclips gegeben
[Einführung in Python] Wie stoppe ich die Schleife mit break?
Ich möchte ssh mit dem Befehl expected automatisieren!
So veröffentlichen Sie ein Ticket über die Shogun-API
(Denken Sie schnell daran) Verwendung der LINUX-Befehlszeile
Wie man schneller schreibt, wenn man numpy wie deque verwendet
[Einführung in Python] So schreiben Sie sich wiederholende Anweisungen mit for-Anweisungen
Verwendung des Befehls grep zum rekursiven Durchsuchen von Verzeichnissen und Dateien bis zu einer bestimmten Tiefe
So testen Sie eine Funktion, die die aktuelle Zeit enthält, mit Freezegun in Python
XPath-Grundlagen (2) - So schreiben Sie XPath
Verwendung des Generators
So rufen Sie eine Funktion auf
Klonen Sie mit dem Befehl dd