Developpez.com

Télécharger gratuitement le magazine des développeurs, le bimestriel des développeurs avec une sélection des meilleurs tutoriels

PySide Simplissimus : tout en un

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

Voici la dernière manière de combiner les trois scripts précédents. Dans cette version, on va éliminer le fichier combine.ui et sa version Python, ui_combine.py : on n'utilise donc plus le Qt Designer.

7 commentaires Donner une note à l'article (5)

Article lu   fois.

Les deux auteurs

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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 Combine All In One.

II. Tout combiner

On aura maintenant un grand avantage : moins de fichiers. Par contre, si on décide plus tard de changer l'interface, on ne pourra plus utiliser Qt Designer. Quand le programme n'est qu'une GUI pour un programme sous-jacent, il est parfois utile d'utiliser ce format modifié. En tout cas, certains ouvrages recommandent cette forme, en suggérant qu'elle est aussi facile que la conception avec aide visuelle.

La modification est implémentée en copiant d'abord la procédure setupUi() du fichier ui_combine.py dans le corps du programme. Ensuite, toutes ces lignes sont transférées dans la procédure init() du programme principal. Cela requiert plusieurs modifications. Heureusement, elles représentent une occasion de vérifier la bonne compréhension du processus. On en profite pour déterminer précisément les widgets à importer, comme on n'utilise plus les noms QtCore et QtGui dans le code. Il a soudain l'air plus clair !

 
Sélectionnez
#!/usr/bin/env python
# combine_allin1.py - combination of ShowGPL, About, Close scripts
# The purpose of this version of program is to show implementation 
# of most code in one file - all_in_1!.
 
import sys
import platform
 
import PySide
 
from PySide.QtCore import QRect
from PySide.QtGui import QApplication, QMainWindow, QTextEdit, QPushButton,\
                         QMessageBox,  QIcon, QAction, QWidget, QGridLayout,\
                         QTextEdit, QMenuBar, QMenu, QStatusBar
 
__version__ = '0.0.0'
import qrc_combine
 
class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
#       self.setObjectName("MainWindow")
        self.resize(731, 475)
        centralwidget = QWidget(self)
#       centralwidget.setObjectName("centralwidget")
        gridLayout = QGridLayout(centralwidget)
#       gridLayout.setObjectName("gridLayout")
        # textEdit needs to be a class variable.
        self.textEdit = QTextEdit(centralwidget)
#       self.textEdit.setObjectName("textEdit")
        gridLayout.addWidget(self.textEdit, 0, 0, 1, 1)
        self.setCentralWidget(centralwidget)
        menubar = QMenuBar(self)
        menubar.setGeometry(QRect(0, 0, 731, 29))
#       menubar.setObjectName("menubar")
        menu_File = QMenu(menubar)
#       menu_File.setObjectName("menu_File")
        self.setMenuBar(menubar)
        statusbar = QStatusBar(self)
#       statusbar.setObjectName("statusbar")
        self.setStatusBar(statusbar)
        actionShow_GPL = QAction(self)
#       actionShow_GPL.setObjectName("actionShow_GPL")
        actionShow_GPL.triggered.connect(self.showGPL)
        action_About = QAction(self)
#       action_About.setObjectName("action_About")
        action_About.triggered.connect(self.about)        
        iconToolBar = self.addToolBar("iconBar.png") 
        actionShow_GPL.setIcon(QIcon(":/showgpl.png"))
        action_About.setIcon(QIcon(":/about.png"))
        action_Close = QAction(self)
        action_Close.setCheckable(False)
        action_Close.setObjectName("action_Close")        
        action_Close.setIcon(QIcon(":/quit.png"))
        actionShow_GPL.setStatusTip("Show GPL Licence")
        action_About.setStatusTip("Pop up the About dialog.")
        action_Close.setStatusTip("Close the program.")
        menu_File.addAction(actionShow_GPL)
        menu_File.addAction(action_About)
        menu_File.addAction(action_Close)
        menubar.addAction(menu_File.menuAction())
 
        iconToolBar.addAction(actionShow_GPL)
        iconToolBar.addAction(action_About)
        iconToolBar.addAction(action_Close)
        action_Close.triggered.connect(self.close)
               
    def showGPL(self):
        '''Read and display GPL licence.'''
        self.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 © 2011 Your Name. 
                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()
    sys.exit(app.exec_())

Vous avez fort probablement remarqué que certaines lignes étaient systématiquement commentées : celles qui appellent des méthodes setObjectName(). Pourquoi ? Elles ne sont pas du tout utilisées dans ce tutoriel, le programme fonctionne aussi bien sans elles. Elles ne sont cependant pas juste supprimées, elles proviennent de l'utilisation de Qt Designer et de la conversion avec pyside-uic, elles pourraient être utiles pour certaines situations de débogage. Cela ne coûte donc rien de les commenter.

Ceci est la dernière variation de combinaison explorée. Il est bien temps de venir à un vrai problème d'ingénierie dans lequel on utilise PySide pour la GUI du programme sous-jacent. Le problème est très simple : la détermination de forces dans un treillis. La méthode de résolution et la gestion des données sont réalistes mais pas trop complètes, pour rester dans le cadre d'un tutoriel de débutant pour débutant.

III. Remerciements

Merci à Claude Leloup pour sa relecture attentive !

PySide Simplissimus
PySide Simplissimus
Fermer
À propos
La licence
Combiner la licence, à propos et fermer
Autre combinaison
Tout en un
Une application d'ingénierie
  

Copyright © 2011 Developpez.com 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.