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

wxPython Discussion :

Impression avec PrintTable


Sujet :

wxPython

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 121
    Points : 64
    Points
    64
    Par défaut Impression avec PrintTable
    Bonjour,
    Je cherche à imprimer avec Python et c'est pas simple !
    J'ai trouvé PrintTable qui semple correspondre à mes besoins, le seul souci c'est que quand on fait un Print() pour déclencher l'impression, on a une fenêtre de dialogue et je cherche comment faire pour ne pas avoir cette fenêtre.
    Il faut absolument que l'impression parte directement à l'imprimante sans intervention "humaine".

    C'est un programme qui fait une requête sur un site de e-commerce et dès qu'une commande tombe, ça doit imprimer.

    Quelqu'un connaît une solution ?

    Merci d'avance

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Points : 240
    Points
    240
    Par défaut
    Salut,

    Essaie avec un truc comme ça (en adaptant bien-sûr) :

    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
    prt = printout.PrintTable(self.frame)
     
    pd = wx.PrintData()
    pd.SetPrinterName('')
    pd.SetOrientation(self.GetParent().orientation) 
    pd.SetPaperId(wx.PAPER_A4)
    pd.SetQuality(wx.PRINT_QUALITY_DRAFT)
    pd.SetColour(True)
    pd.SetNoCopies(nbreExemplaires)
    pd.SetCollate(True)
     
    pdd = wx.PrintDialogData()
    pdd.SetPrintData(pd)
     
    printer = wx.Printer(pdd)
    printer.Print(self.parent, prt, False)
    Pour info, le False de la dernière ligne indique qu'il ne faut pas afficher de boîte.

    Bon courage

    A +

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 121
    Points : 64
    Points
    64
    Par défaut
    Ah cool, merci, je vais essayer ça dès que possible

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 121
    Points : 64
    Points
    64
    Par défaut
    Et non, fausse joie

    Python me dit : Print() takes exactly 1 argument (3 given)

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Points : 240
    Points
    240
    Par défaut
    Ah désolé pour la fausse joie...

    S'il te dit ça, c'est peut-être parce que tu as utilisé le Print de PrintTable ?)

    Ce qu'il te faut, c'est récupéré le Printout créé par la fonction PrintTable pour l'envoyer toi-même dans le wx.Printer.

    Tu peux regarder le code de PrintTable dans le répertoire wx\lib\printout.py. Ce code est très facile à lire. Je viens de jeter un coup d'oeil (ligne 914). Pour récupérer le Printout, essaie ceci :

    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
    import wx.lib.printout as printout
     
    prt = printout.PrintTable(self.frame)
    prtout = printout.SetPrintout(prt)
     
    pd = wx.PrintData()
    pd.SetPrinterName('')
    pd.SetOrientation(self.GetParent().orientation) 
    pd.SetPaperId(wx.PAPER_A4)
    pd.SetQuality(wx.PRINT_QUALITY_DRAFT)
    pd.SetColour(True)
    pd.SetNoCopies(nbreExemplaires)
    pd.SetCollate(True)
     
    pdd = wx.PrintDialogData()
    pdd.SetPrintData(pd)
     
    printer = wx.Printer(pdd)
    printer.Print(self.parent, prtout, False)
    J'te parie que c'est un truc comme ça...

    A +

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 121
    Points : 64
    Points
    64
    Par défaut
    Merci d'avoir pris du temps pour mon problème.
    Entre temps (comme je me doutais que ça venait du Print de PrintTable) j'ai utilisé le PrintData().

    Donc ta solution d'hier fonctionne, ça envoie bien l'impression sans m'afficher la fenêtre mais pour le moment ça m'imprime une page toute blanche !!

    Tiens, je colle mon code ici, si ça inspire quelqu'un...
    Merci d'avance à celui (ou celle d'ailleurs) qui pourra m'éxpliquer pourquoi j'ai une page blanche.

    Petite précision : Je développe sous Linux (Ubuntu 10.04) mais le programme tournera sous Windows

    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
     
    #! /usr/bin/env python
     
    from wx import *
     
    class MonPrintout(Printout):
    	def __init__(self, titre,TblLignes):
    		Printout.__init__(self, titre)
    		self.TblLignes=TblLignes
     
    	def HasPage(self,page):
    		return page <= 1
     
    	def GetPageInfo(self):
    		return (1, 1, 1, 1)
     
    	def OnPrintPage(self, page):
    		dc = self.GetDC()
    		dc.SetMapMode(MM_POINTS)
     
    		for IndLgn in range(len(self.TblLignes)):
    			dc.DrawText(self.TblLignes[IndLgn], 10, IndLgn*5)
    		return True
     
    class MainWindow(Frame):
    	def __init__(self, parent, id, title):
    		Frame.__init__(self, parent, -1, title, size=(500, 500))
    		id_bouton = NewId()
    		Button(self, id_bouton, 'Imprimer', Point(200, 200))
    		EVT_BUTTON(self, id_bouton, self.OnPrintBouton)
     
    		self.TblLignes=[]
    		self.TblLignes.append("Ligne 1")
    		self.TblLignes.append("Ligne 2")
    		self.TblLignes.append("Ligne 3")
    		self.TblLignes.append("Ligne 4")
     
    	def OnPrintBouton(self, event):
    		pd = PrintData()
    		pd.SetPrinterName('')
    		pd.SetOrientation(PORTRAIT)
    		pd.SetPaperId(PAPER_A4)
    		pd.SetQuality(PRINT_QUALITY_DRAFT)
    		pd.SetColour(False) # impression noir et blanc
    		pd.SetNoCopies(1)
    		pd.SetCollate(True)
    		pdd = PrintDialogData()
    		pdd.SetPrintData(pd)
    		pdd.SetMinPage(1)
    		pdd.SetMaxPage(1)
    		pdd.SetFromPage(1)
    		pdd.SetToPage(1)
    		pdd.SetPrintToFile(False)
    		printer = Printer(pdd)
    		monprintout = MonPrintout("mon objet d'impression",self.TblLignes)
    		printer.Print(self, monprintout, False)
     
    	def OnCloseWindow(self, event):
    		self.Destroy()
     
    class App(App):
    	def OnInit(self):
    		frame = MainWindow(None, -1, "Demo d'impression avec wxPython")
    		self.SetTopWindow(frame)
    		frame.Show(True)
    		return True
     
    app = App(0)
    app.MainLoop()

Discussions similaires

  1. Problème d'impression avec CUPS
    Par piff62 dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 14/02/2005, 11h46
  2. Pbl d'impression avec le turbo pascal
    Par leboss38 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 07/12/2004, 14h06
  3. Impression avec le composant TRvSystem
    Par tarbala dans le forum Composants VCL
    Réponses: 3
    Dernier message: 02/10/2004, 17h03
  4. impression avec quickreport
    Par k_boy dans le forum Bases de données
    Réponses: 4
    Dernier message: 14/06/2004, 09h06
  5. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

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