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 :

bordure de cellule


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Par défaut bordure de cellule
    Voici un petit moment que je cherche et je préfère demander de l'aide car je ne trouve pas ?
    ma question est : comment faire pour imprimer 2 tableaux le premier avec une bordure comme dans un tableur, le second sans bordure !!!
    voici un petit bout de code si vous pouvez m'aider.
    Merci d'avance.
    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
    #premier tableau avec bordure
    orderTableFormat = QtGui.QTextTableFormat()
    orderTableFormat.setAlignment(QtCore.Qt.AlignCenter)
    orderTable = cursor.insertTable(1,1, orderTableFormat)
    orderFrameFormat = cursor.currentFrame().frameFormat()
    orderFrameFormat.setBorder(1)
    cursor.currentFrame().setFrameFormat(orderFrameFormat)
    cursor = orderTable.cellAt(0, 0).firstCursorPosition().setBlockFormat(alignCentrer)
    cursor = orderTable.cellAt(0, 0).lastCursorPosition()
    cursor.insertText('essai',titreFormat)
     
    #second tableau sans bordure
    orderTableFormat2 = QtGui.QTextTableFormat()
    orderTableFormat2.setAlignment(QtCore.Qt.AlignCenter)
    orderTable2 = cursor.insertTable(1,1, orderTableFormat2)
    orderFrameFormat2 = cursor.currentFrame().frameFormat()
    orderFrameFormat2.setBorder(0)
    cursor.currentFrame().setFrameFormat(orderFrameFormat2)
    cursor = orderTable2.cellAt(0, 0).firstCursorPosition().setBlockFormat(alignCentrer)
    cursor = orderTable2.cellAt(0, 0).lastCursorPosition()
    cursor.insertText('essai',titreFormat)

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

    J'aimerais bien t'aider, mais comme je n'ai jamais utilisé ça, pourrais-tu donner un petit code de test qui montre le problème et qui est suffisamment complet pour qu'on puisse l'exécuter?

  3. #3
    Membre confirmé
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Par défaut
    Voici un bout de code pour vérifier mes constats :
    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
    import tkinter as Tk
    from PySide import QtCore,QtGui
    import sys
     
    def imprime():
        Appli=QtGui.QApplication(sys.argv)
        editor = QtGui.QTextEdit()
        cursor = editor.textCursor()
        cursor.movePosition(QtGui.QTextCursor.Start)
     
        textFormat = QtGui.QTextCharFormat()
        textFormat.setFontPointSize(10)
     
        alignCentrer= QtGui.QTextBlockFormat()
        alignCentrer.setAlignment(QtCore.Qt.AlignCenter)
     
        #premier tableau avec bordure
        orderTableFormat = QtGui.QTextTableFormat()
        orderTableFormat.setAlignment(QtCore.Qt.AlignCenter)
        orderTable = cursor.insertTable(1,1, orderTableFormat)
        orderFrameFormat = cursor.currentFrame().frameFormat()
        orderFrameFormat.setBorder(1)
        orderFrameFormat.setBorderStyle(QtGui.QTextTableFormat.BorderStyle.BorderStyle_Groove)
        cursor.currentFrame().setFrameFormat(orderFrameFormat)
        cursor = orderTable.cellAt(0, 0).firstCursorPosition().setBlockFormat(alignCentrer)
        cursor = orderTable.cellAt(0, 0).lastCursorPosition()
        cursor.insertText(' essai ',textFormat)
     
     
        cursor.movePosition(QtGui.QTextCursor.End)
     
     
        cursor.insertBlock()
        cursor.insertBlock()
     
     
        #second tableau sans bordure
        orderTableFormat2 = QtGui.QTextTableFormat()
        orderTableFormat2.setAlignment(QtCore.Qt.AlignLeft)
        orderTable2 = cursor.insertTable(1,1, orderTableFormat2)
        orderFrameFormat2 = cursor.currentFrame().frameFormat()
        orderFrameFormat2.setBorder(0)
     
        cursor.currentFrame().setFrameFormat(orderFrameFormat2)
        cursor = orderTable2.cellAt(0, 0).firstCursorPosition().setBlockFormat(alignCentrer)
        cursor = orderTable2.cellAt(0, 0).lastCursorPosition()
        cursor.insertText(' essai ',textFormat)
     
        dialog = QtGui.QPrintPreviewDialog()
        dialog.paintRequested.connect(editor.print_)
        dialog.exec_()
     
    root = Tk.Tk()
    btn = Tk.Button(root,text='imprime',command=imprime)
    btn.pack()
    root.mainloop()
    je pense avoir résolu le problème, mais ton avis m'interresse.
    en replaçant le curseur en fin de document entre les deux tableaux
    'cursor.movePosition(QtGui.QTextCursor.End)'
    j'obtiens ce que je veux (si tu as une autre solution ?)
    Mais je ne peux pas utiliser un style de bordure différent avec 'orderFrameFormat.setBorderStyle' ???

    En dernier est-il possible d'enregistrer en fichier pdf les données en même temps que je les imprimes ?

    Merci beaucoup de ton aide.

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

    Au départ, j'ai été déconcerté par le mélange tkinter et pyside, mais il s'agit ici de profiter des facilités d'impression de Qt dans un programme tkinter. Pourquoi pas.

    Difficulté pour moi: tu travailles avec "Python 3.x / Pyside" et moi avec "Python 2.7 / PyQt4". Comme je ne souhaitais pas modifier mon installation actuelle, je te propose un code dans mon contexte: tu ne devrais pas avoir de problème pour le convertir.

    J'ai essayé en même temps de simplifier ton code: tu rajouteras ce qui manque. J'ai supprimé la référence à un QTextEdit: la référence à un widget graphique dans ton contexte n'est pas utile, et on peut travailler directement avec un QTextDocument. En tout cas, le but est atteint: une case est affichée avec son entourage, et l'autre non:

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    #Python 2.7
     
    import sys, os
     
    import Tkinter as Tk
    from PyQt4 import QtCore,QtGui
     
    #############################################################################
    def imprime():
     
        Appli=QtGui.QApplication(sys.argv)
     
        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
     
        #--------------------------------------------------------------------
        #premier tableau avec bordure
        cursor.movePosition(QtGui.QTextCursor.Start)
        cursor.insertText('essai avec bordure:\n')
        cursor.movePosition(QtGui.QTextCursor.End)
     
        orderTableFormat1 = QtGui.QTextTableFormat()
        orderTableFormat1.setBorderStyle(QtGui.QTextFrameFormat.BorderStyle_Groove)
        orderTableFormat1.setBorder(1)
     
        cursor.insertTable(1,1, orderTableFormat1)
        cursor.insertText('case avec bordure')
     
        #--------------------------------------------------------------------
        #second tableau sans bordure
        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertText(u'\n\nessai sans bordure:\n')
        cursor.movePosition(QtGui.QTextCursor.End)
     
        orderTableFormat2 = QtGui.QTextTableFormat()
        orderTableFormat2.setBorder(0)
        cursor.insertTable(1,1, orderTableFormat2)
        cursor.insertText('case sans bordure')
     
        #--------------------------------------------------------------------
        #imprime le document obtenu
        printer=QtGui.QPrinter()
        dialog = QtGui.QPrintPreviewDialog(printer)
        dialog.setWindowTitle(u"Imprime le document" )
        dialog.paintRequested.connect(doc.print_)
        dialog.exec_()
     
    #############################################################################
    if __name__ == "__main__":
        root = Tk.Tk()
        btn = Tk.Button(root,text='imprime',command=imprime)
        btn.pack()
        root.mainloop()
    Ok?

    [edit] pour enregistrer le document sur disque avec un format pdf:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        # enregistre le document sur disque sous format pdf    
        printer = QtGui.QPrinter()
        printer.setOutputFormat(QtGui.QPrinter.PdfFormat)
        printer.setOutputFileName(u"document.pdf")
        doc.print_(printer)
    Et pour changer le style de l'entourage, par exemple pour faire un entourage en pointillé, on utilise: QtGui.QTextFrameFormat.BorderStyle_Dotted.

  5. #5
    Membre confirmé
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Par défaut
    Merci beaucoup Tyrtamos.
    Pour moi Tkinter était plus accessible au départ, je pense que je vais progressivement essayer de travailler avec PySide, (donc je n'ai pas fini de poser des questions !!!) en plus j'ai déjà parcouru quelques tutoriels entre autres celui de Jiyuu qui me parait très bien pour débuter.
    juste une question pourquoi préférer la bibliothèque Pyside plutôt que Tkinter ?

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Effectivement, tkinter est plus abordable, et tu as eu raison de commencer par lui. Mais il est limité, et c'est un peu du bricolage (interpréteur Python => interpréteur tcl/tk).

    PyQt4 ou Pyside utilisent la bibliothèque Qt4, écrite en C++, qui est, entre autres, la base du bureau graphique KDE des linux. Elle est donc en même temps mature et très puissante. Mais elle est plus compliquée.

    Alors, tout dépend de l'ambition de tes projets d'interface graphique: pour de petites applications, tkinter est très bien et peut être suffisant. Dès que tu veux faire des applications plus complexes: accès graphique à des bases de données, multimédia audio/video, navigateur web, réseau, etc... une bibliothèque graphique plus puissante s'impose. Et on peut faire avec, des applications qui tournent aussi bien que celles qu'on achète.

    Deux autres aspects poussent vers des produits comme PyQt4/Pyside: la présence d'un programme pour dessiner les fenêtres (QtDesigner), et un outil de consultation de l'aide de référence "musclé" (QtAssistant). Je n'ai pas trouvé l'équivalent avec tkinter.

    Il y a d'autres bibliothèques graphiques, mais je ne les connais pas assez pour t'en parler: PyGTK, wxPython.

    Bon développement!

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

Discussions similaires

  1. [VB.NET][Excel] Bordure de cellule
    Par joKED dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/05/2014, 09h49
  2. Réponses: 2
    Dernier message: 03/05/2006, 22h34
  3. Grille dessiner les bordures des cellules
    Par EPI_03 dans le forum Composants VCL
    Réponses: 18
    Dernier message: 18/04/2006, 12h16
  4. [CSS] Couleur et forme bordure entre cellules
    Par Trunks dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 10/05/2005, 14h19
  5. Bordure de cellule
    Par pierre50 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 26/11/2004, 21h10

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