Kelas jendela QT untuk merancang alat agar dapat kompatibel antara beberapa program VFX.
Tujuan utama kelas ini adalah untuk berintegrasi ke dalam program UI, tetapi juga berisi fitur -fitur bermanfaat seperti berurusan dengan callbacks dengan aman dan secara otomatis menyimpan posisi jendela.
Penggunaan yang dimaksudkan adalah membuat kelas jendela Anda mewarisi VFXWindow - yang merupakan instance dari QMainWindow . Dengan menelepon cls.show() , ia akan meluncurkan jenis jendela yang benar berdasarkan program apa yang dimuat, dan pengaturan apa yang sebelumnya disimpan.
Ini sangat stabil, tetapi masih ada banyak yang membutuhkan perbaikan. Bantuan apa pun dengan memperluas dukungan aplikasi yang ada atau menambahkan aplikasi baru sangat dihargai.
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 ()✔️ Bekerja / ❔ belum teruji / tidak bekerja
| Jendela standar | Jendela berlabuh | Panggilan balik | Versi yang diuji | Linux | Windows | MacOS | |
|---|---|---|---|---|---|---|---|
| Maya | ✔️ | ✔️ | ✔️ | 2011-2016, 2017+ | ✔️ | ✔️ | ❔ |
| Maya (mandiri) | ✔️ | ✔️ | ❔ | ✔️ | ❔ | ||
| Senjata nuklir | ✔️ | ✔️ | ✔️ | 9-14 | ❔ | ✔️ | ❔ |
| Nuke (Terminal) | ✔️ | ✔️ | ❔ | ✔️ | ❔ | ||
| Houdini | ✔️ | 16-19 | ✔️ | ✔️ | ❔ | ||
| Mesin yang tidak nyata | ✔️ | 4.19-4.23, 5.0-5.3 | ✔️ | ❔ | |||
| Blender | ✔️ | ✔️ | 2.8-4.2 | ❔ | ✔️ | ❔ | |
| Blender (latar belakang) | ✔️ | ❔ | 3.1-4.2 | ❔ | ✔️ | ❔ | |
| Katana | ✔️ | 7 | ❔ | ✔️ | ❔ | ||
| 3ds maks | ✔️ | 2018-2020 | ❔ | ✔️ | ❔ | ||
| Pelukis zat | ✔️ | ✔️ | ✔️ | 8.3 | ✔️ | ✔️ | ❔ |
| Perancang zat | ✔️ | ✔️ | ✔️ | 2019.3, 7.1, 12.3 | ✔️ | ✔️ | ❔ |
| Fusi Blackmagic | ✔️ | 9 | ❔ | ✔️ | ❔ | ||
| CryEngine Sandbox | ✔️ | 5.7 | ❔ | ✔️ | ❔ | ||
| Python mandiri | ✔️ | 2.7 (qt4), 3.7-3.9 (qt5) | ❔ | ✔️ | ❔ | ||
| Natron | ✔️ | 2.5 | ❔ | ✔️ | ❔ | ||
| Renderdoc | ✔️ | 1.33 | ❔ | ✔️ | ❔ |
* Arahkan ke atas bidang yang digarisbawahi untuk melihat detail/masalah tambahan.
Aplikasi Windows tertentu memiliki antarmuka COM berbasis pengiriman, yang akan memungkinkan tautan antara Python dan aplikasi. Lihat python-scripting-python untuk contoh tentang cara terhubung ke aplikasi.
Saat ini tidak ada cara untuk meluncurkan VFXWindow dari dalam aplikasi ini.