• Pyqt 屏幕截图工具


    从Pyqt的examples中看到一段截图代码, (路径:examplasdesktopscreenshot.py)
    所以想自己UI下界面,手动练习下

    通过UI生成的: Screenshot.py

     1 # -*- coding: utf-8 -*-
     2 
     3 # Form implementation generated from reading ui file 'Screenshot.ui'
     4 #
     5 # Created: Mon Mar 30 11:41:46 2015
     6 #      by: PyQt4 UI code generator 4.10.3
     7 #
     8 # WARNING! All changes made in this file will be lost!
     9 
    10 from PyQt4 import QtCore, QtGui
    11 
    12 try:
    13     _fromUtf8 = QtCore.QString.fromUtf8
    14 except AttributeError:
    15     def _fromUtf8(s):
    16         return s
    17 
    18 try:
    19     _encoding = QtGui.QApplication.UnicodeUTF8
    20     def _translate(context, text, disambig):
    21         return QtGui.QApplication.translate(context, text, disambig, _encoding)
    22 except AttributeError:
    23     def _translate(context, text, disambig):
    24         return QtGui.QApplication.translate(context, text, disambig)
    25 
    26 class Ui_ScrShot(object):
    27     def setupUi(self, ScrShot):
    28         ScrShot.setObjectName(_fromUtf8("ScrShot"))
    29         ScrShot.resize(270, 270)
    30         self.verticalLayout = QtGui.QVBoxLayout(ScrShot)
    31         self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
    32         self.labelShow = QtGui.QLabel(ScrShot)
    33         sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
    34         sizePolicy.setHorizontalStretch(0)
    35         sizePolicy.setVerticalStretch(0)
    36         sizePolicy.setHeightForWidth(self.labelShow.sizePolicy().hasHeightForWidth())
    37         self.labelShow.setSizePolicy(sizePolicy)
    38         self.labelShow.setText(_fromUtf8(""))
    39         self.labelShow.setObjectName(_fromUtf8("labelShow"))
    40         self.verticalLayout.addWidget(self.labelShow)
    41         self.groupBox = QtGui.QGroupBox(ScrShot)
    42         self.groupBox.setObjectName(_fromUtf8("groupBox"))
    43         self.verticalLayout_2 = QtGui.QVBoxLayout(self.groupBox)
    44         self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
    45         self.horizontalLayout_2 = QtGui.QHBoxLayout()
    46         self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
    47         self.labelSpinBox = QtGui.QLabel(self.groupBox)
    48         self.labelSpinBox.setObjectName(_fromUtf8("labelSpinBox"))
    49         self.horizontalLayout_2.addWidget(self.labelSpinBox)
    50         self.spinBox = QtGui.QSpinBox(self.groupBox)
    51         self.spinBox.setObjectName(_fromUtf8("spinBox"))
    52         self.horizontalLayout_2.addWidget(self.spinBox)
    53         self.verticalLayout_2.addLayout(self.horizontalLayout_2)
    54         self.checkBoxHideThis = QtGui.QCheckBox(self.groupBox)
    55         self.checkBoxHideThis.setObjectName(_fromUtf8("checkBoxHideThis"))
    56         self.verticalLayout_2.addWidget(self.checkBoxHideThis)
    57         self.verticalLayout.addWidget(self.groupBox)
    58         self.horizontalLayout = QtGui.QHBoxLayout()
    59         self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
    60         spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
    61         self.horizontalLayout.addItem(spacerItem)
    62         self.pushButtonNew = QtGui.QPushButton(ScrShot)
    63         self.pushButtonNew.setObjectName(_fromUtf8("pushButtonNew"))
    64         self.horizontalLayout.addWidget(self.pushButtonNew)
    65         self.pushButtonSave = QtGui.QPushButton(ScrShot)
    66         self.pushButtonSave.setObjectName(_fromUtf8("pushButtonSave"))
    67         self.horizontalLayout.addWidget(self.pushButtonSave)
    68         self.pushButton_Quit = QtGui.QPushButton(ScrShot)
    69         self.pushButton_Quit.setObjectName(_fromUtf8("pushButton_Quit"))
    70         self.horizontalLayout.addWidget(self.pushButton_Quit)
    71         self.verticalLayout.addLayout(self.horizontalLayout)
    72 
    73         self.retranslateUi(ScrShot)
    74         QtCore.QMetaObject.connectSlotsByName(ScrShot)
    75 
    76     def retranslateUi(self, ScrShot):
    77         ScrShot.setWindowTitle(_translate("ScrShot", "Form", None))
    78         self.groupBox.setTitle(_translate("ScrShot", "Options", None))
    79         self.labelSpinBox.setText(_translate("ScrShot", "Screenstot Delay:", None))
    80         self.checkBoxHideThis.setText(_translate("ScrShot", "Hide This Window", None))
    81         self.pushButtonNew.setText(_translate("ScrShot", "新建", None))
    82         self.pushButtonSave.setText(_translate("ScrShot", "保存", None))
    83         self.pushButton_Quit.setText(_translate("ScrShot", "退出", None))
    84 
    85 
    86 if __name__ == "__main__":
    87     import sys
    88     app = QtGui.QApplication(sys.argv)
    89     ScrShot = QtGui.QWidget()
    90     ui = Ui_ScrShot()
    91     ui.setupUi(ScrShot)
    92     ScrShot.show()
    93     sys.exit(app.exec_())

     逻辑代码; MainScreenShot.py

     1 # -*- coding: utf-8 -*-
     2 from  PyQt4 import  QtCore, QtGui
     3 from  Screenshot import  Ui_ScrShot
     4 import sys
     5 import icoqrc
     6 class MainFrom(QtGui.QWidget):
     7     def __init__(self):
     8         super(MainFrom, self).__init__()
     9         self.Ui = Ui_ScrShot()
    10         self.Ui.setupUi(self)
    11         self.Ui.labelShow.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)  # size 策略为 可扩展 expanding
    12         self.Ui.labelShow.setAlignment(QtCore.Qt.AlignCenter)   #alignment 对齐方式 居中
    13         self.Ui.labelShow.setMinimumSize(240, 160)   # 最小为 240 X 160
    14         self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)  # 设置总是在最前
    15         self.setWindowTitle(u'截图工具')
    16         self.setWindowIcon(QtGui.QIcon(':qq.ico'))
    17 
    18         self.shootScreen()
    19         self.Ui.spinBox.setSuffix(' s')
    20         self.Ui.spinBox.setMaximum(60)
    21         self.Ui.spinBox.setValue(5)
    22         
    23         self.Ui.pushButtonNew.clicked.connect(self.newScreenshot)   # 从新开始新建截图
    24         self.Ui.pushButtonSave.clicked.connect(self.saveScreenshot)  # 保存截图
    25         self.Ui.pushButton_Quit.clicked.connect(self.close)  # 退出
    26 
    27  
    28 
    29     # 截图
    30     def shootScreen(self):
    31         if self.Ui.spinBox.value() != 0:
    32             QtGui.qApp.beep()   #操作带上系统的响铃
    33         self.originalPixmap = QtGui.QPixmap.grabWindow(QtGui.QApplication.desktop().winId())  # 获取 屏幕桌面截图
    34         self.updateScreenshotLabel()
    35         self.Ui.pushButtonNew.setDisabled(False)
    36         if self.Ui.checkBoxHideThis.isChecked():  # 当选择隐藏按钮为True时, 截图完成显示窗体
    37             self.show()
    38 
    39 
    40         #  获取图片显示在label上
    41     def updateScreenshotLabel(self):
    42         # self.originalPixmap.scaled()  scaled()函数的声明const返回一个Qpixmap
    43         # QtCore.Qt.KeepAspectRatio 尽可能大的在一个给定的矩形大小缩放到一个矩形且保持长宽比。
    44         # QtCore.Qt.SmoothTransformation 平滑转换
    45         self.Ui.labelShow.setPixmap(self.originalPixmap.scaled(self.Ui.labelShow.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation))
    46 
    47         # 保存截图图片
    48     def saveScreenshot(self):
    49         format = 'png'
    50         initialPath = QtCore.QDir.currentPath() + "/untitled." + format
    51 
    52         fileName = QtGui.QFileDialog.getSaveFileName(self, u"另存为",
    53                 initialPath,
    54                 "%s Files (*.%s)" % (format.upper(), format))
    55         if fileName:
    56             self.originalPixmap.save(fileName, format)
    57             
    58         # 新创建截图
    59     def newScreenshot(self):
    60         if self.Ui.checkBoxHideThis.isChecked():
    61             self.hide()
    62         self.Ui.pushButtonNew.setDisabled(True)
    63         QtCore.QTimer.singleShot(self.Ui.spinBox.value() * 1000, self.shootScreen)  # * 秒后触发截图
    64         
    65     # 重载 resizeEvent 方法
    66     def resizeEvent(self, event):
    67         scaledSize = self.originalPixmap.size()
    68         scaledSize.scale(self.Ui.labelShow.size(), QtCore.Qt.KeepAspectRatio)
    69         if not self.Ui.labelShow.pixmap() or scaledSize != self.Ui.labelShow.pixmap().size():   # 当pixmap改变大小时候重新加载updateScreenshotLabel
    70             self.updateScreenshotLabel()
    71 
    72 
    73 if __name__ == '__main__':
    74     App = QtGui.QApplication(sys.argv)
    75     MainApp = MainFrom()
    76     MainApp.show()
    77     sys.exit(App.exec_())
    78      

    效果:

  • 相关阅读:
    ubuntu下进程kidle_inject致使编译软件很慢
    linux下保存下位机输出的串口信息为文件
    ubuntu下转换flv格式为mp4格式
    ubuntu下安装mkfs.jffs工具
    linux下安装evernote国际版
    linux 下使用命令查看jvm信息
    linux下面实时查看进程,内存以及cpu使用情况使用命令
    Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
    linux如何复制文件夹和移动文件夹
    linux解压war包的命令
  • 原文地址:https://www.cnblogs.com/dcb3688/p/4380120.html
Copyright © 2020-2023  润新知