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