I. Transformer son fichier ui en code Python exécutable

Très simple, il suffit de lancer cette commande :

 
Sélectionnez
pyuic4 -o ui_fichier.py -x fichier.ui

Le fait de faire précéder le nom du fichier Python par ui_ est une convention que je vous conseille fortement de suivre. Vous saurez ainsi à vue d'œil si ce fichier a été automatiquement généré ou non.

Le fichier ainsi généré ne comporte qu'une classe, qui se nomme Ui_XXX, où XXX est le nom donné dans le designer au widget racine de l'arborescence.

II. Les fichiers de ressources

pyrcc4 est l'équivalent PyQt de l'utilitaire Qt rcc et est utilisé exactement de la même façon. pyrcc4 lit le fichier .qrc et les fichiers ressources et produit un module Python qui doit seulement être importé par l'application afin que ces ressources soient disponibles comme s'il s'agissait des fichiers originaux.

Pyrcc4 ne sera inclus que si votre copie de Qt inclut le module XML.

Une fois le fichier de ressources créé dans QtDesigner, nommons-le fichier.qrc. Il vous suffira de lancer la commande suivante pour le compiler. Attention au nom du fichier Python ainsi créé, il est suivi de _rc.

 
Sélectionnez
pyrcc4 fichier.qrc -o fichier_rc.py

Pourquoi le nommer ainsi ? Lancez votre programme principal généré à l'étape précédente. Vous verrez que celui-ci suppose que le nom du fichier de ressources est le nom du fichier rc (ici fichier), suivi de _rc.

Bien sûr, on peut aussi modifier le fichier principal pour que celui-ci importe un autre nom. Mais c'est une mauvaise idée, étant donné que celui-ci est généré automatiquement. Il convient donc de prendre de bonnes habitudes dès à présent.

III. Créer un fichier principal pour lancer l'application

Il suffit de créer un fichier comme celui-ci (à condition que votre fichier généré se nomme ui_fichier) :

 
Sélectionnez
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui, QtCore
from ui_fichier import Ui_MainWindow

class MonAppli(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)

        # Configure l'interface utilisateur.
        self.setupUi(self)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = MonAppli()
    window.show()
    sys.exit(app.exec_())

et le tour est joué !

IV. Traduire son application

Le procédé de traduction d'une application PyQt4 s'opère en plusieurs étapes distinctes.
  • Création d'un fichier projet portant l'extension pro ; par exemple pour l'application reStInPeace (reStInPeace.pro) :

     
    Sélectionnez
    FORMS            += ui_restester.ui
    FORMS            += ui_about.ui
    FORMS            += ui_converter.ui
    FORMS            += ui_preferences.ui
    SOURCES          += reStInPeace.py
    TRANSLATIONS     += reStInPeace_fr_FR.ts
    
  • Lancer pylupdate4 sur le fichier le fichier .pro :

     
    Sélectionnez
    pylupdate4 reStInPeace.pro
    

    Nous obtenons ainsi en sortie un fichier reStInPeace_fr_FR.ts, l'extension ts signifie translation (traduction, en français).

  • Maintenant, il nous faut lancer l'utilitaire QLinguist et charger le fichier ts précédent. La traduction s'opère alors par le biais d'une GUI. Une fois traduite, enregistrer son fichier et aller dans le menu File/Release pour générer un binaire de traduction portant l'extension qm.

  • Il ne reste plus qu'à charger la traduction au lancement de l'application (j'ai placé ce bout de code dans la boucle main de mon application) :

     
    Sélectionnez
    ## Translation process
    locale = QtCore.QLocale.system().name()
    qtTranslator = QtCore.QTranslator()
    if qtTranslator.load("qt_" + locale):
        app.installTranslator(qtTranslator)
    appTranslator = QtCore.QTranslator()
    if appTranslator.load("reStInPeace_" + locale):
        app.installTranslator(appTranslator)
    
  • Votre application détecte alors automatiquement quelle est la langue par défaut sur votre système et charge la traduction le cas échéant.

V. Un Emacs keybinding en deux coups de cuillère à pot

Pour créer un raccourci clavier facilement, on utilise QKeySequence, comme ici :

 
Sélectionnez
QtGui.QKeySequence("Ctrl+E"))

Et on l'associe ensuite à une action.

Ce que vous ne saviez peut-être pas, c'est que QKeySequence peut prendre en charge plusieurs arguments séparés par une virgule. On peut aller ainsi jusqu'à quatre combinaisons de touches à la fois.

On pourra ainsi définir de faire une action quelconque sur la combinaison Alt+X suivi de Ctrl+C en définissant notre QKeySequence par :

 
Sélectionnez
QtGui.QKeySequence("Alt+X, Ctrl+C")

Ce qui nous donne un joli Emacs keybinding sans aucun effort supplémentaire.

VI. Remerciements

Un tout grand merci à Karzoff pour sa relecture orthographique !