When converted from QImage in QPixmap, the image is broken.



  • def initUI(self):
        self.setGeometry(0, 0, 1920, 1080)
        self.d = QPushButton("sss", self)
        self.d.setGeometry(0, 0, 100, 100)
        self.label = QLabel(self)
        image = ImageGrab.grab(bbox=(0, 0, 1920, 1080))
        q = ImageQt(image)
        q = QImage(q)
        pixmap = QPixmap.fromImage(q)
        self.label.setPixmap(pixmap)
        print(3)
        self.label.resize(pixmap.width(), pixmap.height())
    
    


  • If I understand you correctly, and you want to make a violin of the chosen screen section, then try this:

    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets
    from PIL import ImageGrab
    

    class SnippingWidget(QtWidgets.QMainWindow):
    closed = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        super(SnippingWidget, self).__init__(parent)
        self.setAttribute(QtCore.Qt.WA_NoSystemBackground, True)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
        self.setStyleSheet("background:transparent;")
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
    
        self.outsideSquareColor = "red"
        self.squareThickness = 2
    
        self.start_point = QtCore.QPoint()
        self.end_point = QtCore.QPoint()
    
    def mousePressEvent(self, event):
        self.start_point = event.pos()
        self.end_point = event.pos()
        self.update()
    
    def mouseMoveEvent(self, event):
        self.end_point = event.pos()
        self.update()
    
    def mouseReleaseEvent(self, QMouseEvent):
        r = QtCore.QRect(self.start_point, self.end_point).normalized()
        self.hide()
        img = ImageGrab.grab(bbox=r.getCoords())
        img.save("testImage.png")
        QtWidgets.QApplication.restoreOverrideCursor()
        self.closed.emit()
        self.start_point = QtCore.QPoint()
        self.end_point = QtCore.QPoint()
    
    def paintEvent(self, event):
        trans = QtGui.QColor(22, 100, 233)
        r = QtCore.QRectF(self.start_point, self.end_point).normalized()
        qp = QtGui.QPainter(self)
        trans.setAlphaF(0.2)
        qp.setBrush(trans)
        outer = QtGui.QPainterPath()
        outer.addRect(QtCore.QRectF(self.rect()))
        inner = QtGui.QPainterPath()
        inner.addRect(r)
        r_path = outer - inner
        qp.drawPath(r_path)
        qp.setPen(
            QtGui.QPen(QtGui.QColor(self.outsideSquareColor), self.squareThickness)
        )
        trans.setAlphaF(0)
        qp.setBrush(trans)
        qp.drawRect(r)
    

    class MainWindow(QtWidgets.QMainWindow):
    def init(self):
    super().init()
    self.centralWidget = QtWidgets.QWidget()
    self.setCentralWidget(self.centralWidget)

        self.label = QtWidgets.QLabel(alignment=QtCore.Qt.AlignCenter)
        self.button = QtWidgets.QPushButton('Делать скриншот')
        self.button.clicked.connect(self.activateSnipping)
        
        layout = QtWidgets.QVBoxLayout(self.centralWidget)
        layout.addWidget(self.label, 1)
        layout.addWidget(self.button, 0)
    
        self.snipper = SnippingWidget()
        self.snipper.closed.connect(self.on_closed)
    
    def activateSnipping(self):
        self.snipper.showFullScreen()
        QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.CrossCursor)
        self.hide()
    
    def on_closed(self):
        pixmap = QtGui.QPixmap("testImage.png")
        self.label.setPixmap(pixmap)
        self.show()
        self.adjustSize()
    

    if name == "main":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.resize(400, 300)
    w.show()
    sys.exit(app.exec_())



    введите сюда описание изображения



    введите сюда описание изображения



Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2