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_())