[PyQt] QPrintDialog (pyqt4)

Russell Valentine russ at coldstonelabs.org
Sat Feb 20 03:48:57 GMT 2010


You can do something like this if it is a function of your MainWindow. 
self as a argument in grabWidget is your baseWidget, like a QMainWindow 
for example. No doubt you would have to make sure it fits on the page 
though and resize it as needed.

    def goPrinter(self):
         printer=QtGui.QPrinter()
         dialog = QtGui.QPrintDialog(printer, self)
         if(dialog.exec_() != QtGui.QDialog.Accepted):
             return
         p=QtGui.QPixmap.grabWidget(self)
         printLabel = QtGui.QLabel()
         printLabel.setPixmap(p)
         painter = QtGui.QPainter(printer)
         printLabel.render(painter)
         painter.end()


jaybstory wrote:
> I understand your example for printing Labels.  I'm wondering if there is a
> way to just print the entire GUI?  I tried to do this, but its not correct:
> 
>  def printd(self):
>                 printer=QtGui.QPrinter()
>                 dialog = QtGui.QPrintDialog(printer, self)
>                 if(dialog.exec_() != QtGui.QDialog.Accepted):
>                   return
>                 printGUI = QtGui.QTabWidget
>                 painter = QtGui.QPainter(printer)
>                 printGUI.render(painter)
>                 painter.end()
> 
> maybe I'm not understanding the way render works? Or is this the wrong
> approach all together?  Thank you.
> 
> 
> Russell Valentine wrote:
>> Joi Barnett wrote:
>>> thank you for the reply,
>>>
>>> do you have an example of how to use QPrinter in python? 
>>
>> I didn't have one, but I just made one really quick. Very simple 
>> example. I Cc'd the list in case anyone else had anything to add.
>>
>>
>> from PyQt4 import QtGui, QtCore
>>
>> class MainWindow(QtGui.QMainWindow):
>>      def __init__(self, app):
>>          QtGui.QMainWindow.__init__(self)
>>          self.app=app
>>          self.label=QtGui.QLabel("Print test")
>>          self.setCentralWidget(self.label)
>>      def goPrinter(self):
>>          printer=QtGui.QPrinter()
>>          dialog = QtGui.QPrintDialog(printer, self)
>>          if(dialog.exec_() != QtGui.QDialog.Accepted):
>>              return
>>          printLabel = QtGui.QLabel("Hello my printer.")
>>          painter = QtGui.QPainter(printer)
>>          printLabel.render(painter)
>>          painter.end()
>>
>> if __name__ == "__main__":
>>      import sys
>>      app = QtGui.QApplication(sys.argv)
>>      window=MainWindow(app)
>>      window.show()
>>      QtCore.QTimer.singleShot(1000, window.goPrinter)
>>      #ui.show()
>>      sys.exit(app.exec_())
>>
>> _______________________________________________
>> PyQt mailing list    PyQt at riverbankcomputing.com
>> http://www.riverbankcomputing.com/mailman/listinfo/pyqt
>>
>>
> 



More information about the PyQt mailing list