PySide Simplissimus : autre combinaison

PySide Simplissimus : des tutoriels d'une dizaine de minutes pour un débutant par un débutant

| Traducteur : Thibaut Cuvelier | Qt Developer Network |

On peut combiner les trois scripts d'une autre manière que montré précédemment.

Commentez

- Titre : PySide Simplissimus : autre combinaison

- Auteurs : Traducteur : Thibaut Cuvelier, Qt Developer Network

- Parution : 14 mai 2011

- Mise à jour : 12 juillet 2011

- Licence : Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. L'article original

- II. Une autre combinaison

- III. Remerciements

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 !