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.5k 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.
  • 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