2010-01-01 39 views
0

Je souhaite générer plusieurs rapports de rapport à l'aide de la boîte à outils. Deux pages est une option pour commencer. Le formatage est ok, et peut être travaillé dernier.Qt Python - rapport dans la boîte à outils: QTextDocument et QPainter

J'ai essayé d'utiliser QTextDocument en Html, et en alternative QPainter.

Bien sûr, pour faire un test et garder les choses simples, je demande simplement dans Qt d'afficher le titre du rapport affiché en haut du document.

Voici la fonction pour le cadre principal de la boîte à outils:

def toolbox_frame(self,MainWindow): 
    self.toolBox = QtGui.QToolBox(self.centralwidget) 
    self.toolBox.setGeometry(QtCore.QRect(10, 20, 471, 201)) 

    self.toolbox_page1() 
    self.toolBox.addItem(self.page1, "") 
    self.toolBox.setItemText(self.toolBox.indexOf(self.page1), QtGui.QApplication.translate("MainWindow", "Page 1", None, QtGui.QApplication.UnicodeUTF8)) 

    self.toolbox_page2() 
    self.toolBox.addItem(self.page2, "") 
    self.toolBox.setItemText(self.toolBox.indexOf(self.page2), QtGui.QApplication.translate("MainWindow", "Page 2", None, QtGui.QApplication.UnicodeUTF8)) 

... la fonction qui maintient la première page à l'aide QTextDocument avec Html:

def toolbox_page1(self): 
    self.page1 = QtGui.QWidget() 
    self.page1.setGeometry(QtCore.QRect(0, 0, 471, 145)) 

    html = u"" 
    html += (" <p><font color=red><b>Title - Build " 
        "a Report : page 1.</b></font>") 
    document = QtGui.QTextDocument(self.page1) 
    document.setHtml(html) 

et la fonction en utilisant QPainter:

def toolbox_page2(self): 
    self.page2 = QtGui.QWidget() 
    self.page2.setGeometry(QtCore.QRect(0, 0, 471, 145)) 

    sansFont = QtGui.QFont("Helvetica", 10) 
    painter = QtGui.QPainter(self.page2) 
    painter.setFont(sansFont) 
    painter.setPen(QtGui.QColor(168, 34, 3)) 
    x=50 
    y=50 
    painter.drawText(x, y, "Title - Build a Report : page 2") 

le problème est qu'il affiche simplement la boîte à outils à la page 1 et page 2, mais pas le titre pour les deux rapport à l'intérieur de la page 1 et la page 2.

Qu'est-ce qui manque ici?

Tous les commentaires et suggestions sont très appréciés.

Répondre

1

Pour la page1, le document doit être affiché par un widget. Ajoutez ce qui suit à cette fonction

textEdit = QtGui.QTextEdit(self.page1) 
    textEdit.setDocument(document) 
    layout = QtGui.QVBoxLayout(self.page1) 
    layout.addWidget(textEdit) 

Pour page2, la peinture sur un widget doit être en réponse à un événement de peinture qui nécessite la création d'un filtre de sous-classe ou d'un événement. Une manière plus simple de dessiner du texte consiste à utiliser un QLabel. Remplacez la fonction par la suivante

def toolbox_page2(self): 
    self.page2 = QtGui.QWidget() 
    self.page2.setGeometry(QtCore.QRect(0, 0, 471, 145)) 

    label = QtGui.QLabel(self.page2) 
    label.setText("Title - Build a Report : page 2") 
    label.setStyleSheet("font: 10pt 'Helvetica'; color: rgb(168, 34, 3)") 
    label.setGeometry(QtCore.QRect(QtCore.QPoint(50, 50), label.sizeHint())) 
+0

Merci BaySmith! Vous venez d'enregistrer la journée. Cela a juste fonctionné magnifiquement! – ThreaderSlash