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 :

Créer une interface de traitement de textes


Sujet :

PyQt Python

  1. #1
    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 Créer une interface de traitement de textes
    Bonjour à tous,

    J'ai initialement pensé à poser ma question directement sur le forum Qt, mais finalement, je me dis que Tyrtamos, Sce@r, VinsS et bien d'autre vont bien me trouver un petit bout de code qui traîne dans leur PC et qui pourra m'aider.

    Donc voici une palle copie de ma demande sur le forum Qt et qui j'espère trouvera une réponse ici ^^
    Dans le cadre d'un projet permettant de créer des fiches techniques je dois réaliser un semblant de traitement de texte. Les fonctionnalités recherchées sont assez simples :
    • gérer le formatage du texte ;
    • gérer l'impression ;
    • gérer les sauts de pages avec entête et pied de pages lors de l'impression ;
    • sauvegarder le travail fait.


    Toutes ces fonctionnalités sont pour ainsi dire mise en place dans mon projet. Cependant afin d'améliorer l'utilisation de celui-ci, je souhaite afficher dans mon programme les saut de pages lorsque celles-ci ont lieu afin d'avoir un vrai WYSIWYG. Et là je bloque un peu... Pour le moment, j'utilise un QScrollArea dans lequel j'y insère un QTextEdit.
    Le contenu de ce QTextEdit est reporté dans un QTextDocument et si le nombre de page de celui-ci augmente d'une page je créée un autre QTextEdit, et ainsi de suite... Mais ça s'arrête là.

    Je viens à vous pour savoir si parmi vous quelqu'un a déjà travailler sur un projet similaire et si oui pourrait-il me donner quelques astuces pour avancer convenablement ?
    Si personne n'a travailler sur ce genre de problématique mais a une idée sur la question, faut surtout pas ce géner .

    Mes principales interrogations étant comment gérer les suppressions de pages nécessaire liées, par exemple, a des suppressions de lignes dans la première page, comment passer l'écriture dans la page 1 automatiquement dans la page 2 sans que l'utilisateur n'intervienne, comment bloquer la zone d'écriture des QTextEdit a ce qui apparaît dans le QScrollArea, etc.
    Le souci c'est que dès que je me pose une question j'en ai une chiée + une qui arrivent
    D'avance merci à tous.

    @+
    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

  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, je suis loin de ton niveau pour une édition avec les sauts de pages.

    J'arrive par contre à imprimer différentes choses (texte simple dans un QTextEdit, texte html dans un pdf pour faire des étiquettes autocollantes avec codes-barres ou des courriers, ...).

    J'aimerais pouvoir imprimer des en-têtes et des bas-de-pages avec un QTextEdit ou un QTextDocument, et je suis surpris de voir que rien n'est prévu dans Qt pour faire ça.

    J'ai traduit en Python la solution C++ (http://developer.qt.nokia.com/faq/an..._qtextdocument), et ça marche.

    Cependant, sauf erreur de codage de ma part, je lui trouve un gros défaut: souvent, la dernière ligne d'une page est coupée (partie supérieure en fin de page, partie inférieure au début de la page suivante): c'est moche. En tout cas, ce n'est pas compatible avec, par exemple, l'édition de courriers à envoyer à quelqu'un (client, ...).

    As-tu ce défaut?
    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
    Je ne me souviens pas l'avoir eu, et là je ne peux pas tester pour le moment car pas sur le bon PC. Par contre, c'est aussi ce code que j'ai traduit en Python et je me souviens très bien avoir modifié d'une part les marges de la classe QPrinter et d'autre part d'avoir rendu un peu plus fonctionnel ce code.

    Par exemple, il suffit que tu modifies la valeur 30 dans painter.translate(0, 30) et pas ailleurs pour que ça te fasse un beau bazar. Peut être est-ce ça ajouté aux marges d'origine qui pose problème.

    Maintenant pour les sauts de pages dans le QTextEdit, je t'avoue avoir mis ça un peu de coté car c'est juste un petit plus que je peux apporter à mon programme alors qu'il reste encore des gros plus à faire .
    J'ai essayé en plus de l'idée donnée précédemment, de créer une ligne tous les X pixel verticaux et modifier le fond du QTextEdit via QStyleSheet pour symboliser une feuille A4, mais rien de franchement bien pour le moment.

    Donc je me contente d'un simple PrinterView pour visionner rapidement le résultat sans devoir passer par la génération d'un fichier et son ouverture avec le programme approprié.

    Au fait je sais pas si tu as pu essayé, mais QTextEdit déborde de fonction permettant facilement de modifier le format du texte, format qui sera tout simplement repris lors de l'impression faite avec QPrinter si tu transformes le texte en html via tontextedi.toHtml()
    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/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
    J'ai rebossé sur ce souci de dernière ligne coupée. Cela vient bien des différentes valeurs que l'on peut mettre pour définir le début de l'entête, du corps ou du pied de page.

    Ça devient tellement gavant que j'ai opté pour une solution toute simple et qui fonctionnement a priori très bien.

    Je commence par définir les marges de mon printer avec la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printer.setPageMargins(MargeGauche, MargeHaut, MargeDroite, MargeBas, Unite)
    en gardant à l'esprit qu'il s'agit des marges du corps de page, puis je colle les éléments de l'entête en utilisant des coordonnées négatives (notamment la position sur l'axe y).
    Et voila a priori, plus de problème lié à une éventuelle coupure de ligne.

    Voila un extrait de mon code actuel :
    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
     
    MargeGauche = 30
    MargeHaut = 130
    MargeDroite = 10
    MargeBas = 40
     
    printer = QtGui.QPrinter()
    printer.setPageMargins(MargeGauche, MargeHaut, MargeDroite, MargeBas, QtGui.QPrinter.DevicePixel)
    printer.setOutputFormat(QtGui.QPrinter.PdfFormat)
    printer.setOutputFileName(fn)
     
    doc = self.textEdit.document()
     
    innerRect = printer.pageRect()
    sizeF = QtCore.QSizeF(innerRect.size().width(), innerRect.size().height())
    doc.setPageSize(sizeF)
     
    contentRect = QtCore.QRect(QtCore.QPoint(0,0), doc.size().toSize())
    currentRect = QtCore.QRect(QtCore.QPoint(0,0), innerRect.size())
     
    painter = QtGui.QPainter(printer)
    count = 0
    painter.save()
    while currentRect.intersects(contentRect):
       doc.drawContents(painter, QtCore.QRectF(currentRect))
       count += 1
       currentRect.translate(0, currentRect.height())
       painter.restore()
       painter.drawImage(0, -110, myLogo)
       painter.drawText(10, printer.pageRect().bottom(), "Footer")
       painter.save()
       painter.translate(0, -currentRect.height() * count)
       if currentRect.intersects(contentRect):
            printer.newPage()
     
    painter.restore()
    painter.end()
    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

  5. #5
    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 cegDv,

    Bravo: ça marche! Je ne rencontre plus de coupure du ligne en bas de page, et de plus, le programme est plus facile à comprendre.

    Voila mon programme de test complet (il ne manque qu'un fichier "test.html"):

    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
    68
    69
    70
    71
    72
    73
    74
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from __future__ import division
    # Python 2.7
     
    import sys, os
    import codecs
    from PyQt4 import QtCore, QtGui
     
    app = QtGui.QApplication(sys.argv)
     
    # chargement du texte html dans le QTextDocument 'doc'
    nf = u"test.html"
    f = codecs.open(nf, 'r', 'utf-8')
    content = f.read()
    f.close()
     
    doc = QtGui.QTextDocument()
    doc.setHtml(content)
     
    fichierpdf = "test.pdf"
     
    printer = QtGui.QPrinter()
    printer.setPaperSize(QtGui.QPrinter.A4)
    printer.setOrientation(QtGui.QPrinter.Portrait)
    printer.setOutputFormat(QtGui.QPrinter.PdfFormat)
    printer.setOutputFileName(fichierpdf)
     
    # pour convertir des mm en pixels en utilisant la résolution
    resolution = printer.resolution()
    mm2px = lambda mm: int(mm/25.4*resolution)
     
    MargeGauche = mm2px(30)
    MargeHaute = mm2px(40)
    MargeDroite = mm2px(10)
    MargeBasse = mm2px(40)
     
    printer.setPageMargins(MargeGauche, MargeHaute, MargeDroite, MargeBasse,
                                                    QtGui.QPrinter.DevicePixel)
    innerRect = printer.pageRect()
    sizeF = QtCore.QSizeF(innerRect.size().width(), innerRect.size().height())
    doc.setPageSize(sizeF)
     
    contentRect = QtCore.QRect(QtCore.QPoint(0,0), doc.size().toSize())
    currentRect = QtCore.QRect(QtCore.QPoint(0,0), innerRect.size())
     
    painter = QtGui.QPainter(printer)
    count = 0
    painter.save()
    while currentRect.intersects(contentRect):
        doc.drawContents(painter, QtCore.QRectF(currentRect))
        count += 1
        currentRect.translate(0, currentRect.height())
        painter.restore()
     
        # impression en-tête (0,0 => coin haut et gauche de la zone d'impression)
        painter.drawText(0, -mm2px(10), u"Header")
        # impression bas de page  (0,0 => coin haut et gauche de la zone d'impression)
        painter.drawText(0, printer.pageRect().height() + mm2px(10), u"Footer %d" % count)
     
        painter.save()
        painter.translate(0, -currentRect.height() * count)
        if currentRect.intersects(contentRect):
             printer.newPage()
     
    painter.restore()
    painter.end()    
     
    # affichage du pdf par le viewer pdf par défaut de l'OS
    if os.path.exists(fichierpdf):
        try:
            os.startfile(fichierpdf) # solution pour Windows
        except:
            os.system('xdg-open ' + fichierpdf)# solution pour les Linux récents
    Cela marche pour des scripts html et des textes normaux.

    J'utilise la fonction de conversion mm2px pour obtenir le format de la page: j'introduis donc les dimensions en mm, et la fonction transforme en pixels. Ceci avec la résolution printer.resolution() en dpi.

    Pour placer les header et footer au bon endroit: le point 0,0 est en haut et à gauche de la zone d'impression.

    J'ai encore quelques points à éclaircir, comme l'embellissement des textes en en-tête et bas de page, mais c'est quasi résolu: merci!
    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

  6. #6
    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


    Content que cela ai pu te dépanner.

    J'ai le même problème que toi pour les entêtes et pieds d'un point de vu qualité d'affichage sur le PDF (notamment qualité du logo déplorable bien que je sois avec un PNG d'1Mo propre à l'écran quand je l'ouvre seul)
    J'ai essayé de modifier la résolution mais sans vraiment avoir un résultat convenable.

    Si jamais tu trouves un truc, hésite pas .
    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

  7. #7
    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,

    Petit complément à mon précédent message: on peut affecter une police de caractères et certains embellissements (taille, gras, italique et souligné) pour les en-têtes et bas de page:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    font = QtGui.QFont()
    font.setFamily("DejaVue Sans")
    font.setPointSize(12)
    font.setBold(True)
    font.setItalic(True)
    font.setUnderline(True) 
     
    painter.setFont(font)
    Cela changera les impressions obtenues par "painter.drawText", mais pas ceux du document principal réalisées par "doc.drawContents".

    Mais ces embellissements changeront tout l'en-tête et/ou tout le bas de page. Ce serait mieux si ceux-ci pouvait être construits et affichés en html, mais ça se complique méchamment... Pour l'instant, j'en reste là.
    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

  8. #8
    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
    Pour ce qui concerne l'impression d'un logo au début de l'entête, c'est assez facile:

    J'ai pris une simple photo que j'ai appelée "logo.jpg" (dimension=1024x768, poids=131ko).

    J'ai défini un rectangle d'impression de cette photo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x=0
    y=-mm2px(20) # c'est à dire -20mm
    width=mm2px(20) # c'est à dire largeur=20mm
    height=mm2px(20/1024*768) # c'est à dire hauteur=20mm/1024*768=15mm pour reproduire le logo sans déformation
    Avec ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rect = QtCore.QRect(x, y, width, height)
    painter.drawImage(rect, QtGui.QImage(u"logo.jpg"))
    Ce qui donne sur le pdf un joli logo en couleur et très bien défini

    Il faut, bien entendu décaler le texte d'en-tête, s'il y en a un, pour éviter le chevauchement.
    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

  9. #9
    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
    Juste une chose à dire : CHHHAAAAAAAMMMMMMPIIIOOOOOONNN DU MMMMOOOONNNNNNDDDDE...


    Nikel, ça le redimensionne au poil.

    Pour l’embellissement, une solution pourrait être d'appliquer un nouveau font dès que voulu.
    Comme c'est une entête ou pied, par définition c'est fixe. Il est donc assez simple de savoir ou placer quoi sans risquer de tout modifier. Qu'en penses-tu ?
    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

  10. #10
    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
    Oui, avec tout ça, on a résolu 99% du problème.

    Par exemple, on peut avoir:

    - en en-tête, un logo suivi par le nom de la Société, de la manifestation ou du document. Ceci avec une police de bonne taille.

    - en bas de page une ligne un peu plus "technique" avec le nom de l'émetteur, la date, le numéro de page et si nécessaire le nom du fichier et le numéro de version pour un document modifié. Ceci avec une police plus petite que l'en-tête.

    Pour l'impression de pages de code d'un logiciel, on peut avoir en en-tête le fichier avec son chemin, et en bas de page la date d'impression (ou la date du fichier), la version du logiciel et le numéro de page. Tout cela avec une police de caractère de type "courier new" ou, mieux, "DejaVue Sans Mono" déjà intégrée dans Qt.

    Pour les numéros de pages, on peut même rappeler sur chaque page le nombre total de pages, puisque dès que le QTextDocument (doc) a été renseigné du rectangle d'impression de la page, on a le nombre total de pages avec doc.pageCount(): on peut donc imprimer quelque chose comme "page 23/45" avec simplement: "page %d/%d" % (count, doc.pageCount()).

    Je n'ai pas essayé, mais on devrait pouvoir mettre un fond gris ou coloré pour les entêtes et bas de page grâce à painter.fillRect.

    A noter que rien n'empêche de mettre des en-têtes et bas de page différents pour la 1ère page et les pages suivantes, voire différents entre les pages paires et les pages impaires puisqu'on compte les pages (=count). Et, pourquoi pas, préparer un fascicule à imprimer recto-verso avec des marges adaptées sur les pages de gauche et de droite...

    Bref, ça commence à ressembler à quelque chose de sérieux... que je ne vais pas tarder à utiliser! A l'occasion d'une manifestation annuelle, un de mes logiciels fabrique 500 courriers personnalisés destinés à 300 destinataires, chacun devant recevoir le(s) sien(s), qu'il ne me reste plus qu'à envoyer en pièce(s) jointe(s) par mail avec Python: ces courriers seront désormais plus "jolis"!

    Merci pour cette discussion qui, manifestement, porte de "bons fruits"
    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

  11. #11
    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
    Oui c'est sûr.

    Il reste le gros morceau de la représentation des sauts de pages dans le QTextEdit... c'est pour moi le dernier gros morceau.

    Au passage, tu as le code pour les envois mails avec PJ ? Si ce n'est pas le cas, j'ai un bout de code qui pourra t'aider.

    Je laisse cette discussion en non résolu tant que je n'ai pas trouvé le moyen de représenter ces sauts de pages.

    @+
    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

  12. #12
    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
    Citation Envoyé par cegDv Voir le message
    Au passage, tu as le code pour les envois mails avec PJ ? Si ce n'est pas le cas, j'ai un bout de code qui pourra t'aider.
    Un grand merci pour ton offre, mais je crois avoir ce qu'il faut.

    Après avoir pataugé un moment sur cette question j'ai passé un peu de temps et j'ai défini un ensemble qui me permet de faire ce que je veux: http://python.jpvweb.com/mesrecettes...xpedition_mail. Cela permet des messages en texte ou en html, et des pièces jointes, avec possibilité de s'adresser à différents serveurs email.

    J'ai développé après un logiciel en PyQt4 pour lancer des mails en masse pour mon association (plusieurs centaines d'emails/plusieurs centaines de destinataires dans le monde entier), avec des pièces jointes qui peuvent être générales ou spécifiques à chaque destinataire. Ceci avec des astuces pour résister à certaines mesures anti-spam (ex: avec une tempo de 36s, on tombe en dessous de 100 messages/heure). Mais je ne le diffuse pas: c'est trop facile de faire du spam avec .
    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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/07/2012, 10h40
  2. Réponses: 7
    Dernier message: 10/01/2007, 18h41
  3. [AJAX] Créer une interface web pour un programme Java
    Par Wookai dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 30/03/2006, 10h10
  4. Créer une interface comme en java
    Par nesquik dans le forum C++
    Réponses: 7
    Dernier message: 01/03/2006, 23h30
  5. J'ai un pb pour créer une interface [100% HTML]
    Par White_Angel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 15/04/2005, 15h55

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