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

通过UI生成的: Screenshot.py

 # -*- coding: utf-8 -*-

 # Form implementation generated from reading ui file 'Screenshot.ui'
#
# Created: Mon Mar 30 11:41:46 2015
# by: PyQt4 UI code generator 4.10.3
#
# WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig) class Ui_ScrShot(object):
def setupUi(self, ScrShot):
ScrShot.setObjectName(_fromUtf8("ScrShot"))
ScrShot.resize(270, 270)
self.verticalLayout = QtGui.QVBoxLayout(ScrShot)
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
self.labelShow = QtGui.QLabel(ScrShot)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.labelShow.sizePolicy().hasHeightForWidth())
self.labelShow.setSizePolicy(sizePolicy)
self.labelShow.setText(_fromUtf8(""))
self.labelShow.setObjectName(_fromUtf8("labelShow"))
self.verticalLayout.addWidget(self.labelShow)
self.groupBox = QtGui.QGroupBox(ScrShot)
self.groupBox.setObjectName(_fromUtf8("groupBox"))
self.verticalLayout_2 = QtGui.QVBoxLayout(self.groupBox)
self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
self.horizontalLayout_2 = QtGui.QHBoxLayout()
self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
self.labelSpinBox = QtGui.QLabel(self.groupBox)
self.labelSpinBox.setObjectName(_fromUtf8("labelSpinBox"))
self.horizontalLayout_2.addWidget(self.labelSpinBox)
self.spinBox = QtGui.QSpinBox(self.groupBox)
self.spinBox.setObjectName(_fromUtf8("spinBox"))
self.horizontalLayout_2.addWidget(self.spinBox)
self.verticalLayout_2.addLayout(self.horizontalLayout_2)
self.checkBoxHideThis = QtGui.QCheckBox(self.groupBox)
self.checkBoxHideThis.setObjectName(_fromUtf8("checkBoxHideThis"))
self.verticalLayout_2.addWidget(self.checkBoxHideThis)
self.verticalLayout.addWidget(self.groupBox)
self.horizontalLayout = QtGui.QHBoxLayout()
self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem)
self.pushButtonNew = QtGui.QPushButton(ScrShot)
self.pushButtonNew.setObjectName(_fromUtf8("pushButtonNew"))
self.horizontalLayout.addWidget(self.pushButtonNew)
self.pushButtonSave = QtGui.QPushButton(ScrShot)
self.pushButtonSave.setObjectName(_fromUtf8("pushButtonSave"))
self.horizontalLayout.addWidget(self.pushButtonSave)
self.pushButton_Quit = QtGui.QPushButton(ScrShot)
self.pushButton_Quit.setObjectName(_fromUtf8("pushButton_Quit"))
self.horizontalLayout.addWidget(self.pushButton_Quit)
self.verticalLayout.addLayout(self.horizontalLayout) self.retranslateUi(ScrShot)
QtCore.QMetaObject.connectSlotsByName(ScrShot) def retranslateUi(self, ScrShot):
ScrShot.setWindowTitle(_translate("ScrShot", "Form", None))
self.groupBox.setTitle(_translate("ScrShot", "Options", None))
self.labelSpinBox.setText(_translate("ScrShot", "Screenstot Delay:", None))
self.checkBoxHideThis.setText(_translate("ScrShot", "Hide This Window", None))
self.pushButtonNew.setText(_translate("ScrShot", "新建", None))
self.pushButtonSave.setText(_translate("ScrShot", "保存", None))
self.pushButton_Quit.setText(_translate("ScrShot", "退出", None)) if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
ScrShot = QtGui.QWidget()
ui = Ui_ScrShot()
ui.setupUi(ScrShot)
ScrShot.show()
sys.exit(app.exec_())

 逻辑代码; MainScreenShot.py

 # -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
from Screenshot import Ui_ScrShot
import sys
import icoqrc
class MainFrom(QtGui.QWidget):
def __init__(self):
super(MainFrom, self).__init__()
self.Ui = Ui_ScrShot()
self.Ui.setupUi(self)
self.Ui.labelShow.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) # size 策略为 可扩展 expanding
self.Ui.labelShow.setAlignment(QtCore.Qt.AlignCenter) #alignment 对齐方式 居中
self.Ui.labelShow.setMinimumSize(240, 160) # 最小为 240 X 160
self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) # 设置总是在最前
self.setWindowTitle(u'截图工具')
self.setWindowIcon(QtGui.QIcon(':qq.ico')) self.shootScreen()
self.Ui.spinBox.setSuffix(' s')
self.Ui.spinBox.setMaximum(60)
self.Ui.spinBox.setValue(5) self.Ui.pushButtonNew.clicked.connect(self.newScreenshot) # 从新开始新建截图
self.Ui.pushButtonSave.clicked.connect(self.saveScreenshot) # 保存截图
self.Ui.pushButton_Quit.clicked.connect(self.close) # 退出 # 截图
def shootScreen(self):
if self.Ui.spinBox.value() != 0:
QtGui.qApp.beep() #操作带上系统的响铃
self.originalPixmap = QtGui.QPixmap.grabWindow(QtGui.QApplication.desktop().winId()) # 获取 屏幕桌面截图
self.updateScreenshotLabel()
self.Ui.pushButtonNew.setDisabled(False)
if self.Ui.checkBoxHideThis.isChecked(): # 当选择隐藏按钮为True时, 截图完成显示窗体
self.show() # 获取图片显示在label上
def updateScreenshotLabel(self):
# self.originalPixmap.scaled() scaled()函数的声明const返回一个Qpixmap
# QtCore.Qt.KeepAspectRatio 尽可能大的在一个给定的矩形大小缩放到一个矩形且保持长宽比。
# QtCore.Qt.SmoothTransformation 平滑转换
self.Ui.labelShow.setPixmap(self.originalPixmap.scaled(self.Ui.labelShow.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)) # 保存截图图片
def saveScreenshot(self):
format = 'png'
initialPath = QtCore.QDir.currentPath() + "/untitled." + format fileName = QtGui.QFileDialog.getSaveFileName(self, u"另存为",
initialPath,
"%s Files (*.%s)" % (format.upper(), format))
if fileName:
self.originalPixmap.save(fileName, format) # 新创建截图
def newScreenshot(self):
if self.Ui.checkBoxHideThis.isChecked():
self.hide()
self.Ui.pushButtonNew.setDisabled(True)
QtCore.QTimer.singleShot(self.Ui.spinBox.value() * 1000, self.shootScreen) # * 秒后触发截图 # 重载 resizeEvent 方法
def resizeEvent(self, event):
scaledSize = self.originalPixmap.size()
scaledSize.scale(self.Ui.labelShow.size(), QtCore.Qt.KeepAspectRatio)
if not self.Ui.labelShow.pixmap() or scaledSize != self.Ui.labelShow.pixmap().size(): # 当pixmap改变大小时候重新加载updateScreenshotLabel
self.updateScreenshotLabel() if __name__ == '__main__':
App = QtGui.QApplication(sys.argv)
MainApp = MainFrom()
MainApp.show()
sys.exit(App.exec_())

效果:

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

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

    上一篇:C#软件开发实例.私人订制自己的屏幕截图工具(六)加入配置管理功能 因为截图时可能须要精确截取某一部分,所以须要放大镜的功能,这样截取的时候才更easy定位截图的位置. 加入PictureBo ...

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

    版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢. https://blog.csdn.net/testcs_dn/article/details/ ...

  3. Java屏幕截图工具 捕获屏幕

    原文:http://www.open-open.com/code/view/1420037709781 import java.awt.BorderLayout; import java.awt.Co ...

  4. android sdk屏幕截图工具

    调用android sdk中的工具,在开发板上截图. 使用usb线连接android设备,打开adb调试. 进入目录 sdk/tools/ 运行 traceview.bat 运行 uiautomato ...

  5. C#软件开发实例.私人订制自己的屏幕截图工具(十)在截图中包括鼠标指针形状

    本实例所有文章文件夹 (一)功能概览 (二)创建项目.注冊热键.显示截图主窗体 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)加入配置管理功能 (七)加 ...

  6. 【工具】小巧好用的屏幕截图工具——ScrToPic

    百度搜ScrToPic,有绿色版的用. 好处: 小巧快捷,不用为了截图而开QQ,不用看QQ的弹窗广告. 可以自定义截图区域和窗口捕捉,可以自定义这两个功能的快捷键. 截图时可以选择要不要显示鼠标. 窗 ...

  7. 【最强大的屏幕截图和标注工具】Snagit 2019.1 for Mac

    [简介] 今天和大家分享最新的 Snagit for Mac 2019.1 版本,这是Mac上最好用最强大的屏幕截图工具,Snagit功能非常强大,支持各种方式的屏幕截图,如全屏.滚动.部分.窗口.菜 ...

  8. 8款压箱底的Mac屏幕截图和录音录像工具软件,请你务必低调使用

    以下几款是是Mac上优秀的屏幕截图.录像和录音工具,有了这些工具,在Mac上进行截屏.录制视频或者录音都会事半功倍. 1. Snagit Mac上最好用最强大的屏幕截图工具,支持各种方式的屏幕截图以及 ...

  9. 如何使用office2010插入屏幕截图

    当我们习惯了用QQ的屏幕截图之后,当某一天我们在一台没有装QQ的办公电脑上,它装着office2010,我们可以实现用office来截图吗?其实Office2010深藏着犀利的截图工具. 插入图片到文 ...

随机推荐

  1. 剑指Offer 树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)     思路: 分为2个部分.1先找出A中和B根节点相同的节点r. 2,咱判断B中所有孩子节点是不 ...

  2. linux下QtCreator无法输入中文的情况

    解决linux下QtCreator无法输入中文的情况 本文由乌合之众 lym瞎编,欢迎转载 blog.cnblogs.net/oloroso 本文由乌合之众 lym瞎编,欢迎转载 my.oschina ...

  3. struts2和hibernate整合的小Demo

    jar包下载地址 创建一个web项目. 导入jar包 配置web.xml <?xml version="1.0" encoding="UTF-8"?> ...

  4. 话说好像是这样,ios下面通常用iframe来打开你的scheme地址; Android下通常用location.href来。。。 不过实际情况好像比这个复杂得多。。

    http://js.40017.cn/touch/hb/p/openApp.js/** * Created by wsy10943 on 2015/5/18. */ window._web_publi ...

  5. Git索引

    原文: http://gitbook.liuhui998.com/7_4.html git中的索引(index)是一个存放了排好序的路径的二进制文件(通常是.git/index), 每一个条目都附带有 ...

  6. meeting room I & II

    Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...

  7. centos 7 升级后yum install出现Exiting on user cancel

    centos 7 升级后yum install出现Exiting on user cancel centos 7.x升级后用yum install进行安装时经常出现Exiting on user ca ...

  8. 2.nodejs权威指南--Buffer

    1. Buffer 1.1 创建 var buf1 = new Buffer(100); var buf2 = new Buffer([0,1,2]); var buf3 = new Buffer(' ...

  9. 16. javacript高级程序设计-HTML5脚本编程

    1. HTML5脚本编程 l 跨文档消息传递API能够让我们在不降低同源策略安全性的前提下,在来至不同的域的文档间传递消息 l 原生拖放功能可以方便的指定某个元素是否可以拖动,并在放置时做出响应.还可 ...

  10. git remote 相关用法

    为了便于管理,Git要求每个远程主机都必须指定一个主机名.git remote  命令就用于管理主机名. 不带选项的时候,git remote命令列出所有远程主机. $ git remote orig ...