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
Forum Updated to NodeBB v4.3 + New Features

Printing QWidget window using python

Scheduled Pinned Locked Moved Solved Language Bindings
python
22 Posts 2 Posters 11.3k 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 khakhil

    @mrjj
    not working :( :(

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

    @khakhil said:
    still getting?

    "ÿØÿà

    can you post the code. maybe someone can spot the issue :)

    1 Reply Last reply
    0
    • 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