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 12.4k 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

    The link http://stackoverflow.com/questions/8193920/print-a-text-through-a-printer-using-pyqt4
    is very helpful. I solved 90% of my problem.
    now, the problem is that as i select the image to print, the printer not getting the image.
    instead of image it takes "ÿØÿà" and prints it.

    what i do?

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

    @khakhil
    it looks like it prints the pointer?
    did you use painter.drawPixmap ?

    khakhilK 1 Reply Last reply
    1
    • mrjjM mrjj

      @khakhil
      it looks like it prints the pointer?
      did you use painter.drawPixmap ?

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

      @mrjj
      not working :( :(

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