PyQt5 实现桌面截图

应用自 PyQt实现桌面截图 - CSDN博客
本人发现作者在115行有两处笔误,在此更正,侵删
这里写图片描述

from PyQt5.QtCore import QDir, Qt, QTimer
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import (QApplication, QCheckBox, QFileDialog, QGridLayout,QGroupBox, QHBoxLayout, QLabel, QPushButton, QSizePolicy,QSpinBox, QVBoxLayout, QWidget)class Screenshot(QWidget):def __init__(self):super(Screenshot, self).__init__()self.screenshotLabel = QLabel()self.screenshotLabel.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)self.screenshotLabel.setAlignment(Qt.AlignCenter)self.screenshotLabel.setMinimumSize(240, 160)self.createOptionsGroupBox()self.createButtonsLayout()mainLayout = QVBoxLayout()mainLayout.addWidget(self.screenshotLabel)mainLayout.addWidget(self.optionsGroupBox)mainLayout.addLayout(self.buttonsLayout)self.setLayout(mainLayout)self.shootScreen()self.delaySpinBox.setValue(5)self.setWindowTitle("Screenshot")self.resize(300, 200)def createOptionsGroupBox(self):self.optionsGroupBox = QGroupBox("options")self.delaySpinBox = QSpinBox()self.delaySpinBox.setSuffix("s")self.delaySpinBox.setMaximum(60)self.delaySpinBox.valueChanged.connect(self.updateCheckBox)self.delaySpinBoxLabel = QLabel("Screenshot Delay:")self.hideThisWindowCheckBox = QCheckBox("Hide This Window")optionsGroupBoxLayout = QGridLayout()optionsGroupBoxLayout.addWidget(self.delaySpinBoxLabel, 0, 0)optionsGroupBoxLayout.addWidget(self.delaySpinBox, 0, 1)optionsGroupBoxLayout.addWidget(self.hideThisWindowCheckBox, 1, 0, 1, 2)self.optionsGroupBox.setLayout(optionsGroupBoxLayout)def updateCheckBox(self):if self.delaySpinBox.value() == 0:self.hideThisWindowCheckBox.setDisabled(True)else:self.hideThisWindowCheckBox.setDisabled(False)def createButtonsLayout(self):self.newScreenshotButton = self.createButton("New Screenshot",self.newScreenshot)self.saveScreenshotButton = self.createButton("Save Screenshot",self.saveScreenshot)self.quitScreenshotButton = self.createButton("Quit", self.close)self.buttonsLayout = QHBoxLayout()self.buttonsLayout.addStretch()self.buttonsLayout.addWidget(self.newScreenshotButton)self.buttonsLayout.addWidget(self.saveScreenshotButton)self.buttonsLayout.addWidget(self.quitScreenshotButton)def createButton(self, text, mySlot):button = QPushButton(text)button.clicked.connect(mySlot)return buttondef newScreenshot(self):if self.hideThisWindowCheckBox.isChecked():self.hide()self.newScreenshotButton.setDisabled(True)QTimer.singleShot(self.delaySpinBox.value() * 1000,self.shootScreen)def shootScreen(self):if self.delaySpinBox.value() != 0:QApplication.instance().beep()screen = QApplication.primaryScreen()if screen is not None:self.originalPixmap = screen.grabWindow(0)else:self.originalPixmap = QPixmap()self.updateScreenshotLabel()self.newScreenshotButton.setDisabled(False)if self.hideThisWindowCheckBox.isChecked():self.show()def updateScreenshotLabel(self):self.screenshotLabel.setPixmap(self.originalPixmap.scaled(self.screenshotLabel.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation))def saveScreenshot(self):format = 'png'initialPath = QDir.currentPath() + "/untitled." + formatfileName, _ = QFileDialog.getSaveFileName(self, "Save As", initialPath,"%s File(*.%s);;All Files(*)" % (format.upper(), format))if fileName:self.originalPixmap.save(fileName, format)def resizeEvent(self, event):scaledSize = self.originalPixmap.size()scaledSize.scaled(self.screenshotLabel.size(), Qt.KeepAspectRatio)if not self.screenshotLabel.pixmap() or scaledSize != self.screenshotLabel.pixmap().size():self.updateScreenshotLabel()if __name__ == '__main__':import sysapp = QApplication(sys.argv)screenshot = Screenshot()screenshot.show()sys.exit(app.exec_())


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部