Lors de mes nombreuses recherches d'informations sur l'API Python dans Maya, je suis tombé sur un post d'un utilisateur qui donnait un code d'exemple pour utiliser PyQt dans Maya. J'ai tous de suite été interpellé. J'avais eu l'occasion de faire du Qt, j'avais abandonné tellement ça m'avais donné des boutons à l'époque. Je débutait en C++ et j'avais déjà du mal à encaisser le coup. Et croyez moi, développer une GUI en C et C++, c'est pas du MEL... Mais j'avais été très impressionné par la doc, les exemples, et les possibilités offerte...

C'est donc avec une certaine curiosité que je me suis penché sur ce post.

QTCkoi?

C'est sur wikipedia! (Un peu de lecture pour vous = Grosse flegme pour moi! :marioCours: )

Pour faire cours, il s'agit d'un framework, un ensemble de lib livré en "pack" qui vous permet de faire quasiment tout...

Remarque

Avant de commencer, sachez que je n'ai testé opération uniquement sur un Maya 32bits, d'après la doc il semble qu'il soit possible de faire fonctionner le module sur un Maya x64 mais il faut faire deux trois choses que je n'ai même pas lu. La documentation "officiel" d'Autodesk est disponible dans:

C:\Program Files\Autodesk\Maya2009\devkit\other\PyQtScripts

On peut commencer.

Let's Go!

4947-frenetik-Pythoncrystal.png Pour que tout ça marche il faut dans un premier temps installer la même version de l'interpréteur Python que Maya, à savoir la "branche" 2.5.x:

http://www.python.org/download/releases/

PyQt_install_001.png

Le troisième numéro étant le numéro des mises à jour critique, ça ne changera rien au fonctionnement.

Installez la version x86:

PyQt_install_002.png

Note au utilisateurs de Python >2.5 il n'est pas nécessaire de cocher l'option "Register Extensions" pour que la manipulation fonctionne (désactiver cette option vous permet de continuer à avoir votre version de Python actuel par défaut).

PyQt

RiverBanklogo.png

Le plus simple est fait. Maintenant il va falloir aller sur le site de PyQt afin de savoir quel version de Qt télécharger. En effet, PyQt ne s'occupe que de faire le lien entre Python et Qt. Il faudra donc installer Qt en premier puis PyQt ensuite. Mais avant nous devons savoir quel version de Qt la dernière version de PyQt supporte (on s'accroche!).

Allez donc sur le site de PyQt:

PyQt_install_006.png

La dernière version pour Python 2.5 (la version utilisé par Maya) est donc la version 4.4.3. Téléchargez là mais ne l'installez pas.

Qt

Qt_logo002.png Une fois que c'est fait, il nous faut aller sur le site de Qt, dans la section download. Mais ne téléchargez rien! En effet, par défaut, le site vous invite à télécharger la dernière version du framework (4.5.2 à l'heure ou j'écris ses lignes)... Tout comme Maya n'utilise pas la dernière version de Python (3.1) et que nous n'avons donc pas télécharger la dernière version de Python. Et bien nous allons devoir ruser un peu.

La méthode la plus simple (celle que j'ai appliqué) consiste à commencer le téléchargement:

PyQt_install_003.png

PyQt_install_004.png

Il ne suffit ensuite plus qu'a copier l'url.

PyQt_install_005.png

Et avec un peut de jugeote, on peut le modifier suivant ce qu'on cherche, à savoir:

http://get.qtsoftware.com/qt/source/qt-win-opensource-4.5.2-mingw.exe

Devient:

http://get.qtsoftware.com/qt/source/qt-win-opensource-4.4.3-mingw.exe
Pas terrible la méthode...

Oui! Ça, c'était la méthode que j'ai trouvé la plus simple.

Qt propose une autre méthode qui consiste à aller "fouiller" dans le ftp du site... Franchement, c'est moyen mais si vous vous sentez l'ame d'un Indiana Johns, allons y.

Dans la page principal des download, en bas a droite:

PyQt_install_007.png

PyQt_install_008.png

(Petite musique d'Indiana Johns en fond) On fait moins le malin là! :mechantCrash:

Comme je suis gentil, je vous donne le chemin:

ftp://ftp.qtsoftware.com/qt/source/qt-win-opensource-4.4.3-mingw.exe

Maintenant que vous l'avez, c'est bon, installez le, vous avez le droit!!!

Petite subtilité au moment de l'install:

PyQt_install_009.png

Cochez la case si vous n'avez pas MinGW (c'est un compilateur. A priori on n'en à pas besoin mais ça me semble plus "propre" de procéder ainsi).

Lancez l'installe:

PyQt_install_009b.png

A la fin, je vous invite à regardez les exemples histoire de voir ce qu'il est possible de faire. :sourit:

Petites Manips Importantes

Il faut "setter" les variables d'environnement. Normalement, ceci est fait automatiquement durant l'installation mais mon système étant en 64 bits (Vista x64), il me semble qu'elle n'ont pas été enregistrer. Heureusement, Trolltech à pensé à nous et il vous suffira de lancer:

C:\Qt\4.4.3\bin\qtvars.bat

Avec des droits administrateur pour faire tout ça à votre place.

PyQt_install_011.png

Ensuite lancez l'installation de PyQt-Py2.5-gpl-4.4.3-1.exe et laissez toute les options par défaut (si Python 2.5 est bien installé tout devrait se passer sans problème).

PyQt_install_010.png

Lancer les exemples (c'est un peu long à se lancer la première fois donc pas d'inquiétude).

Note: Pour les utilisateurs qui n'aurait pas "registré" Python à l'installe de Python 2.5, vous remarquerez que les exemples PyQt ne se lance pas... Bon, perso j'ai quand meme mis 10 minutes avant de comprendre que Windows essayait de les lancez avec la version actuellement enregistré sur mon OS, à savoir: Python 3.1... Pour lancer les exemples, la solution la plus simple semble être d'ouvrir un invite de commande et de lancer quelque chose comme:

C:\Python25>python.exe C:\Python25\Lib\site-packages\PyQt4\examples\tools\qtdemo\qtdemo.pyw

Bon, c'est cool mais pour vous rendre compte des "limitations" (comparé à Qt "normal"), essayez l'exemple Thread/Mandelbrot sur Qt et PyQt... Ça n'a juste rien à voir (En même temps on n'installe pas Qt pour faire des fractals sous Maya...).

Copie-Colle

Dernière étape, il nous faut copier quelques fichiers du répertoire Python 2.5 vers le répertoire Python de Maya.

Allez dans:

C:\Python25\Lib\site-packages

Sélectionnez PyQt4 et sip.pyd.

PyQt_install_012.png

Copiez les dans:

C:\Program Files\Autodesk\Maya2009\Python\Lib\site-packages

Program Files (x86) si comme moi vous êtes sur un OS x64.

PyQt_install_013.png

Takeoff!

Lancez Maya (32bits), ouvrez le Script Editor.

Faites un:

import PyQt4

Lancez:

PyQt_install_014.png

Vous avez gagné!!!

Dernier exemple

Bon, ce billet avait juste pour vocation de vous montrer qu'on pouvait utiliser Qt dans Maya à l'aide de PyQt. Je ne compte pas faire de tutos sur PyQt mais je vous invite à faire vos scripts (envoyez les moi, je les publierai sur cette page) voir mieux, à faire des tutoriaux la dessus!

En attendant, je vous donne un script que j'ai trouvé sur un Google Groupe destiné à Python Dans Maya (ça ressemble un peu à Tkinter):

from __future__ import division
import sys
from math import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Form(QDialog):
    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        self.browser = QTextBrowser()
        self.lineedit = QLineEdit("Type an expression and press Enter")
        self.lineedit.selectAll()    #Select all texts  
        layout = QVBoxLayout()       #Main Layout
        layout.addWidget(self.browser)
        layout.addWidget(self.lineedit)
        self.setLayout(layout)
        self.lineedit.setFocus()
        self.connect(self.lineedit, SIGNAL("returnPressed()"),
            self.updateUi)
        self.setWindowTitle("Farsheed Calculater")
    def updateUi(self):
        try:
 
            text = unicode(self.lineedit.text())
            self.browser.append("%s = <b>%s</b>" % (text, eval(text)))
        except:
            self.browser.append(
            "<font color=red>%s is invalid!</font>" % text)
app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

Par monsieur Farsheed Ashouri, merci à lui :bravo:

PyQt_install_015.png

Et en prod?

Nous y voila, la grande question. Et bien oui, maintenant qu'on s'est cassé le derrière à intégrer tout ça, pourquoi ne pas l'utiliser en prod?

Et bien en ce qui me concerne je pense que c'est une question "de confiance"... En effet, Il y a pas mal d'acteurs qui sont en jeux: Trolltech (Qt), River Bank Computing (PyQt) et Autodesk. Un peut trop celons moi. En effet, le gros problème quand on utilise un binding Python d'un autre projet (par exemple: wxWidget -> wxPython), c'est qu'on est dépendant du bon vouloir des développeurs du bind... Dans le cas de wxPython (voir un ancien billet), les développeurs ne semblait pas chaud à l'idée de passer le projet en Python 3.1 (River Bank Computing à franchis le pas mais c'est bien le seul que j'ai vu pour l'instant, il semble gagner de l'argent avec PyQt cela dis, ça doit surement aider).

Ajoutez à ça qu'il pourrait y avoir des bugs qui apparaissent typiquement en production (vous savez, quand on commence à "vraiment" utiliser un produit, rien ne marche)... Et ses bugs pourrait venir de Maya... Et a mon avis, là vous pouvez vous brosser pour qu'Autodesk résolve le truc... Vu qu'il s'agit aussi d'une ancienne version (Python 2.5 et donc Qt 4.4.3), il n'est pas dit que River Bank Computing soit réactif quand à la résolution des problèmes...

Bref, même si pour l'instant Maya 2009 est en Python 2.5, rien ne dit qu'il ne passera pas à Python 3.1 un jour... Et ce jour là, il faudra que les lib utilisés dans votre pipeline soit compatible au risque de ne pas pouvoir avancer dans les versions... En gros, ça fait un peu de monde à attendre et il est déjà assez dur comme ça d'évoluer un pip' à chaque version d'un logiciel sans s'ajouter des contraintes.

Un soft 3D à déjà un bon paquet de problèmes sans qu'on ait à s'ajouter des potentiels problèmes.

Je ne sais pas si c'est possible mais tant qu'à utiliser Qt (qui est un framework bien balèze à apprendre quand même), autant utiliser l'API Maya en C++. Ça me semble plus "logique": Ça permet de s'affranchir de PyQt et d'avoir des meilleurs perfs (a priori, si on prend Qt, c'est pour utiliser ses outils... Si c'est juste pour faire des boutons, autant utiliser le MEL).

En effet, je pense que quand on commence à intégrer un framework tel que Qt dans Maya (il faut déjà en avoir besoin...), c'est qu'on compte se lancer dans la durée et que les outils créés doivent (tant qu'a faire) être performant...

En ce qui me concerne, si j'avais un studio qui me posait cette question, la réponse serait quelque chose comme:

  • Pourquoi Qt?
  • Les besoins ne peuvent pas être comblé en MEL?
  • Tu connait Qt? PyQt?
  • Combien de temps veut tu que tes outils dure? Le temps d'une prod? Durant toute la durée de vie du studio?

A chacun de voir ;)

N'hésitez pas à donner votre avis sur la question (ou si vous avez eu des problèmes durant ce "tuto")

A bientôt!

Dorian

EDIT 2009 08 21: Dans la mesure ou les prochaines versions de Maya utiliseront pyQT pour les GUI (rien d'officiel mais c'est un secret de Polichinelle), cette conclusion est "deprecated", pire elle est complètement erroné. On peut donc sérieusement commencer à s'y intéresser. N'hésitez pas, si vous connaissez des liens vers des tutos pour pyQT spécifique à Maya! ;)