IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

PyQT sans définir des classes "maison"


Sujet :

PyQt Python

  1. #1
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut PyQT sans définir des classes "maison"
    Bonjour.

    J'ai enseigné l'ISN en Terminale S cette année. Ceci s'adresse à des débutants en programmation et pour les interfaces graphiques, faute de temps, j'ai utilisé tkinter mais je suis entrain de passer mes exemples en version PyQT avec la contrainte de ne pas faire de la POO (c'est pour les élèves et non pour moi car je pratique la POO et j'adore cela).

    J'y arrive pour les cas qui m'intéressent mais j'aimerais savoir si quelqu'un avait déjà vu des exemples d'utilisation de PyQT sans passer par de la POO.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    PyQt n'est-il pas orienté objet par essence ?

    Qu'entends-tu exactement par "sans passer par la POO" ?

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'avoue que j'aurais beaucoup de mal à faire ça. Mais si je devais le faire, je crois que je ferais un sous-ensemble fermé de PyQt composé de fonctions.

    Un petit exemple qui me vient à l'esprit: mettre tout ce qui est habituellement sous <if __name__ == "__main__":> dans une fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def boucleqt(Fenetre):
        app = QtWidgets.QApplication(sys.argv)
        fen = Fenetre()
        fen.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        fen.show()
        sys.exit(app.exec_())
    Bien sûr, cette fonction boucleqt devrait être rendue disponible dans une bibliothèque à importer. Par exemple bibqtgene.py.

    Avec ça, voilà un petit code mini qui ferait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    import sys
     
    from bibqtgene import boucleqt
     
    from PyQt5 import (QtWidgets, QtCore)
     
    #############################################################################
    class Fenetre(QtWidgets.QWidget):
     
        def __init__(self, parent=None):
            super(Fenetre, self).__init__(parent)
     
            self.bouton = QtWidgets.QPushButton("bouton", self)
            self.bouton.clicked.connect(self.clictest)
     
            posit = QtWidgets.QGridLayout()
            posit.addWidget(self.bouton, 0, 0)
            self.setLayout(posit)
     
        def clictest(self):
            QtWidgets.QMessageBox.information(self, 
                "test", 
                "clic!")
     
    #############################################################################
    if __name__ == "__main__":
     
        boucleqt(Fenetre)
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Autant tkinter est simple à appréhender, pour débuter on peut se passer d'utiliser de l'oo, enfin du moins que ça reste dans des applications pas trop complexes.

    Mais pour une bibliothèque aussi complexe et fournie l'usine à gaz qu'est pyqt, je vois pas trop l'intérêt de débuter dessus sans avoir comme pré-requis de très bonnes notions en poo, enfin moi je trouverais ça contradictoire, c'est un peu mettre la charrue avant les boeufs.
    Le temps ronge l'amour comme l'acide.

  5. #5
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Bonjour.

    J'ai changé le titre de mon message car on doit de toute façon utiliser les méthodes et les attributs des objets PyQT.

    Comparé à tkinter, je pense que PyQT est bien plus logiquement structuré et du coup aussi structurant pour un débutant.

    Voici par exemple un code sans classe "maison".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
     
    import random
    import sys
     
    dx = 4
    i = 0
     
    def repeat():
        global i, dx, rect_1, rect_2, rect_3, scene
     
        i += 1
     
        rect_1.setRect(10 + dx, 15, 90 - 2*dx, 60)
     
        dx = -dx
     
        rgb = [random.randint(0, 255) for _ in range(3)]
     
        color = QColor(*rgb)
        brush = QBrush(color)
        rect_3.setBrush(brush)
     
        if i == 3:
            scene.removeItem(rect_2)
     
    racine = QApplication(sys.argv)
     
    scene = QGraphicsScene()
     
    color = QColor(0, 0, 0)
    brush = QBrush(color)
    color = QColor(255, 0, 0)
    pen = QPen(color)
    rect_1 = scene.addRect(10, 15, 90, 60, pen = pen, brush = brush)
     
    color = QColor(0, 255, 0)
    brush = QBrush(color)
    rect_2 = scene.addRect(130, 15, 90, 60, brush = brush)
     
    color = QColor(0, 0, 255)
    brush = QBrush(color)
    rect_3 = scene.addRect(250, 15, 90, 60, brush = brush)
     
    timer = QTimer()
    timer.timeout.connect(repeat)
    timer.start(500)
     
    view = QGraphicsView(scene)
    view.show()
     
    racine.exec_()
    Et non PyQT n'est pas une usine à gaz, c'est juste une bibliothèque dont il est dur, voire impossible, de trouver une doc en français. Il faut savoir passer des codes C++ à Python, ce qui est à peu près facile à faire.

    Mon usage de tkinter a montré des comportements parfois étranges, des choses inutilement difficiles à obtenir... etc.

    Enfin avec PyQT, on donne accès facilement ou presque à la manipulation de flux audio et vidéo.

Discussions similaires

  1. progressBar(pyqt) sans savoir la fin
    Par h2qutc dans le forum Général Python
    Réponses: 3
    Dernier message: 13/11/2013, 17h11
  2. [PHP 5.0] [Optimisation] - MVC, avec ou sans POO ? Avec ou sans Framework ?
    Par Astriel dans le forum Langage
    Réponses: 10
    Dernier message: 07/02/2011, 15h32
  3. [Images] Redimensionner des images sans POO
    Par gcvoiron dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 31/10/2007, 08h37
  4. Réponses: 16
    Dernier message: 06/06/2007, 13h42
  5. [POO] PHP 5 : aggregate sans refkit
    Par laurent_h dans le forum Langage
    Réponses: 40
    Dernier message: 18/12/2006, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo