Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Language Bindings
  4. Printing QWidget window using python

Printing QWidget window using python

Scheduled Pinned Locked Moved Solved Language Bindings
python
22 Posts 2 Posters 14.2k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • khakhilK Offline
    khakhilK Offline
    khakhil
    wrote on last edited by
    #13

    @mrjj

          if info.completeSuffix() == 'html':
               self.editor.setHtml(text)
           else:
               self.editor.setPlainText(text)
    

    is there any way like this for .jpg or .tif format ???

    for the same issue i am also trying the following as @mrjj suggest

    class Window(QtGui.QWidget):
      def __init__(self):
        super(Window, self).__init__()
        self._new_window = None
        
        printer = QtGui.QPrinter()
        Pixmap = QtGui.QPixmap()
        pix = QPixmap.grabWindow(QApplication.desktop().winId())
        printer.setOrientation(printer.Landscape)
        Painter= QtGui.QPainter() 
        Painter.begin(printer)
        xscale = printer.pageRect().width() / (pix.width())
        yscale = printer.pageRect().height() / (pix.height())
        scale = qmin(xscale, yscale)
        Painter.translate(printer.paperRect().x() + printer.pageRect().width() / 2,
                          printer.paperRect().y() + printer.pageRect().height() / 2);
        Painter.scale(scale, scale)
        Painter.translate(-width() / 2, -height() / 2)
        Painter.drawPixmap(0, 0, pix)
        Painter.end()
    

    but not succeed.

    1 Reply Last reply
    0
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by
      #14

      so it just print "ÿØÿà on piece of paper?
      or?

      khakhilK 1 Reply Last reply
      0
      • mrjjM mrjj

        so it just print "ÿØÿà on piece of paper?
        or?

        khakhilK Offline
        khakhilK Offline
        khakhil
        wrote on last edited by
        #15

        @mrjj
        yes.. it is printing sometimes II* and sometimes "ÿØÿà" .

        mrjjM 1 Reply Last reply
        0
        • khakhilK khakhil

          @mrjj
          yes.. it is printing sometimes II* and sometimes "ÿØÿà" .

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by
          #16

          @khakhil said:

          def init(self):

          can you try to move the code to a button? ( to a clicked slot)

          I assume
          def init(self):
          is the constructor?
          Might not be the best spot as object might not be fully shown or
          the (QApplication.desktop().winId()) dont return what we think.

          Could u also add a Painter.drawText(200,200, "hello") and see if that comes.?

          khakhilK 1 Reply Last reply
          0
          • mrjjM mrjj

            @khakhil said:

            def init(self):

            can you try to move the code to a button? ( to a clicked slot)

            I assume
            def init(self):
            is the constructor?
            Might not be the best spot as object might not be fully shown or
            the (QApplication.desktop().winId()) dont return what we think.

            Could u also add a Painter.drawText(200,200, "hello") and see if that comes.?

            khakhilK Offline
            khakhilK Offline
            khakhil
            wrote on last edited by
            #17

            @mrjj
            hey thanks..
            this code is working properly.

             printer = QtGui.QPrinter()
                Pixmap = QtGui.QPixmap() 
                pix= QPixmap.grabWindow(loginwindow.winId())
                Painter= QtGui.QPainter() 
                Painter.begin(printer)
                
                Painter.drawPixmap(50, 490, pix)
                Painter.end()        
            

            It saves images every time i ran the code .
            what should i do if i don't want to save it but directly print it????

            1 Reply Last reply
            0
            • mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #18

              hi
              it should print the image.
              code looks ok.

              could u try display the image in a label?
              self.label.setPixmap(pix)

              to see what u grab

              1 Reply Last reply
              0
              • khakhilK Offline
                khakhilK Offline
                khakhil
                wrote on last edited by
                #19

                @mrjj
                thank you so much for help !!
                problem solved :) :)

                printer = QtGui.QPrinter()
                  Pixmap = QtGui.QPixmap() 
                  pix= QPixmap.grabWindow(loginwindow.winId())
                  Painter= QtGui.QPainter() 
                  Painter.begin(printer)
                
                  Painter.drawPixmap(50, 490, pix)
                  Painter.end()      
                

                same code works for grab screenshot and print it.

                thanks @mrjj

                mrjjM 1 Reply Last reply
                1
                • khakhilK khakhil

                  @mrjj
                  thank you so much for help !!
                  problem solved :) :)

                  printer = QtGui.QPrinter()
                    Pixmap = QtGui.QPixmap() 
                    pix= QPixmap.grabWindow(loginwindow.winId())
                    Painter= QtGui.QPainter() 
                    Painter.begin(printer)
                  
                    Painter.drawPixmap(50, 490, pix)
                    Painter.end()      
                  

                  same code works for grab screenshot and print it.

                  thanks @mrjj

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #20

                  @khakhil
                  super! :)
                  as a little note.
                  If printer has high DPI, image might become really small.
                  if that happens u can use the scale function of the pixmap to make it bigger or
                  use the Painter.translate() as c++ sample showed :)

                  1 Reply Last reply
                  0
                  • mrjjM mrjj

                    @khakhil
                    HI
                    you will need a way to select real printer
                    then load the image from file
                    and draw onto a painter connected to the selected printer.

                    try to play around with this sample
                    http://stackoverflow.com/questions/8193920/print-a-text-through-a-printer-using-pyqt4
                    its with preview and all so maybe over the top

                    here is c++ function that grabs screenshot and print it.
                    (thx to @Ni-Sumi)

                    void MainWindow::printPage() {
                      QPixmap pix = QPixmap::grabWindow(QApplication::desktop()->winId());
                      QPrinter printer(QPrinter::HighResolution);
                      printer.setOrientation(QPrinter::Landscape);
                      QPainter painter;
                      painter.begin(&printer);
                      double xscale = printer.pageRect().width() / double(pix.width());
                      double yscale = printer.pageRect().height() / double(pix.height());
                      double scale = qMin(xscale, yscale);
                      painter.translate(printer.paperRect().x() + printer.pageRect().width() / 2,
                                        printer.paperRect().y() + printer.pageRect().height() / 2);
                      painter.scale(scale, scale);
                      painter.translate(-width() / 2, -height() / 2);
                      painter.drawPixmap(0, 0, pix);
                      painter.end();
                    }
                    

                    I assume u can read enough to translate to py. :)

                    khakhilK Offline
                    khakhilK Offline
                    khakhil
                    wrote on last edited by
                    #21

                    thanks @mrjj
                    I wll try it later
                    you saved my life :)

                    mrjjM 1 Reply Last reply
                    0
                    • khakhilK khakhil

                      thanks @mrjj
                      I wll try it later
                      you saved my life :)

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by
                      #22

                      @khakhil
                      hehe super :)
                      Good work.
                      Im complete python noob but syntax is somewhat the same :)

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved