MyTetra Share
Делитесь знаниями!
screenshot.py
Время создания: 16.04.2017 15:07
Текстовые метки: program
Раздел: Python - PyQt5 - Программы - screenshot
Запись: xintrea/mytetra_db_mcold/master/base/1492344473fvv8hcaeg9/text.html на raw.githubusercontent.com
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 resizeEvent(self, event):
scaledSize =
self.originalPixmap.size()
scaledSize.scale(
self.screenshotLabel.size(), Qt.KeepAspectRatio)
if not self.screenshotLabel.pixmap() or scaledSize != self.screenshotLabel.pixmap().size():
self.updateScreenshotLabel()

def newScreenshot(self):
if self.hideThisWindowCheckBox.isChecked():
self.hide()
self.newScreenshotButton.setDisabled(True)

QTimer.singleShot(
self.delaySpinBox.value() * 1000,
self.shootScreen)


def saveScreenshot(self):
format =
'png'

initialPath = QDir.currentPath() + "/untitled." + format # 'C:/Users/mcold/Dropbox/Python projects/PyQt_examples/desktop/untitled.png'

fileName, _ = QFileDialog.getSaveFileName(self, "Save As", initialPath,
"%s Files (*.%s);;All Files (*)" % (format.upper(), format))
if fileName:
self.originalPixmap.save(fileName, format)

def shootScreen(self):
if self.delaySpinBox.value() != 0:
QApplication.instance().beep()
# звуковой сигнал

screen = QApplication.primaryScreen() # тип данных QScreen
if screen is not None:
self.originalPixmap = screen.grabWindow(0) # return QPixmap

else:
self.originalPixmap = QPixmap()

self.updateScreenshotLabel() # устанавливаем Pixmap в label

self.newScreenshotButton.setDisabled(False)
if self.hideThisWindowCheckBox.isChecked():
self.show()

def updateCheckBox(self):
if self.delaySpinBox.value() == 0:
self.hideThisWindowCheckBox.setDisabled(True) # блокировка чекбокса
else:
self.hideThisWindowCheckBox.setDisabled(False)

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 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, member): # функция создания кнопки
button = QPushButton(text)
button.clicked.connect(member)
return button

def updateScreenshotLabel(self):
self.screenshotLabel.setPixmap(self.originalPixmap.scaled(
self.screenshotLabel.size(), Qt.KeepAspectRatio,
Qt.SmoothTransformation))


if __name__ == '__main__':

import sys

app = QApplication(sys.argv)
screenshot = Screenshot()
screenshot.show()
sys.exit(app.exec_())
 
MyTetra Share v.0.59
Яндекс индекс цитирования