zoukankan      html  css  js  c++  java
  • 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      

    效果:

  • 相关阅读:
    es5预览本地文件、es6练习代码演示案例
    Java实现 LeetCode 838 推多米诺(暴力模拟)
    Java实现 LeetCode 838 推多米诺(暴力模拟)
    Java实现 LeetCode 838 推多米诺(暴力模拟)
    Java实现 LeetCode 837 新21点(DP)
    Java实现 LeetCode 837 新21点(DP)
    Java实现 LeetCode 837 新21点(DP)
    Java实现 LeetCode 836 矩形重叠(暴力)
    Subversion under Linux [Reprint]
    Subversion how[Reprint]
  • 原文地址:https://www.cnblogs.com/dcb3688/p/4380120.html
Copyright © 2011-2022 走看看