QT -Fensterklasse für das Entwerfen von Tools, die zwischen mehreren VFX -Programmen kompatibel sind.
Der Hauptzweck der Klasse besteht darin, in die Programme zur Programme zur Programme zu integrieren, enthält jedoch auch hilfreiche Funktionen wie sicher mit Rückrufen und automatisch das Speichern der Fensterposition.
Die beabsichtigte Verwendung besteht darin, Ihre Fensterklasse VFXWindow zu erben - eine Instanz von QMainWindow . Durch den Aufruf von cls.show() startet es den richtigen Fenstertyp basierend auf dem geladenen Programm und den zuvor gespeicherten Einstellungen.
Dies ist vollkommen stabil, aber es gibt immer noch viel, was verbessert werden muss. Jede Hilfe bei der Erweiterung vorhandener Anwendungsunterstützung oder dem Hinzufügen neuer Anwendungen wird sehr geschätzt.
pip install vfxwindow
from Qt import QtWidgets
from vfxwindow import VFXWindow
class MyWindow ( VFXWindow ):
"""Test window to show off some features."""
WindowID = 'vfx.window.test'
WindowName = 'My Window'
WindowDockable = True
def __init__ ( self , parent = None , ** kwargs ):
super ( MyWindow , self ). __init__ ( parent , ** kwargs )
# Setup widgets/build UI here as you normally would
self . setCentralWidget ( QtWidgets . QWidget ())
# Setup callbacks
self . callbacks . add ( 'file.new' , self . afterSceneChange )
self . callbacks . add ( 'file.load' , self . afterSceneChange )
if self . application == 'Maya' : # Maya supports before/after callbacks
self . callbacks . add ( 'file.new.before' , self . beforeSceneChange )
self . callbacks . add ( 'file.load.before' , self . beforeSceneChange )
elif self . application in ( 'Nuke' , 'Substance' ): # Nuke and Painter/Designer support close
self . callbacks . add ( 'file.close' , self . beforeSceneChange )
# Wait until the program is ready before triggering the new scene method
self . deferred ( self . afterSceneChange )
def afterSceneChange ( self , * args ):
"""Create the scene specific callbacks.
These are being created in a callback "group".
Subgroups are also supported.
Even though the callback is the same, the signatures can differ.
See '/vfxwindow/<app>/callbacks.py' for the relevant signatures.
"""
if self . application == 'Maya' :
self . callbacks [ 'scene' ]. add ( 'node.add' , self . mayaNodeAdded , nodeType = 'dependNode' )
if self . application == 'Nuke' :
self . callbacks [ 'scene' ]. add ( 'node.add' , self . nukeNodeAdded )
def beforeSceneChange ( self , * args ):
"""Delete the scene specific callbacks."""
self . callbacks [ 'scene' ]. delete ()
def mayaNodeAdded ( self , node , clientData ):
"""Print out the node that was added in Maya."""
import maya . api . OpenMaya as om2
print ( 'Node was added: {}' . format ( om2 . MFnDependencyNode ( node ). name ()))
def nukeNodeAdded ( self ):
"""Print out the node that was added in Nuke."""
import nuke
node = nuke . thisNode ()
print ( 'Node was added: {}' . format ( node . name () or 'Root' ))
def checkForChanges ( self ):
"""Update the UI if it is has been in a "paused" state.
This is needed for Nuke and Substance Designer/Painter, because
there's no way to detect if the window is closed or just hidden.
For safety all callbacks will get paused, and upon unpausing,
this method will be run to allow the window to correctly update.
"""
self . beforeSceneChange ()
self . afterSceneChange ()
if __name__ == '__main__' :
MyWindow . show ()✔️ Arbeiten / ❔ ungetestet / nicht arbeiten
| Standardfenster | Fenster angedockt | Rückrufe | Getestete Versionen | Linux | Fenster | Macos | |
|---|---|---|---|---|---|---|---|
| Maya | ✔️ | ✔️ | ✔️ | 2011-2016, 2017+ | ✔️ | ✔️ | ❔ |
| Maya (eigenständig) | ✔️ | ✔️ | ❔ | ✔️ | ❔ | ||
| Nuke | ✔️ | ✔️ | ✔️ | 9-14 | ❔ | ✔️ | ❔ |
| Nuke (Terminal) | ✔️ | ✔️ | ❔ | ✔️ | ❔ | ||
| Houdini | ✔️ | 16-19 | ✔️ | ✔️ | ❔ | ||
| Unwirklicher Motor | ✔️ | 4.19-4.23, 5.0-5.3 | ✔️ | ❔ | |||
| Mixer | ✔️ | ✔️ | 2.8-4.2 | ❔ | ✔️ | ❔ | |
| Mixer (Hintergrund) | ✔️ | ❔ | 3.1-4.2 | ❔ | ✔️ | ❔ | |
| Katana | ✔️ | 7 | ❔ | ✔️ | ❔ | ||
| 3ds max | ✔️ | 2018-2020 | ❔ | ✔️ | ❔ | ||
| Substanzmaler | ✔️ | ✔️ | ✔️ | 8.3 | ✔️ | ✔️ | ❔ |
| Substanzdesigner | ✔️ | ✔️ | ✔️ | 2019.3, 7.1, 12.3 | ✔️ | ✔️ | ❔ |
| Blackmagische Fusion | ✔️ | 9 | ❔ | ✔️ | ❔ | ||
| Cryengine Sandbox | ✔️ | 5.7 | ❔ | ✔️ | ❔ | ||
| Eigenständiges Python | ✔️ | 2.7 (Qt4), 3.7-3.9 (Qt5) | ❔ | ✔️ | ❔ | ||
| Natron | ✔️ | 2.5 | ❔ | ✔️ | ❔ | ||
| Renderdoc | ✔️ | 1.33 | ❔ | ✔️ | ❔ |
* Bewegen Sie über unterstrichene Felder, um zusätzliche Details/Probleme anzuzeigen.
Bestimmte Windows -Anwendungen verfügen über eine Versand -basierte COM -Schnittstelle, mit der eine Verbindung zwischen Python und der Anwendung verbunden ist. Eine Beispiel für eine Verbindung zu einer Anwendung finden Sie unter Photoshop-Scripting-Python.
Derzeit gibt es keine Möglichkeit, VFXWindow aus diesen Anwendungen aus zu starten.