Pyqt 屏幕截图工具

从Pyqt的examples中看到一段截图代码, (路径:examplas\desktop\screenshot.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      

效果:

时间: 2024-10-10 06:12:57

Pyqt 屏幕截图工具的相关文章

C#软件开发实例.私人订制自己的屏幕截图工具(九)使用自定义光标,QQ截图时的光标

在使用QQ的截图功能的时候,是不是觉得它的光标很酷呢?今天就说一下怎么应用自定义光标,在我们的截图工具中使用QQ截图的光标. 打开资源: 切换到文件资源视图: 打开资源文件目录,将光标文件复制到此目录下: 所需光标文件下载:C#软件开发实例.私人订制自己的屏幕截图工具中使用的光标文件 选中Resources目录,刷新,显示出刚刚复制进来的光标文件: 选中光标文件,拖动到资源的文件视图中: 资源资源名称中的单词第一个字母改为大写. 光标预览: 在Form1类中添加私有变量: #region 自定义

C#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能

上一篇:C#软件开发实例.私人订制自己的屏幕截图工具(六)添加配置管理功能 由于截图时可能需要精确截取某一部分,所以需要放大镜的功能,这样截取的时候才更容易定位截图的位置. 添加PictureBox,name属性设置为"pictureBox_zoom": 在"Form1_Load"事件处理函数中添加以下代码: //设置放大镜的大小 this.pictureBox_zoom.Width = this.ZoomBoxWidth; this.pictureBox_zoom

C#软件开发实例.私人订制自己的屏幕截图工具(八)添加键盘操作截图的功能

上一篇:C#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能 虽然添加了放大镜的功能,但是在进行像素级的定位时,还是不容易精确定位,在用鼠标操作时要改变一两个像素的位置还是有些困难的. 处理键盘按下事件 /// <summary> /// 处理键盘按下事件 /// 用于实现以下功能: /// 当用户按下Esc键时,退出截图过程: /// Shift + Enter 开始截图的功能: /// 使用键盘的上下左右键调整截图位置的功能: /// Shift + 上下左右键调整截图区域大

Java屏幕截图工具 捕获屏幕

原文:http://www.open-open.com/code/view/1420037709781 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.a

屏幕截图工具

软件简介:可以深度定制外观的一款屏幕截图工具,简单实用,支持自定义区域截屏,支持多处颜色自定义,详情参考下图设置界面,将颜色值设置为RGB(252,2,251)即可实现透明效果,软件启动后置托盘图标并有气泡提示,双击图标可打开设置界面,右键弹出屏幕截图工具的菜单选项,截图完成后,双击左键弹出保存菜单,右键重新截取图像,鼠标中键或ESC键退出截图界面. 版权声明:在不修改软件内容的前提下,可随意传播与使用屏幕截图工具. 软件名称:屏幕截图工具v1.0(正式版) 百度网盘下载 提取码:sz6d 软件

C#软件开发实例.私人订制自己的屏幕截图工具(十一)编辑工具栏的实现

本实例全部文章目录 (一)功能概览 (二)创建项目.注册热键.显示截图主窗口 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)添加配置管理功能 (七)添加放大镜的功能 (八)添加键盘操作截图的功能 (九)使用自定义光标,QQ截图时的光标 (十)在截图中包含鼠标指针形状 概述 截图之后,有时我们需要对其进行标注.修改等功能,这里就讲一下编辑工具栏的实现. 效果 资源 大概思路 工具栏的图片包含正常的状态和选中的状态,绘制的时候根据状态取对应位置的图片进

Shutter - 带有众多功能的屏幕截图工具

0 介绍 Shutter是一个功能丰富的屏幕截图程序,用于基于Linux的操作系统,如Ubuntu. 您可以截取特定区域,窗口,整个屏幕,甚至网站的屏幕截图,应用不同的效果,绘制它的突出点. 1 安装 1.1 安装主程序 添加了该软件的PPA,自动更新软件信息. sudo add-apt-repository ppa:shutter/ppa sudo apt-get update && sudo apt-get install shutter 1.2 安装插件 使用内置编辑器: sudo

(024)[工具软件]截屏录屏软件FSCapture(转)

该软件比 Snipaste 增加的功能有滚动截图和屏幕录制. 原文地址:https://www.appcgn.com/faststone-capture.html FastStoneCapture,简称:FSCapture,是一款由美利坚 FastStone 软件科技公司精心设计开发的优秀屏幕截图工具,体积小巧.功能精悍,操作简便.不仅具有所有常规屏幕截图方式,还能够从扫描仪获取图像文件,以及将其转换为便携式 PDF 文档等功能,同时也支持对抓取到的图片进行编辑与保存操作. FSCapture 

游戏测试工具清单

转自:https://github.com/jianbing/awesome-game-tester 收集整理了游戏测试人员工作相关的一些资源清单,包括学习资料,测试工具,开源框架,效率工具等. 学习资料 视频 游戏测试入门(张敬峰) 游戏测试从入门到精通 书籍 软件测试的艺术(原书第3版)(软件测试经典书籍) 游戏测试精通(Game Testing: All in One 第一版中文翻译) Game Testing: All in One(3rd Edition) Google软件测试之道 海