I. L'article original▲
Le Qt Developer Network est un réseau de développeurs utilisant Qt afin de partager leur savoir sur ce framework. Vous pouvez le consulter en anglais.
Nokia, Qt, Qt Quarterly et leurs logos sont des marques déposées de Nokia Corporation en Finlande et/ou dans les autres pays. Les autres marques déposées sont détenues par leurs propriétaires respectifs.
Cet article est la traduction de Alternative Combine.
II. Une autre combinaison▲
On va appeler ce programme combine_alter.py. En fait, il ne fait ni plus, ni moins que le programme précédent, combine.py. Il le fait cependant d'une manière différente, en évitant l'héritage multiple. Bien qu'il soit une fonctionnalité bien pratique de Python, l'héritage multiple est souvent décrié par les développeurs, particulièrement ceux venant d'un autre langage, où cela n'est pas possible.
Même si le début se basait sur cet héritage multiple, on va montrer ici comment faire autrement. Les fichiers Qt Designer et de ressources restent inchangés par rapport à la version précédente.
combine_alter.py n'est pas très différent de la version précédente. On change une ligne d'importation pour ui_combine, bien que ce changement ne soit qu'esthétique. Une variable locale ui est introduite, dès l'initialisation. Comme elle est utilisée ailleurs que dans le constructeur, on la stocke dans une variable de classe (variable membre). Ceci devrait être très commun pour des programmeurs Python, comme les arguments du constructeur passent souvent dans des variables membres.
#!/usr/bin/env python
# combine_alter.py - combination of ShowGPL, About, Close scripts
import
sys
import
platform
import
PySide
from
PySide.QtGui import
QApplication, QMainWindow, QTextEdit, QPushButton,\
QMessageBox, QIcon
__version__
=
'0.0.0'
from
ui_combine import
Ui_MainWindow as
Ui
import
qrc_combine
class
MainWindow
(
QMainWindow):
def
__init__
(
self, parent=
None
):
super(
MainWindow, self).__init__
(
parent)
ui =
Ui
(
)
# Store ui as class variable self.ui
self.ui =
ui
ui.setupUi
(
self)
ui.actionShow_GPL.triggered.connect
(
self.showGPL)
ui.action_About.triggered.connect
(
self.about)
iconToolBar =
self.addToolBar
(
"iconBar.png"
)
ui.actionShow_GPL.setIcon
(
QIcon
(
":/showgpl.png"
))
ui.action_About.setIcon
(
QIcon
(
":/about.png"
))
ui.action_Close.setIcon
(
QIcon
(
":/quit.png"
))
ui.actionShow_GPL.setStatusTip
(
"Show GPL Licence"
)
ui.action_About.setStatusTip
(
"Pop up the About dialog."
)
ui.action_Close.setStatusTip
(
"Close the program."
)
iconToolBar.addAction
(
ui.actionShow_GPL)
iconToolBar.addAction
(
ui.action_About)
iconToolBar.addAction
(
ui.action_Close)
def
showGPL
(
self):
'''Read and display GPL licence.'''
self.ui.textEdit.setText
(
open(
'COPYING.txt'
).read
(
))
def
about
(
self):
'''Popup a box with about message.'''
QMessageBox.about
(
self, "About PyQt, Platform and the like"
,
"""<b> About this program </b> v
%s
<p>Copyright © 2010 Joe Bloggs.
All rights reserved in accordance with
GPL v2 or later - NO WARRANTIES!
<p>This application can be used for
displaying OS and platform details.
<p>Python
%s
- PySide version
%s
- Qt version
%s
on
%s
"""
%
\
(
__version__
, platform.python_version
(
), PySide.__version__
,\
PySide.QtCore.__version__
, platform.system
(
)))
if
__name__
==
'__main__'
:
app =
QApplication
(
sys.argv)
frame =
MainWindow
(
)
frame.show
(
)
app.exec_
(
)
Simplement, c'est une question de goût : avec ou sans l'héritage multiple. Il pourrait être plus simple d'adopter l'une ou l'autre. Quoi qu'il en soit, comme on peut les rencontrer à la lecture de tout programme, il est bon de connaître les deux méthodes.
III. Remerciements▲
Merci à Claude Leloup pour sa relecture attentive !