I. Transformer son fichier ui en code Python exécutable▲
Très simple, il suffit de lancer cette commande :
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.
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) :
# -*- 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▲
-
Création d'un fichier projet portant l'extension pro ; par exemple pour l'application reStInPeace (reStInPeace.pro) :
SélectionnezFORMS += 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électionnezpylupdate4 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 :
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 :
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 !