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 :

Classes PyQt et doublons avec des modules Python


Sujet :

PyQt Python

  1. #1
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut Classes PyQt et doublons avec des modules Python
    Bonjour,

    Il y a une question qui me taraude concernant PyQt et les modules python qui se chevauchent (c'est-à-dire qui ont la même "utilité" ou finalité), par exemple Qthread et threading, QXml et les modules XML de python, les modules python réseaux (TCP, UDP, HTTP, HTTPS [client comme serveur], Mail, etc.) qui ont souvent un pendant sous Qt.

    Ma question est relativement simple: Quand on travail avec PyQt et que l'on dispose d'une classe Qt et d'un module python qui sont peu ou prou équivalents, mieux vaut choisir les classes de Qt ou alors les modules python ?

    Y'a-t-il des cas où il vaut mieux choisir l'un que l'autre, ou généralement c'est interchangeable ? [là je me pose surtout la question au niveau du threading dans une interface avec pyQt, donc plutôt QThread ou le module python threading ?]

    Merci

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    En ce qui me concerne, mais je ne suis pas sûr d'avoir raison, j'utilise de préférence les fonctionnalités de PyQt4 quand elles sont en double avec Python, sauf cas particulier (comme les accès sqlite3 sans graphique, parce que la bibliothèque sqlite3 de PyQt4 est en retard de version).

    Mon raisonnement est que PyQt4 est la bibliothèque graphique utilisée par le bureau graphique KDE sur Linux, et qu'il est donc normal qu'elle comporte des fonctionnalités en double par rapport à Python, mais que ces fonctionnalités PyQt4 sont "probablement" plus intégrées au code graphique.

    Prenons l'exemple de QThread. Si de toute manière on ne doit pas utiliser d'instructions graphiques dans un thread, on doit pouvoir envoyer un signal au graphique ('emit'): est-ce que ça marcherait dans tous les cas avec le module threading de Python, je ne sais pas. Mais en tout cas, ça marche très bien avec QThread, et c'est normal que ça marche!
    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

  3. #3
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Pour ma part si j'ai le choix (enfin surtout si je vois que j'ai le choix ) entre un module Python ou un module PyQt je choisis le module PyQt.

    À plusieurs reprises j'ai naturellement essayé avec les outils propres à Python et j'ai très souvent rencontré des problèmes. En passant avec les modules PyQt, plus aucun souci.

    À titre d'exemple dans ce code :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    from PyQt4 import QtCore
    import zipfile,  os.path,  glob,  os,  shutil,  sys
     
    PROJECT_PATH = os.path.dirname(sys.argv[0])
     
    lib = ['$$nom$$', '$$prenom$$',  '$$age$$']
    liste = ['Mon nom',  'mon prénom',  'mon age']
     
    class ModifOpenXml():
        def __init__(self,  src,  dst,  listeIn,  listeOut):
            self.src = PROJECT_PATH +"\\"+ src
            self.temp = PROJECT_PATH +"\\temp"
            self.tempZip = PROJECT_PATH +"\\temp.zip"
            self.dst = dst
            self.listeIn = listeIn
            self.listeOut = listeOut
     
        def modifOpenXml(self):
            shutil.copyfile(self.src, self.tempZip)
            zfile = zipfile.ZipFile(self.tempZip, 'r')
            zfile.extractall(self.temp)
            zfile.close()
     
            formatOOo = (self.dst[len(self.dst)-4:len(self.dst)])
            formatMS = (self.dst[len(self.dst)-5:len(self.dst)])
            if  formatOOo == ".ods" or formatOOo== ".odt":
                content = self.temp+'\\content.xml'
            elif formatMS== ".xlsx":
                content = self.temp+'\\xl\\sharedStrings.xml'
     
            file = QtCore.QFile(content)
            file.open(QtCore.QIODevice.ReadOnly)
            ch = file.readAll()
            for i in self.listeIn:
                ch.replace(i, self.listeOut[self.listeIn.index(i)].encode('utf-8'))
            file.close()
            os.remove(content)
     
            file = QtCore.QFile(content)
            file.open(QtCore.QIODevice.WriteOnly)
            file.write(ch)
            file.close()
     
            lenpathparent = len(self.temp)+1 
            def zipdirectory(zfile, path):
                for i in glob.glob(path+'\\*'):
                    if os.path.isdir(i): zipdirectory(zfile, i )
                    else: zfile.write(i, i[lenpathparent:]) 
     
            zfile = zipfile.ZipFile(self.dst,'w',compression=zipfile.ZIP_DEFLATED)
            zipdirectory(zfile, self.temp)
            zfile.close()
     
            shutil.rmtree(self.temp)
            os.remove(self.tempZip)
     
    def select(num):
            if num == 1:
                app = ModifOpenXml('template.ods',  'fichier_de_sortie.ods',  lib,  liste)
            elif num == 2:
                app = ModifOpenXml('template.odt',  'fichier_de_sortie.odt',  lib,  liste)
            elif num == 3:
                app = ModifOpenXml('template.xlsx',  'fichier_de_sortie.xlsx',  lib,  liste)
     
            app.modifOpenXml()
     
    select(2)
    j'avais dans un premier temps essayé d'ouvrir le fichier .xml sans passer par QtCore.QFile et le résultat n'était pas satisfaisant. Là il l'est.

    D'autre part, PyQt fait tellement de choses que pour moi, et depuis que je le connais, je considère plus Python comme un outil pour faire du Qt sans passer par C++() que comme une biblio graphique.
    Donc dès que je le peux (et surtout que j'y pense ^^), c'est PyQt et rien d'autre.

    Vivement qu'ils se décident à améliorer la communication avec les formats .odt et que les autres formats odf soient supportés
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour à tous,

    merci à tous deux pour vos réponses (et désolé pour le retard) qui me confortent dans l'idée qu'il vaut mieux utiliser l'API Qt quand on travail sur une application utilisant ce framework.

    Encore merci

    P.S: sympa le bout de code Jiyuu.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut

    Ça serait encore plus sympa si cela pouvait fonctionner correctement avec MS Office... A priori ce dernier aime pas ma façon "brutale" de modifier un .xlsx

    Au passage, si ce code t'intéresse (enfin si manipuler des ODF t'intéresse), je te conseille vivement de jeter un oeil sur le module ezodf que j'ai découvert après avoir pondu mon petit bout de code ci-dessus.

    Je n'ai pas encore trouver d'équivalent en Qt ^^, à ma grande tristesse d'ailleurs
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Techniques et Conseils] Creer un logiciel extensible ( avec des modules )
    Par handsome01 dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 12/01/2014, 23h59
  2. [AC-2007] Supprimer les doublons avec un module
    Par ziedyah dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/12/2012, 07h20
  3. Réponses: 0
    Dernier message: 10/09/2010, 17h30
  4. release perform problème avec des modules
    Par storm_2000 dans le forum Maven
    Réponses: 4
    Dernier message: 29/12/2009, 00h13
  5. évolution des modules python et pygame
    Par kromartien dans le forum Programmation multimédia/Jeux
    Réponses: 1
    Dernier message: 15/03/2008, 15h35

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