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.1k 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 khakhil
    #7

    thanks @mrjj
    i follow the link you have sent to me

    (http://stackoverflow.com/questions/10705712/screenshot-of-a-window-using-python)

    It works, now i want to get that image/screenshot from directory and send it to printer.
    please help.

    mrjjM 1 Reply Last reply
    0
    • khakhilK khakhil

      thanks @mrjj
      i follow the link you have sent to me

      (http://stackoverflow.com/questions/10705712/screenshot-of-a-window-using-python)

      It works, now i want to get that image/screenshot from directory and send it to printer.
      please help.

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

      @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 1 Reply Last reply
      1
      • khakhilK Offline
        khakhilK Offline
        khakhil
        wrote on last edited by
        #9

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