quarta-feira, 12 de maio de 2010

Visualização de Impressão Utilizando o QPrintPreviewDialog e PyQt4

Dessa vez foi um pouco complicado hehe, eu estava garimpando a internet procurando um exemplo de como utilizar o QPrintPreviewDialog, sem sucesso, depois de muito procurar fiz uma pergunta ao amigo do site sobre Python e Qt e ele gentilmente me respondeu, o resultado pode ser visto aqui:



#!/usr/bin/python
# -*- coding: utf-8 -*-
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtCore
from PyQt4.QtWebKit import QWebView

class ProgramaImpressor(QDialog):
    def __init__(self,parent=None):
        super(ProgramaImpressor,self).__init__(parent)
        rotuloNome=QLabel("Nome: ")
        rotuloEndereco=QLabel(u"Endereço: ")
        rotuloOutros=QLabel("Diversos: ")
        self.impressor=QPrinter()
        self.txtnome=QLineEdit()
        self.txtendereco=QLineEdit()
        self.txtdiversos=QTextEdit()
        self.btnimprimir=QPushButton("&Imprimir")
        layoutHorizontal=QHBoxLayout()
        layoutHorizontal2=QHBoxLayout()
        layoutHorizontal3=QHBoxLayout()
        layoutVertical=QVBoxLayout()
        layoutHorizontal.addWidget(rotuloNome)
        layoutHorizontal.addWidget(self.txtnome)
        layoutHorizontal2.addWidget(rotuloEndereco)
        layoutHorizontal2.addWidget(self.txtendereco)
        layoutHorizontal3.addWidget(rotuloOutros)
        layoutHorizontal3.addWidget(self.txtdiversos)
        layoutVertical.addLayout(layoutHorizontal)
        layoutVertical.addLayout(layoutHorizontal2)
        layoutVertical.addLayout(layoutHorizontal3)
        layoutVertical.addWidget(self.btnimprimir)
        self.setLayout(layoutVertical)
        self.dialogo=QPrintPreviewDialog()
        self.html=u""
        self.documento=QWebView()
        self.connect(self.dialogo, SIGNAL("paintRequested (QPrinter *)"),self.documento.print_)
        self.connect(self.documento,SIGNAL("loadFinished (bool)"),self.previaImpressao)
        self.connect(self.btnimprimir, SIGNAL("clicked()"),self.imprimir)
  
    def previaImpressao(self,arg):
        self.dialogo.exec_()  
  
    def imprimir(self,html=None):
  
        html=u"<font align=center><H1>Relatório de Teste de Impressão</H1></font>\
        <br>\
        <p>O nome digitado Foi: <font color=blue>%s</font></p>\
        <p>O endereço da pessoa é: <font color=blue>%s</font></p>\
        <p>Os demais comentários São:\
        <br>%s</p>"%(self.txtnome.text(),self.txtendereco.text(),self.txtdiversos.toHtml())
        self.documento.setHtml(html)
        #self.documento.show()
      
      
      
if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    JanelaPrincipal = ProgramaImpressor()
    JanelaPrincipal.show()
    app.exec_()

Um comentário:

Unknown disse...

Olá gostaria de saber como posso utilizar esta classe para gerar um relatório com html.
Eu tenho a conexão com o banco e também o layout do relatório em html consegui até gerar um relatório onde retornava apenas um registro mas não consegui nada além se vc tiver uma sugestão ficarei grato.
Parabéns pelo blog e pela postagem foi bastatne esclarecedora.