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